空间隔离操作系统µC/OS-MPU中段的定位

介绍
本应用笔记描述了使用 gcc 环境时,数据段的定位实现。
µc/os-mpu介绍
µc/os-mpu基于 µc/os-ii,增加了内存保护扩展,这种保护称为“空间保护”,隔离 µc/os-ii 内核与任务。基于µc/os-mpu,为任务提供了一个受保护的运行环境,其他任务不会干扰或损坏任务的内存,避免非法访问。
·  空间保护
空间保护旨在保护应用程序的内存不被其他任务破坏。下图展示了一个包含三个进程的系统,以说明空间保护的实现。
通常,µc/os-ii 内部变量和线程(任务)放到进程#0。进程#1包含 2个线程。进程#2包含 3个线程,线程可以访问共享内存区域(shared memory)。进程#3是2个线程的集合,并且有权访问共享内存区域。
段的组织
在基于µc/os-mpu的应用中,进程中的所有全局数据位于同一个段。下图展示了单个段的数据组织:
在启动阶段,运行环境的启动函数将初始化数据(initialized data)从 rom 复制到 ram ,并清零未初始化数据(uninitialized data)。事实上,每个进程都有自己的段,在项目中,该组织结构可能存在多次。
·  未初始化数据
使用宏sp_mem()放置变量,基于gcc链接器命令文件,将变量放置到段”.sec.bss”中。
示例:全局变量 task1stk[] 和 syncsem 放置到段”sec01”中未初始化数据域。
将已有代码集成到µc/os-mpu系统时,可以基于文件放置数据,仅需调整链接命令文件。
示例:基于提供的gcc链接命令文件模板,红色部分的行表示将文件 myfile.c中未初始化数据放置到段”seca0”中的未初始化数据域。
在启动阶段,我们需要清零段中未初始化数据域。为了简化实现,系统提供了一些有用的宏sp_init_()。
示例:在调用函数 myinitdata()时,段” sec01”和”seca0”中未初始化数据域清零。注意:函数”_zero_init”可能是启动环境外部提供的:
·  初始化数据
使用sp_mem()将变量放置在段”.sec.data”中。
示例:全局变量”mynumber”和”myvalue”放到段” sec01”中的初始化数据域。此外,数据的值被放置在rom中的数据区域。
将已有代码集成到µc/os-mpu系统时,也可以基于文件放置数据,仅需调整链接器命令文件。
示例:根据提供的gcc链接命令文件模板,红色显示的行表示将文件 myfile.c中的初始化数据放置到段” seca0”中的初始化数据域。
在启动阶段,我们需要复制段中的初始化数据域。为了简化实现,系统提供一些有用的宏sp_init_()。
示例:调用函数 myinitdata()时,段” sec01”和” seca0”中的初始化数据域,将从 rom 复制到 ram。
注意:函数_data_init可能不是启动环境提供的:


一加5什么时候上市?最新消息:一加5发布会时间确定6.21,第二日发售,现货果然充足!
新型比较器在所有条件下均具有微功耗操作特性
iphone14pro发售 什么时候发售
WDM定时器在冗余技术中的应用
国产大飞机C919距离交付又近一步:再次成功试飞
空间隔离操作系统µC/OS-MPU中段的定位
用C语言实现状态机设计模式
AI时代应该具备怎样的嵌入式思维
西门子MES平台在湖北卷烟厂中的应用
自制万用表升压电路(三款万用表升压电路设计方案详解)
航盛电子荣膺高工“2023年度智能汽车座舱域控制器TOP10供应商”
土壤养分传感器性能的特点以及实际作用的介绍
MLCC龙头异军突起 一个月后被打回原形
vivoNEX双屏版评测 未来不止一面
基于ARM单片机和智能手机的CAN总线分析仪设计
将动作融入人工智能机器人,开启与人的互动时代
智能家居选择要注重哪一些因素
什么是柔性线路板?
有没有高性价比的供应商管理系统
服务机器人在市场上要走的路还很长