UCOSIII使用总结(一)

1、DMA中断跟其他中断一样,DMA中断进入时调用UCOS中断处理,结束时调用中断级任务调度函数就可以了
2、有些地方还需要注意堆栈字节对齐的问题,如果任务运行出现莫名其妙的错误(比如用到 sprintf 出错),请考虑是不是字节对齐的问题。
3、OSSemPost()函数:如果有一个或多个任务在等待这个信号量,则优先级最高的任务将获得这个信号量,然后由调度器来判定刚获得信号量的任务是否为系统中优先级最高的就绪任务,如果是,则系统将进行任务切换,运行这个就绪的任务。
4、OSSemPend()函数:请求消息OS_OPT_PEND_BLOCKING 如果没有任何消息存在的话就阻塞任务,一直等待,直到接收到消息OS_OPT_PEND_BLOCKING 指定信号量无效时,任务挂起以等待信号量。OS_OPT_PEND_NON_BLOCKING 信号量无效时,任务直接返回。
5、使用UCOSIII后串口在发送时间过短或者数据量过大的情况下,会发生串口阻塞情况。(例如200ms每发100个字节数据会阻塞);其实只要等待时间够长,数据量大没出现问题。(应该是同时发送接收导致的,测试过不发送只接收不会出现阻塞现象)
6、当信号量用于共享资源时,可以设置为1 (二进制)或者大于1(计数型);当用于信号机制,则该值应该设置为0.在我理解中,信号机制就应该是任务同步。
7、中断和任务没有本质区别,只是中断中多一些限制而已。比如不能使用系统提供的某些同步/互斥机制。
8、Thread.h中的OS_SLEEP_MS与os.h中的OSTimeDlyHMSM都只是对当前语句进行有效的延时;
9、UCOSIII比较UCOSII最明显优点是其时间片轮转法;
10、STM32(单CPU)的UCOSIII中的任务(线程)是一段简单的可运行的程序;就单个任务来说,在运行时同样与跑裸机一样,都是完全的占用CPU。即使是多核的芯片,只要是单CPU,在任务(线程)运行过程中就是完全的占用CPU(微观是就是串行运行的),只不过是操作系统(内核)帮助调配CPU资源。
11、UCOSIII是一个抢占性内核,就是说它总是执行优先级最高的就绪任务;
12、UCOSIII内核占用CPU的时间在2%到4%之间;因为它添加到目标系统中需要额外的ROM和RAM(1~4KB);
13、UCOSIII支持任何数量的任务、信号量、互斥信号量、事件标志组、消息队列、软件定时器、内存分区;用户在运行时分配所有的内核对象;
14、UCOSIII需要一个16位或者32位的时间戳计数器来测量时间;时间戳的控制单元位于CPU_TS中。如果CPU速率为1MHz,时间戳的速率就是1MHz;那么CPU_TS 的分辨率为1微秒。
15、任务可以是有5种状态,休眠状态,就绪状态,运行状态,挂起状态,中断状态;
16、UCOSIII有2种调度方式:OSSched()被用于任务级;OSIntExit()被用于中断级。由于中断产生时已经将任务A的状态保存在任务A的堆栈中,所以ISR返回时无需再保存任务A的状态,而是直接载入任务B的CPU寄存器到硬件CPU寄存器中即可。
17、UCOSIII提供关中断方式、锁调度器方式、信号量方式、mutex方式保护共享资源。只有任务才允许使用信号量,ISR是不允许的。用信号量保护共享资源不会导致中断延迟;当任务在执行信号量所保护的共享资源时,ISR或高优先级任务可以抢占该任务。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章