Nios使用ucos心得

Nios使用ucos心得

一、hello world
本文以正点原子SOPC教程4个ucos实验为讨论对象,完成该部分实验一些心得体会。
若感兴趣或者需要工程,请联系[email protected].
任务状态信息的存储依赖于堆栈,本质上,处理器依照程序结构对数据进行处理,当任务跳转时,保留当前信息,恢复时还原即可。
任务之间存在优先级,ucos调度策略是优先级高的先执行,实际上该策略对于优先级低的任务不友好,很可能一直处于等待状态。但调度算法难以十全十美,具体情况具体分析。
任务代码可使用普通的c函数,该函数函数名即函数入口地址作为参数传递至任务创建API函数OSTaskCreateExt()。

二、任务管理与时间管理

任务转换图如下:
任务转换图
不难看出,任务起始从休眠态,经任务创建函数进入就绪态。就绪态经启动任务、中断退出、任务切换三种可能方式进入运行态。运行态的任务,被抢占退回就绪态被中断进入中断服务,遇见延时、信号量、挂起等控制时,进入等待状态,这个等待用于资源的冲突避让等,等待结束可进入就绪态。
在使用OSCPUUsage变量时,需要在cfg.h添加一个宏定义,否则将不会编译该部分,这点体现了Ucos的可裁剪性。

三、信号量
信号量用于进程通信与同步,有点像verilog的使能信号,控制任务对资源的使用,避免冲突,这点不难想到,两个人在一张纸上随意写字会很混乱,当互斥写字就能克服上述问题。
这一部分,对数据结构掌握情况有要求,数据结构研究数据的组织方式。为了模拟任务共同访问资源,定义了全局变量,允许多个任务访问。再比如,该工作机制就加锁,有人使用把锁关了,离开再传递给下一位。
对于API函数,还是有熟悉空间,人的精力总是有限的,这种基于BSP的开发,熟悉API尤为重要。

四、消息邮箱与消息队列
消息邮箱通过 发布消息实现任务通信,而消息队列是多个邮箱的集合体,容量更大。任务通信有媒介,则必然需要了解如何寄和如何收。

五、小结
简单使用了RTOS,不得不说,OS还是有很多需要探讨之处。再接再厉吧

猜你喜欢

转载自blog.csdn.net/qq_44801767/article/details/106692519