6.uCOS2在ARM3.0开发板上移植实战

转自 https://edu.csdn.net/lecturer/505 朱老师物联网大讲堂
6.uCOS2在ARM3.0开发板上移植实战

第一部分、章节目录
4.6.1.开启ucos2的移植之旅
4.6.2.ucos2移植实战1
4.6.3.ucos2移植实战2-初步整理bsp部分
4.6.4.ucos2移植实战3-下载试运行
4.6.5.ucos2移植实战4-OS调度启动排错
4.6.6.ucos2移植实战5
4.6.7.ucos2移植实战6
4.6.8.在ucos2中创建任务
4.6.9.在ucos2中创建任务2
4.6.10.在ucos2中创建任务3

第二部分、章节介绍
4.6.1.开启ucos2的移植之旅
本节对ucos2的移植做个总体引导,并且分析一般思路,定下整个移植的任务纲领。
4.6.2.ucos2移植实战1
本来开始移植工作,首先是建立工程,然后将ucos2的各种文件添加进来。并解决了几个小问题后成功编译通过。
4.6.3.ucos2移植实战2-初步整理bsp部分
本节对移植工程的bsp部分进行整理,主要是把之前课程中BSP代码复制过来替换以保证时钟、串口、GPIO等部分的初始化都是适合开发板的。
4.6.4.ucos2移植实战3-下载试运行
本节对移植好的ucos2下载到开发板中试跑,并且创建SI和MDK的共享工程,以方便后续对源码进行修改编译烧写等实验。
4.6.5.ucos2移植实战4-OS调度启动排错
本节用分析和实验的方式解决源码中的错误,最后让系统调度运行起来,看到TaskStart任务执行的效果。
4.6.6.ucos2移植实战5
本节首先对LED闪烁的代码进行移植看到LED闪烁现象,然后分析并验证统计任务和空任务的执行情况。
4.6.7.ucos2移植实战6
本节在上节实验的基础上总结RTOS的多任务宏观并行和微观串行的特性,并且从理论上讲解了如何在实际项目中安排多个任务来合理分配CPU时间。
4.6.8.在ucos2中创建任务
本节讲解如何在ucos2中创建任务,先分析理论后面再实践。
4.6.9.在ucos2中创建任务2
本节在ucos2中动手创建一个任务,并且实践运行,从任务运行的结果分析验证前面学习的理论。
4.6.10.在ucos2中创建任务3
本节对ucos2的几个任务进行调整和规划,写出来标准的多任务,实践研发中就是这样的。

第三部分、随堂记录
4.6.1.开启ucos2的移植之旅
4.6.1.1、移植和硬件平台的关系
(1)只要是Cortex-M3内核的SoC移植差异都不大
(2)同内核同SoC的不同开发板移植差异主要在BSP部分
(3)不同内核的开发板移植难度大,建议找官方移植的同内核版本为起点
4.6.1.2、移植的一般思路
(1)先建立开发环境上的空工程(模版工程更好)
(2)添加ucos2的核心代码进去
(3)编译,解决报错和警告
(4)下载运行,并小幅修改代码查看效果
(5)添加并调试项目需要的BSP,编写并调试项目app部分。

4.6.2.ucos2移植实战1

4.6.3.ucos2移植实战2-初步整理bsp部分

4.6.4.ucos2移植实战3-下载试运行
4.6.4.1、串口打印信息确认
4.6.4.2、SI与MDK配合工作
在一套源码上,同时建立一个SI工程和一个MDK工程,这样我们对这一套源码的处理由MDK和SI共享。我们在SI中进行代码浏览和修改,在MDK中进行编译和下载。
4.6.4.3、代码分析

4.6.5.ucos2移植实战4-OS调度启动排错

4.6.6_7.ucos2移植实战5_6
4.6.6.1、LED代码移植和测试
4.6.6.2、其他2个任务的分析
(1)OS其实就是提供了一个环境,这个环境允许多个任务宏观上并行的在CPU上执行。
(2)其实这些任务在微观上是串行运行的。
(3)操作系统的主要目的就是让我们的多个任务可以宏观并行微观串行的在CPU上得到合理的执行,从另一个角度讲OS的主要目的就是合理瓜分CPU时间。
假设产品:通过按键设置温度报警阈值的一个LCD显示温度计
CPU时间设计:
任务1:温度采集+LCD更新+报警: 每1s执行1次
任务2:按键检测+调整阈值: 每20-100ms执行1次
任务3:LED闪烁七彩灯: 每300ms执行1次
功能 :工业中脉冲信号(宽度1ms) 用中断方式来及时响应
4.6.6.3、任务之间的协作-CPU时间如何分配
(1)任务设计和调度的目标就是:尽量不要让CPU空转,让CPU时刻都在运行有意义的代码
(2)任务设计和调度的原则:根据各个任务本身的重要性和对时间的敏感性来设计各个任务的优先级
(3)注意体会RTOS的RT,体会在2个方面:一个是上面说的任务切换,另一个是中断响应和执行。

4.6.8.在ucos2中创建任务
4.6.8.1、任务创建的关键点
(1)任务函数。任务将来被调度运行的函数,任务函数一般都是一个死循环。
(2)任务栈。一般定义为一个全局变量数组,大小根据任务实际消耗来定。
(3)任务优先级。每个任务都要指定一个全局唯一的优先级。
4.6.8.2、任务创建实战
(1)在main中创建一个任务

4.6.9_10.在ucos2中创建任务2_3
任务创建代码应该放在哪里?
(1)一般思路是:main中创建TaskStart,然后在TaskStart中去创建其他的任务。

沿着这条线继续走,能做什么?
(1)根据项目的需求,先把用到的硬件的bsp先完善(譬如按键的底层和中间层驱动代码)
(2)根据项目需求,创建多个任务,然后在每个任务中设计自己的逻辑代码,注意适当延时让出CPU给其他的任务。

发布了10 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40083589/article/details/90518811