ucos是什么意思 ucos( 二 )


关于系统大概的运行原理
2.当产生一个时钟节拍时 , 如果有比当前运行任务优先级更高的任务就绪 , 那么优先级(“优先级”为0时优先级最高)高的任务抢占CPU , CPU保存现场环境 , 放入该任务堆栈中 。再将优先级高的任务的堆栈中的现场环境取出来 , 写入CPU寄存器中 。(CPU中的寄存器暂时还没有仔细去研究) 。当这个任务执行进入延时 , 或是要等待某个时间或者信号量 。那么它将放弃CPU的使用权 , 系统会从任务就绪表中 , 把优先级最高的且就绪状态的任务赋予CPU的使用权 。至此来推动整个系统 , 调度所有的任务 。
不发生中断时UCOS系统时间与任务的切换
①.假设当前运行的任务是低优先级的任务 , CPU程序寄存器中存在的一些寄存器都是低优先级的任务
②当程序运行到检测到高优先级的任务进入就绪状态的时候 , 此时CPU发送一些命令 , 把CPU当前的一些程序寄存器的内容复制到低优先级任务的堆栈中 。也就是1过程 。
③.此时通过刚刚的就绪表的机制 , 可以从程序中得到最高优先级的任务 , 也就是2过程=
④.最后的过程3就是把刚刚的高优先级任务的堆栈指针复制到CPU的程序寄存器当中 , 实现任务的切换 。
当有中断时 , UCOS系统的执行原理
当程序正在执行一个中断服务函数时 , 发生一个系统滴答中断 , 因为系统滴答定时器的优先级高 , 所以会中断这个中断服务函数执行任务切换 。而有些时候 , 中断时不能延时的 。例如接收数据时 , 会发生接收错误 。造成严重的后果 。
这时 , 就有下图中的操作 , 可以避免 。
PendSV异常(我称它为中断)编程为最低的优先级中断 。如果某个中断正在执行 , 而系统滴答抢占了它 , 那么这个中断将悬起一个PendSV中断 , 来缓期执行任务切换 。
UCOS的任务切换时间可以在os_cfg.h中去设置OS_TICKS_PER_SEC宏UCOS任务数等配置也可以在该文件中去寻找 。
UCOS-II主要提供服务
内存管理
多任务管理
外围资源管理
关于Make 与编译
书中有讲这一块 , 所以我也记录下我的理解
由于我平时都用keil这样的集成开发环境 , 之前也有学习过一段时间的linux , 但是对编译 , makefile这些理解的还是不是很好 。
编辑makefile 来将源文件和包含的头文件编译成需要的.obj文件 , 然后再将这些.obj文件链接成 , 想要生成的程序 。关于makefile好像每一种编译器都有自己的makefile规则和命令 , 因为以前学习GCC编译器和现在书上看到的BCC编译器写的makefile好像不太一样 。我也没有去深究 。
所以还是集成开发环境好 , 工具还是怎么方便怎么来 。需要学习的原理的时候再去理解 , 实际的应用中用自己写的Makefile去编译文件怕是石乐志哦 。
UCOS的任务
任务三要素(我理解的)
任务控制块
OSTaskCreate((void()(void))start_task,
//任务函数
(void*)0,
//传递给任务函数的参数
(OS_STK*)START_TASK_STK[START_STK_SIZE-1],
//任务堆栈的栈顶
(INT8U)START_TASK_PRIO,
//任务的优先级
主要包含了任务的栈顶地址 , 
如果处理器的堆栈是高地址向下生长的那么栈顶地址

ucos是什么意思 ucos

文章插图
free rtos和ucos的区别 一、freeRTOS比uCOS II优胜的地方:
1 。内核 ROM和耗费RAM都比uCOS 小 , 特别是RAM 。这在 单片机 里面是稀缺资源 , uCOS至少要5K以上 ,  而freeOS用2~3K也可以跑的很好 。
2 。freeRTOS 可以用协程(Co-routine) , 减少RAM消耗(共用STACK) 。uCOS只能用任务(TASK , 每个任务有一个独立的STACK) 。
3 。freeRTOS 可以有优先度一样的任务 , 这些任务是按 时间片 来轮流处理 , uCOSII 每个任务都只有一个独一无二的 优先级。因此 ,  理论 上讲 , freeRTOS 可以管理超过64个任务 , 而uCOS只能管理64个 。
4 。freeRTOS 是在商业上免费应用 。uCOS在商业上的应用是要付钱的 。
二、freeRTOS 不如uCOS的地方:
1 。比uSOS简单 , 任务间通讯freeRTOS只支持Queque ,  Semaphores ,  Mutex 。uCOS除这些外 , 还支持Flag, MailBox.

秒懂生活扩展阅读