這是我們一門課的大作業,目標板是STR750開發板,跟大家分離一下。
在uC/OS-II中四个任务,第一个是对AD的采样值进行处理;
第二、第三个任务分别是数码管显示的高位和低位,但注意如果只这样写的话只能显示一个数字,因为两个字共用P0口,第二个任务挂起后,第三个任务的数据马上就会送到P0口,而把第二个任务的数据冲掉,我的解决办法是改os_cpu_c.c文件中的OSTimeTickHook ()函数,该函数是在每次时钟中断,即任务切换时调用,所以我在每次切换时挂起一个,Resume另一个,这样就解决了;
其实也可以把第二、第三个任务合成一个任务,写成这样:
void Task2(void) { while(1) { Display(Count1,1); OSTimeDlyHMSM(0, 0, 0, 20); Display(Count0,0); OSTimeDlyHMSM(0, 0, 0, 20); } }
我是觉得任务太少不太好,还有就是想练习一下前面的那种方法。
第四个任务是LED的闪烁,用来指示任务正在调试。而AD的采样值是中AD中断服务程序ADC_IRQHandler()中读取的,通过BSP_VectSet(ADC_IRQChannel, ADC_IRQHandler)函数把ADC_IRQHandler()的地址传给底层函数,然后就不用我们管了,记得打开该模块的EIC中断。
任务间的通信是通过全局变量实现的,因为移植消息邮箱没有成功,我怀疑是硬件资源不够用的原因。如果有谁成功的话,请教我一下,谢谢。
我的邮箱是:464056226@qq.com,欢迎大家和我讨论。
附件是我的源代码,用IAR集成开发环境开发的。
|