摘要: 这一片谈谈关于ucos调度器的相关知识.ucos的调度器的实现主要靠一个函数OS_Sched该函数将调度器的行为分为了两个部分,第一是调度部分,第二是任务切换部分,如下void OS_Sched (void){#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr... 阅读全文
posted @ 2015-03-08 22:49 邓小俊 阅读(1876) 评论(0) 推荐(0)
摘要: Ucos的事件分为时钟,信号量,互斥性信号量,消息队列,以及消息邮箱首先说信号量 信号量在ucos中的类型定义为OS_EVENT_TYPE_SEM,在任务控制块ecb中,主要是用到的是信号量计数器OSEventCnt,当有任务申请信号量的时候,如果信号量OSEventCnt的值大于0,则将OSEve... 阅读全文
posted @ 2015-03-08 22:47 邓小俊 阅读(1620) 评论(0) 推荐(0)
摘要: Ucos为了任务之间的通讯定义了信号量,互斥性信号量,消息对象 消息队列等结构以及api,为了统一的管理这些同步,定义了一个结构叫做时间控制块OS_EVENT,如下 typedef struct os_event { INT8U OSEventType; void *OSEventPtr; INT1... 阅读全文
posted @ 2015-03-08 22:46 邓小俊 阅读(1121) 评论(0) 推荐(0)
摘要: 之前在ucos多任务切换中漏掉了一个变量,OSCtxSwCtr标识系统任务切换次数主要应该还是用在调试功能中Ucos系统初始化函数为OSInit(),主要完成以下功能全局变量初始化就绪任务表初始化空任务控制块初始化事件控制块链表初始化信号量集初始化存储器管理初始化Qs队列控制初始化系统空闲任务初始化... 阅读全文
posted @ 2015-03-08 22:45 邓小俊 阅读(2279) 评论(0) 推荐(0)
摘要: 之前我们说到,系统在运行的时候会直接依靠任务的优先级来找到任务的控制块从而实现任务的调用切换等功能,那么接下来的问题就是,系统是怎么找到并确定某一个特定的最高优先级任务并确定他的优先级的呢 为了解决这个问题,ucos采用了一种比较巧妙地方式,叫做就绪任务表,定义如下 OS_EXT OS_PRIO ... 阅读全文
posted @ 2015-03-08 22:43 邓小俊 阅读(4914) 评论(0) 推荐(0)
摘要: Ucos实现多任务的基础包括几个方面:任务控制块,任务堆栈,中断,任务优先级,一一说起 首先,任务控制块的结构如下//系统在运行一个任务的时候,按照任务的优先级获取任务控制块,再在任务堆栈中获得任务代码指针typedef struct os_tcb {//任务控制块 OS_STK *OSTCBStk... 阅读全文
posted @ 2015-03-08 22:41 邓小俊 阅读(3192) 评论(0) 推荐(1)
摘要: 1. 指定堆栈数据类型(宽度) typedef unsigned int OS_STK;2. 指定Ucos移植方法3中保存cpu状态寄存器的变量的宽度 typedef unsigned int OS_CPU_SR;3. 指定堆栈的生长方向,cortex-m3的生长方向是高地址... 阅读全文
posted @ 2015-03-08 22:37 邓小俊 阅读(693) 评论(0) 推荐(0)