原创 神舟IV号的UCOS使用基本例程

2011-9-28 21:23 3615 10 11 分类: MCU/ 嵌入式
本文由本人原创,包括各个例程,希望与大家一起交流,转载请声明,谢谢!本人邮箱:Lmwzm@qq.com 期待和您一起交流。欢迎拍砖!
例程说明:
BSP文件夹为各类驱动,各个工程文件夹里的APP对应着各自的应用程序及配置。
注意,这些工程是在IAR 6.10.5下建立的,请使用该版本或更高的版本打开,
否则原有配置将被重置,编译时会出错。当然,如果你知道怎么配置的话,也
就无所谓了。

1、FirstLED 只是将官方的例程的管脚重新定义了一下,
             另外将原来STM32的库函数由2.0升级为3.4。
             现象是神舟IV号上的3个LED灯以0.5s的间隔闪烁;

2、Sem       为UCOS II信号量的使用提供一个参考
       任务AppTaskKeyScan每50ms扫描KEY2状态,若KEY2按键按下,
       则释放信号量激活任务AppTaskSem,使LED2状态反转

3、Mbox       为UCOS II邮箱的使用提供一个参考
       任务AppTaskKeyScan每5askKeyScan。这间接地说明了,
       发送邮箱时是把内容的地址指针给了邮箱,而不是内容本身。
       读者可以自己试着把两个任务优先调换,会发现,第1个字母
       A将无法输出。

4、Mutex      为UCOS II互斥型信号量的使用提供一个参考
       任务AppTaskKeyScan每50ms扫描KEY2状态,若KEY2按键按下,
       则向邮箱发送1个字符,同时字符加1(即A->B->C...->Z->A),
       任务AppTaskMbox当邮箱非空时获取邮箱内容并通过串口1输出。
       由于AppTaskMbox的优先级比AppTaskKeyScan高,所以一旦
       AppTaskKeyScan向邮箱发送了内容,系统会马上调度使
              AppTaskMbox先运行。但本例中使用了互斥型信号量,在
       互斥型信号量释放前,尽管AppTaskMbox优先级高,但并不
       优先调度。读者可以这样进行验:该工程默认情况下使用互斥
       型信号量,直接编译运行,可以看到串口先输出"Mutex Test"
       而后输出字符'A'等;若将两个任务中的OSMutexPend,OSMutexPost
              语句注释掉,则可以看到先输出字符后输出"Mutex Test"

5、Flag       为UCOS II事件标志组的使用提供一个参考,同时使用了邮箱广播功能
       任务AppTaskTx向邮箱广播发送1个字符,而后等待两个接收
       任务接收完成并将相应的标志位置1,当相应位均置1后,
       字符递增,并广播,如此循环。为了验证标志组的作用,
       读者可试着将其中的一个接收任务的OSFlagPost注释后观察。

6、Queue      为UCOS II消息队列的使用提供一个参考
       任务AppTaskKeyScan每50ms扫描KEY2状态,若KEY2按键按下,
       通过消息队列发送消息"Key Down!",任务AppTaskQueue
       将接收消息队列中的消息并通过串口输出。与邮箱类似,
       消息队列也可广播,这里不具体示例,请读者自行编写程序

7、KeyExti    为UCOS II中断的使用提供一个参考
       任务AppTaskKeyScan每50ms扫描KEY2状态,若KEY2按键按下,
       通过消息队列发送消息"Key2 Down!",任务AppTaskQueue
       将接收消息队列中的消息并通过串口输出。该工程使能了
       外部中断0,与按键WAKEUP相连,当该按键按下时向消息
       队列发送消息"Key Wakeup Down!"。可以看到,中断比扫描
       更灵敏,按一次,有时会发送多次消息(因为没有消抖)

8、StackCheck 为UCOS II检查堆栈和CPU使用率提供一个参考
              程序运行后,串口每隔1秒打印出每个任务的堆栈使用情况
       和该程序的CPU使用率。若不想检查堆栈并打印,将宏定义
       #define DEBUG_CHECK_STACK 注释掉即可。
       任务需要运行足够长的时间,并要考虑各种情况,才能得到
       正确数据。最后确定的堆栈大小,还须考虑今后的扩展,
       一般多分配10%-25%,或者更多。如果系统对稳定性要求高,
       则应该多1倍以上。通过堆栈检查操作,得到的是曾经被使用
       过的堆栈区域的大小,而不可能得到完全精确的实际使用情况。
       本例中,读者可以对比一下按键按下前后AppTaskQueue的
       堆栈使用情况,可以发现有明显的区别。
              CPU使用率的精度是1%.

文章评论1条评论)

登录后参与讨论

用户377235 2012-4-9 12:23

学习
相关推荐阅读
用户1639588 2013-11-13 09:57
扩频:无线消费类应用的安全港(第1部分)
1915年,首次无线语音传输成功实现,从此无线通信产业开始快速发展。之后不久,1920年,商业无线电广播出现,1921年警车无线电调度系统出现,1935年首次全球性电话通话成功实现。商业世界与无线技术...
用户1639588 2013-11-13 09:55
2014十大技术趋势:企业IT团队应变寻机
睿智的IT组织懂得采用创新的技术为其业务带来持续的积极的影响。为帮助企业勇于应对改变,提供更好的用户体验,并致力于解决业务性能的挑战,我们整理了2014年将会给IT组织带来影响的十大趋势,与您分享并最...
用户1639588 2012-10-22 23:52
ubuntu安装总结
XP系统下安装ubuntu 1、用grub硬盘安装ubutnu 12.04LTS时,在进入安装界面前提前“selected item cannot fit into memory”。用wubi...
用户1639588 2012-05-25 10:49
verilog里的求模运算与matlab的比较
在matlab里有两个求模函数,mod和rem,其中mod(-2,1024)=1022,rem(-2,1024)=-2;而verilog里的求模只能通过“%”来实现,如果要实现matlab的这两种...
用户1639588 2012-05-25 10:42
modelsim中timescale未统一设置引起的错误
仿真xilinx的卷积编码IP核时,因为IP的timescale和testbench的不一致,导致最终输出结果不正确...
用户1639588 2012-04-02 20:42
STM32&uCOS笔记1、搭建符合自己需求的开发环境
本日志期待实现的目标是:修改Micrium官方提供的例程使其可以在神舟IV号开发板上正常使用,所做的主要修改是将该例程中的ST固件库由2.1.0升级为3.4.0 一、资源准备     神舟...
我要评论
1
10
关闭 站长推荐上一条 /2 下一条