UCOS之启动流程
作者:互联网
-
OS_CRITICAL_ENTER();//进入临界区
- OS_CRITICAL_EXIT();//退出临界区
-
系统初始化OSInit (OS_ERR *p_err)
OS_IdleTaskInit(p_err); /* 初始化空闲任务 */
空闲任务栈默认为 128*4=512 字节
OS_TickTaskInit(p_err); /* 初始化时钟节拍任务 */
- CPU初始化CPU_Init (void)
DWT(Data Watchpoint and Trace),是用于系统调试及跟踪,
它有一个 32 位的寄存器叫 CYCCNT,它是一个向上的计数器,记录的是 内核时钟运行的个数,内核时钟跳动一次,该计数器就加 1,当 CYCCNT 溢出之后,会清零重新 开始向上计数。
内核时钟是 72M,那精度就是 1/72M = 14ns,而程序的运行时间都是微秒级别的,所以 14ns的精度是远远够的。
最长能记录的时间为: 2^32 /72000000=60s
- SysTick 初始化
时钟节拍的频率表示操作系统每 1 秒钟产生多少个 tick, tick即是操作系统节拍的时钟周期,
时钟节拍就是系统以固定的频率产生中断(时基中断),并在中断中处理与时间相关的事件,推动所有任务向前运行。
OS_CPU_SysTickInit() 用于初始化时钟节拍中断,初始化中断的优先级,SysTick中断的启用等等
在系统任务的第一个任务开始的时候进行调用,如果在此之前进行调用中断,可能会造成系统奔溃,因为系统还没有初始化好就进入中断,可能在进入和退出中断的时候会调用系统未初始化好的一些模块
1000HZ 1ms,与时钟频率相关,w/1000hz=cnt;
- 内存初始化Mem_Init();
在系统创建任务之前,就必须将系统必要的东西进行初始化
采用一块连续的大数组作为系统管理的内存CPU_INT08U Mem_Heap[LIB_MEM_CFG_HEAP_SIZE]
- OSTaskCreate()
创建任务
- OSStart()
因为创建仅仅是把任务添加到系统中,OSStart()调度任务开始运行操作系统
- OSTaskDel():如果在任务里创建其他任务,则需要删除本任务
删除任务
标签:初始化,UCOS,启动,中断,流程,系统,任务,OS,时钟 来源: https://www.cnblogs.com/slowby/p/16081655.html