ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UCOS之启动流程

2022-03-31 14:33:11  阅读:167  来源: 互联网

标签:初始化 UCOS 启动 中断 流程 系统 任务 OS 时钟


  • 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有