本文目录一览:
- 1、ucosiii运行一段时间后死机如何调试
- 2、如何windows上运行ucos
- 3、UCOSIII_多任务创建(二)
- 4、uCOS-III移植问题 程序卡死在空闲任务里 求助
- 5、ucos iii和ucos ii有什么区别
- 6、FreeRTOS和UCOSIII哪个更适合
ucosiii运行一段时间后死机如何调试
现象:函数function1()运行到“USART2SendData("\r\n",2)”时,UCOS任务卡死,最高优先级任务也不能运行。
分析:运行到USART2SendData("\r\n",2),因为UART2_SendEnable=0导致关掉中断后没有恢复现场(开中),任务不能切换,于是任务卡死。
增加红色高亮部分代码,即可实现正常运行。
如何windows上运行ucos
第一种
1、将ucos_ii的源代码解压到c盘根目录下形成SOFTWARE文件夹(邵贝贝书内的光盘获取SOFTWARE)
2、安装bc45(borland C++4.5)和tasm;将bc45和tasm加到用户环境变量中,还要将tasm.exe加入到bc45的bin内;
3、建立一个工作文件夹比如叫c:\oswork\ucos,然后将解压目录C:\SOFTWARE\uCOS-II\SOURCE下的所有文件复制至该文件夹,有文件如下(不同版本文件可能不一样):
OS_CORE.C, OS_FLAG.C, OS_MBOX.C, OS_MEM.C, OS_MUTEX.C
OS_Q.C, OS_SEM.C, OS_TASK.C, OS_TIME.C, uCOS_II.C, uCOS_II.H(11个)
解压目录下的C:\SOFTWARE\uCOS-II\EX1_x86L\BC45\source 内的 INCLUDES.H,OS_CFG.H,TEST.C(3个)
位于bc45文件下的pc文件夹里面的PC.H PC.C;(2个)
C:\SOFTWARE\uCOS-II\x86L OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM(3个)共19个;
4.修改c:\work\ucos下includes.h:
//#include "\SOFTWARE\ucos-ii\ix86l\os_cpu.h"
//#include "os_cfg.h"
//#include "\SOFTWARE\blocks\pc\source\pc.h"
//#include "\SOFTWARE\ucos-ii\source\ucos_ii.h"
去掉前面的路径:
#include "os_cpu.h"
#include "os_cfg.h"
#include "pc.h"
#include "ucos_ii.h"
修改c:\work\ucos下UCOS_II.C:
#include "\software\ucos-ii\source\os_core.c"
#include "\software\ucos-ii\source\os_flag.c"
#include "\software\ucos-ii\source\os_mbox.c"
#include "\software\ucos-ii\source\os_mem.c"
#include "\software\ucos-ii\source\os_mutex.c"
#include "\s·oftware\ucos-ii\source\os_q.c"
#include "\software\ucos-ii\source\os_sem.c"
#include "\software\ucos-ii\source\os_task.c"
#include "\software\ucos-ii\source\os_time.c"
将\software\ucos-ii\source\统统去掉
5.启动BORLAND C++4.5,创建工程。
菜单Project ---New project...,弹出“New Target”对话框。
(1)在“Project path and name”中指定工程路径:c:\work\ucos
(2)在“Target Type”下选择“Application[.exe]”
(3)在“PlatForm”下选择“DOS[Standard]”
(4)在“Target Modet”下选择“Large”
(5)单击“OK”按钮
(6)因为.h文件都在c:\work\ucos文件夹下,需要设置一下include的路径(在bc45中选择菜单,options\project\Directories\,在窗口右边找到Include, c:\bc45\include;c:\work\ucos ) 红色是需要增加的路径,前面的分号注意-ucosiiiwindows
6.在工程文件中添加c:\work\ucos下的几个文件:
os_cpu_a.asm
os_cpu_c.c
pc.c
ucos_ii.c
test.c
7 编译和运行
菜单Project---Compile/Make all/Build all,或者点工具栏上的按钮
编译结果出现很多警告,但是没有错误,因此就可以正常运行实验程序拉~
第二种
另外一种方式是把uCOS-II的所有代码打包成一个静态库,方法同上,只是有两点不同:
1、在第2步中不需要拷贝TEST.C文件
2、第5步建立工程时选择“Static Library(for exe)[.lib]”,其他选项不变
编译后将生成一个.lib文件,假设文件名为mylib.lib
这样在每次使用uCOS-II时就不需要把所有源文件都拷贝到工程目录下了,只需要拷贝下面几种文件:
mylib.lib
OS_CPU_A.ASM
所有.h文件
然后把mylib.lib、TEST.C和OS_CPU_A.ASM加到工程中就可以成功编译了~ .
UCOSIII_多任务创建(二)
任务调度和切换就是让就绪表中优先级最高的任务获得CPU使用权,UCOSIII是抢占式的,高优先级任务可以抢了低优先级任务的CPU使用权,任务调度由任务调度器完成,任务调度器分为:任务级,中断级调度器
1.任务级调度器:OSSched(),不能用于中断服务函数中
函数里有一个函数OS_TASK_SW(),这个是真正执行任务切换的宏,它把当前任务的CPU寄存器值保存在任务堆栈中,保存完当前任务的现场后将新任务的OS_TCB中保存的任务堆栈指针的值加载到CPU的堆栈指针寄存器中,新任务结束后还要把CPU寄存器值变回旧任务的。-ucosiiiwindows
2.中断级调度器:OSIntEnter(),OSIntExit(),调用此函数时中断应该是关闭的
函数里有一个函数OSIntCtxSW(),这个是真正执行任务切换的宏,进入中断时硬件自动保存现场了,将新任务的OS_TCB中保存的任务堆栈指针的值加载到CPU的堆栈指针寄存器中,新中断结束后自动恢复现场。-ucosiiiwindows
3.时间片轮转调度:UCOSIII支持一个优先级下有多个任务,不过允许一个任务运行一段时间(时间片)后让出CPU使用权,让同优先级下的洗一个任务运行,这种任务调度方法就是时间片轮转调度。如果同级下第一个任务设置的时间片用完则第一个任务排到链表尾,等待下一次调度。使用OSSchedRoundRobinYield()可以放弃剩余的时间片,在同级下其它任务运行。-ucosiiiwindows
通常创建多个任务,可以先在main函数中设置一个任务,然后在这个任务里创建多个任务.
每个任务都有自己的任务函数。
uCOS-III移植问题 程序卡死在空闲任务里 求助
自己一样可以使用这几个优先级,其中0S_LOWESR_PRIO默认分配给空闲任务,不过不建议使用这些优先级,为以后升级方便
ucos iii和ucos ii有什么区别
1、ucos ii是原来只有0~63个优先级,而且优先级不能重复,ucos iii允许几个任务使用同一个优先级,在同一个优先级里面,支持时间片调度法;
2、ucos iii允许用户在程序运行中动态配置实时操作系统内核资源,比如,任务、任务栈、信号量、事件标志组、消息队列、消息数、互斥型信号量、存储块划分和定时器,可以在程序运行中变更。这样,用户可以避免在程序编译过程中出现资源不够分配的问题。在资源复用上,也做了一些改进。-ucosiiiwindows
3、μC/OS-II中,最多任务数有64个,到了版本2.82以后是256个,μC/OS-III中,用户可以由任意多的任务、任意多的信号量、互斥型信号量、事件标志、消息列表、定时器和任意分配的存储块容量,仅受限于用户CPU可以使用的RAM量。-ucosiiiwindows
FreeRTOS和UCOSIII哪个更适合
一、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个。-ucosiiiwindows
4。freeRTOS 是在商业上免费应用。uCOS在商业上的应用是要付钱的。
二、freeRTOS 不如uCOS的地方:
1。比uSOS简单,任务间通讯freeRTOS只支持Queque, Semaphores, Mutex。 uCOS除这些外,还支持Flag, MailBox.
2。uCOS的支持比freeRTOS 多。除操作系统外,freeRTOS只支持TCPIP, uCOS则有大量外延支持,比如FS, USB, GUI, CAN等的支持3。uCOS可靠性更高,而且耐优化,freeRTOS 在我设置成中等优化的时候,就会出问题。-ucosiiiwindows