μC/OS-II在DSPFlash存储器中运行的关键问题
引言
在作为国家863计划子项目挖掘机智能化控制系统的开发中,出现了智能化挖掘机轨迹控制系统不按照预先设定好的轨迹运行和嵌入式实时多任务操作系统μC/OS-Ⅱ调度紊乱等失控问题。该智能化系统中采用了μC/OS-Ⅱ,通过位移传感器实时采集挖掘机的铲斗、斗杆和动臂等3路角度信号,通过算法规划路径驱动液压比例阀实现平行推进、铲斗挖掘等典型作业。本文主要针对课题遇到的问题,重点阐述μC/OS-Ⅱ在芯片内Flash存储器运行时关键问题的分析与解决办法。
1μC/OS-Ⅱ在Flash存储器中的运行
1.1 μC/OS-Ⅱ的特点与功能
μC/OS-Ⅱ是一个实时多任务的嵌入式操作系统,它采用可剥夺型内核。所有的任务都有优先级,多任务之间优先级高的可以中断执行中的低优先级任务而优先执行。
它的特点主要有:公开源代码、可移植性、可固化、可裁减、支持多任务、具有可确定性等。μC/OS-Ⅱ是基于优先级抢占式的实时多任务操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列)和内存管理等功能。
1.2关键问题
在完成了智能控制软件后,就是将之嵌入到μC/OS-Ⅱ系统中。遇到的主要问题是移植好的μC/OS-Ⅱ源代码在闻亭的目标板上在线仿真时,把.out文件下载到RAM中能正常执行,但是用CCS烧写到Flash存储器中就不能正常执行,出现智能化挖掘机轨迹控制系统不按照预先设定好的轨迹运行和μC/OS-Ⅱ实时多任务调度紊乱等失控问题,尤其是在课题的后期验收阶段问题尤为棘手。
1.3原因分析
程序固化的关键问题是如何在程序存储器中分配存储空间给常量和用const关键字定义的静态、全局变量。经过仔细研究,发现与TI的C编译器功能有关。CCS的编译器按照标准C,没有对Flash ROM中常数数据进行直接访问的功能。所以必须让const段的常量数据在RAM中。
实现这一条件的方法有3种:
a)方法1:解决μC/OS-Ⅱ在Flash中运行的方法,采用去除const关键字,在程序中赋初值使用,并且需要在.cmd文件中将.cinit段分配到程序区Flash存储空间,然后在编译器的编译选项中选中“-C”,即ROM初始化(C编译器默认就是这样的)。
b)方法2:不对定义作修改,.const段保存在Flash存储器中,数据不向数据存储器移动,程序运行时直接在程序存储空间中访问这些量。由于c语言缺乏访问程序区数据的有效手段,因此这些语句只能使用汇编语言编写。由于在每一处访问这些常量时都必须使用这些语句,因此这样编写程序改动量较大。
相关文章
- 2023-11-19轴类零件的高精度形状误差检测方法研究
- 2023-07-20光栅投影轮廓测量的系统标定技术
- 2023-12-10吸收式制冷循环系统的热力学分析
- 2023-12-14浅谈减压阀的结构设计
- 2023-03-09铜氨液流量测量的改进
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。