欢迎来到天天文库
浏览记录
ID:37912934
大小:166.00 KB
页数:40页
时间:2019-06-02
《UCOS-II移植ARM的读书笔记(12.11)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、真是很郁闷,昨天晚上边看移植代码边记下来的笔记不知道怎么回事在保存的时候竟然不见了。。。5555。。。一个晚上工作的结果啊,关键是我是第一次也是正式开始移植的学习之路啊。。。真是够倒霉的。。。。今天在工作之前先把昨天的笔记重新回顾一下,其实后来想想也许是件好事,可以让我今天在不借助其他的帮助的情况下自己看代码自己跟自己讲一遍,其实很多看起来是倒霉看起来是灰心的事情把我们的观点换一下那么就是一件好事。。这样的情况发生在我的身上已经挺多次了。。。。好啦,废话不说,开始补昨天的日记UCOS-II的移植需要提供2,3个文件分别介绍如下:一:OS_CPU.
2、H1与编译器有关的数据类型 只是按照不同的编译器编写对应的数据类型的typedef 对应于ARM7的数据类型的编写如下typedefunsignedchar BOOLEAN; /*布尔变量 */typedefunsignedchar INT8U; /*无符号8位整型变量 */typedefsigned char INT8S; /*有符号8位
3、整型变量 */typedefunsignedshortINT16U; /*无符号16位整型变量 */typedefsigned shortINT16S; /*有符号16位整型变量 */typedefunsignedint INT32U; /*无符号32位整型变量 */typedef
4、signed int INT32S; /*有符号32位整型变量 */typedeffloat FP32; /*单精度浮点数(32位长度) */typedefdouble FP64; /*双精度浮点数(64位长度) */ 在上面定义的各种数据类型中按照ARM7的堆栈宽度选择INT32UtypedefINT32
5、U OS_STK; /*堆栈是32位宽度 */ 接下来一部分是为了兼容低版本UCOS的数据类型所编写的代码,在UCOS-II中暂不考虑 2与处理器相关的代码 先定义中断的实现方式,预先设定的中断方式有三种,在ARM7中设置为方式2#define OS_CRITICAL_METHOD 2 /*选择开、关中断的方式*/ 接下来的一段是我暂时还没有完全搞懂的一部分,只知道是设定了12个软件中断的函数,当调用这些函
6、数之前都会执行对应中断号的事情。。具体的看到后面应该能完全搞懂软件中断的实现方式,该段代码在后面的文件中会有具体的解释,这里暂时不看 定义堆栈的生长方式,ARM7内核支持两种生长方式,但是ADS的C语言编译器只支持从上往下的生长方式,因此:#defineOS_STK_GROWTH 1 /* 堆栈是从上往下长的,0-从下往上的生长方式 */ 最后几行分别定义了用户模式01和系统模式1f以及IRQ中断禁止的指令80三个立即数,方便调用。 还有两个预定义往后看应该知道作用,暂不考虑
7、,不是很重要。 二:OS_CPU_C.C 个文件中要求用户编写10个简单的C函数,但是只有1个函数是必要的,其余的函数必须声明,但不一定要包含任何代码,大致看了一下作用好像是用来调试之类的。唯一要编写的是OSTaskStkInit() OSTaskStkInit()函数的功能是初始化任务的栈结构,任务的堆栈结构与CPU的体系结构、编译器有密切的关联。从ARM的结构可以写出如下的栈结构:程序计数器PC,程序链接器LR,R12-R1,R0用于传递第一个参数pdata,CPSR/SPSR,关中断计数器(用于计算关中断的次数,这样就实现了中断的
8、嵌套),返回的地址指针是指向的最后一个存入的数据,而不是一个空地址。 软件中断异常SWI服务程序C语言部分 voidSWI_Ex
此文档下载收益归作者所有