嵌入式操作系统UCOSII移植笔记
记录学习、不断进步、第一次尝试边学习边记录的方式进行学习,总体感觉不错、也算是分享一下自己的学习心得吧!
看的是正点原子的教程,用的是精英版开发板,芯片是STM32F103ZET6
开发工具是Keil5 MDK
为什么要进行操作系统移植?
一般的嵌入式程序在51上运行的时候很少用到操作系统,不过也有用的(很少不抬杠),只有对时间要求比较高的时候才会用到操作系统,而RTOS不是一个系统,它是一类操作系统。UCOSII也只是众多嵌入式操作系统中的一个,还有其它的嵌入式操作系统,为什么我选择学习移植它,很简单因为它资料多、对于初学者来说,还是先照猫画虎吧!
其实还有一个原因,那就是毕业设计要用到操作系统的多任务管理功能,本应该上课就学会的,上课没学会那只能自己补喽,话不多少,开始干活~~
第一步、准备一份待移植的工程模板
因为我用的是原子哥的开发板,自然就用他们送的资料啦,嵌入式点灯工程师上线啦,哈哈哈哈哈;
我选用的是:跑马灯工程精英版
第二步、往工程模板中添加UCOSII文件
1、工程下建立UCOSII文件夹
2、文件夹里建立三个子文件夹
3、往子文件夹里添加相应文件
也就是把提供的Source文件夹里面的文件放在CORE里(UCOSII源码)
移植好的例程里的CONFIG文件夹里面东西放到新建的CONFIG文件夹里
移植好的例程里的PORT文件夹里面东西放到新建的PORT文件夹里
4把自己创建的UCOSII文件添加到移植的工程目录中去
新建三个分组
添加子文件,注意要删掉一个ucos_ii.c,要不然会报错的
同理添加PORT文件,注意这里要选择所有文件,然后只需要添加三个文件即可。
如图,
同上,继续添加文件
最后点击OK!我一开始就忘记点了,结果有操作了一遍,尴尬的一批
可以发现UCOSII-CORE里文件带钥匙还是带锁不管了,反正就是代表它是只读文件我们接下来可以修改文件属性
把只读取消掉,这样钥匙就没有了。
5、添加头文件路径
如果现在就编译会报错,我的报了12个错误,先不管错误我们先去添加头文件路径再看看
头文件路径只需要添加到文件夹路径进行了,我也不知道为啥,反正都是这么干的。
接下来再次编译还是会有错误,…\UCOSII\CORE\ucos_ii.h(44): error: #5: cannot open source input file “app_cfg.h”: No such file or directory
不能找到这个头文件,我们暂时不需要这个头文件,我们将其找到注释掉即可;
再次编译还有一个错误,提示…\OBJ\LED.axf: Error: L6200E: Symbol PendSV_Handler multiply defined (by os_cpu_a.o and stm32f10x_it.o).
这两个文件里都有这个函数实现,我们知道在实时操作系统中响应越快越好,所以我们保留相对底层的实现,把用C语言实现的注释掉
好的编译通过,继续进行接下来的操作把sys.h里面的使用UCOS的宏定义定义为1,我的理解是相当于一个开关;
再次编译发现还有一个错误,我滴妈呀,定时器有冲突了,还要继续修改。我们把刚才注释掉的那个函数下面,还要继续注释掉。
现在编译没有问题了,但应该还不代表移植就已经成功了
由于用的是正点原子的例程文件复制的,所以这个任务堆栈函数已经实现好了,实话讲这个函数具体实现什么功能现在我也不清楚,以后深入学习再来研究源码如何实现吧。*
6、现在要编写程序测试一下我们移植的操作系统能否正常运行
我们按照正点原子的例子进行,创建一个开始任务、一个点亮和熄灭LED0的任务、一个点亮和熄灭LED1的任务、再进行一个浮点运算的任务测试一下;最后一个是为移植F4工程做准备的。具体如何创建我们不必纠结,后面会学到。具体如何编写,我也不会,先照猫画虎,比这例子粘贴一个。
CV大法好,复制一个移植好的工程,我们编译下到开发板里看一下效果。
7、实验效果
两个灯交替闪烁,串口会打印输出浮点数据,串口如果打印出数据有问题,可能是波特率的问题,设置修改一下就好。
第一次边记录边学习,感觉还是很不错的,我前面的时候建好的分组没有点击OK就关掉了,要是没有记录笔记,估计这次移植就要失败了,不管怎样这个实验成了还是比价高兴的,好好学习、天天向上,初出茅庐的小李,加油!
接下来的毕设还要用这种方式,记笔记确实有点浪费时间,但是学完可以回来再看看自己是如何一步步走过来的,出问题了也好去查找,浪费点时间应该也是值得的吧!移植所需要的文件我会打包好上传,同时我也会把我移植好的工程上传,希望能和大家一块进步!
来源:CSDN
作者:Aqst_666
链接:https://blog.csdn.net/weixin_43176183/article/details/103898194