- 博客(14)
- 资源 (4)
- 收藏
- 关注
原创 uC/OS-III之资源管理
1.最常用的独占共享资源和创建临界区的方法有4种:关中断、禁止任务调度、使用信号量、使用互斥型信号量。 一般推荐使用互斥信号量。 在访问数据量极少的时候可以使用关中断的方式。2.关中断/开中断 (1)在使用关中断/开中断时,必须先调用宏CPU_SR_ALLOC()。它的作用是分配存储空间来存储当前CPU的中断状态。 (2)关中断/开中断属于CPU相关的函数,所以它们的定义位于cpu.h中,3
2017-05-26 17:32:42 2959
原创 uC/OS-III之定时器管理
1.所谓定时器本质上是递减计数器,当计数器减到零时可以出发某种动作的执行。这种动作可以通过回调函数(callback funtion,简称回调)来实现。需要注意的是,一定要避免在回调函数中使用阻塞调用。 注:定时器在一些协议栈的实现中很有用,也可以用来定期轮训IO设备。2.定时器任务的频率通过宏定义OS_CFG_TMR_TASK_RATE_HZ来实现,单位是Hz。 该宏定义位于文件os_cfg_
2017-05-26 14:59:29 1027 1
原创 uC/OS-III之时间管理
1.uC/OS-III的时间管理函数的主要工作是改变当前任务的状态,把任务添加到时钟节拍轮中,同时把任务从任务就绪表中删除,最后执行调度程序。2.OSTimeDly()函数 OSTimeDly()函数的源代码位于os_time.c文件,79行 - 138行void OSTimeDly (OS_TICK dly, // 延时长度 OS_OPT
2017-05-25 17:13:02 999
原创 uC/OS-III之时钟节拍列表
1.时钟节拍列表由一个时钟节拍轮(,见os_cfg_app.c中的OSCfg_TickWheel[])和一个计数器OSTickCtr构成。2.时钟节拍轮是一个数组,其中数组的元素的类型为OS_TICK_SPOKE,它的大小由OS_CFG_TICK_WHEEL_SIZE设定。 建议OS_CFG_TICK_WHEEL_SIZE的大小为任务数目的1/4左右,不要把它的值与时钟节拍的频率成倍数关系,最好为
2017-05-25 16:12:44 1466
原创 uC/OS-III之学习总结
1.uC/OS-III系统的三大表:任务就绪表、时钟节拍轮、任务挂起表。任务控制块OS_TCB就是在这三张表中轮转。
2017-05-25 15:24:20 466
原创 uC/OS-III之临界段代码学习总结
1.临界段代码,也叫临界区,是指那些必须完整连续运行,不可被打断的代码段。在uC/OS-III中存在大量的临界段代码。2.中断处理程序和任务都会访问的临界段代码,需要使用关中断的方法加以保护;仅由任务访问的临界段代码,可以通过给调度器上锁的方法来保护。3.在uC/OS-III中,使用宏OS_CRITICAL_ENTER()进入临界区;使用宏OS_CRITICAL_EXIT()和OS_CRITICAL
2017-05-25 11:55:14 3215
原创 uC/OS-III之中断管理总结
1.uC/OS-III对从中断发布消息或信号的处理有两种模式:直接发布和延迟发布。 在文件os_cfg.h中,将OS_CFG_ISR_POST_DEFERRED_EN设置成0,使用直接发布模式;设置成1,则使用延迟发布模式。2.直接发布模式使用关闭中断的方式来保护临界段代码。3.延时发布模式通过给调度器上锁的方式来保护临界段代码。4.延时发布模式与直接发布模式相比,主要是减少了关闭中断的时间,因而
2017-05-25 09:23:34 1289
原创 uC/OS-III之任务切换学习总结
1.当uC/OS-III需要切换到另外一个任务时,它将保存当前任务的现场到当前任务的堆栈中,主要是CPU相关的寄存器,然后恢复新任务的现场并执行新任务。这个过程叫做任务切换2.由任务调度可知,任务级调度OSSched()中调用OS_TASK_SW()实现任务的切换,而中断级调度OSIntExit()中调用OSIntCtxSw()实现任务的切换。 在os_cpu.h文件中有如下定义// 0xE000
2017-05-24 17:38:19 852
原创 uC/OS-III之任务调度总结
1.任务调度 任务调度,简单的理解就是确定下一个要执行的任务。uC/OS-III中的任务调度通过任务调度器实现。uC/OS-III是一个可剥夺型的、基于优先级的内核。2.调度点 任务调度,说白了其实就是在某些时刻进行任务的调度,这些调度的时刻称为调度点。 在uC/OS-III中的任务调度点有以下几种: (1)任务释放信号量或给另一个任务或向另一个任务发消息 (2)任务调用延时函数OSTim
2017-05-24 11:23:44 1695
原创 uC/OS-III之任务就绪表学习总结
1.任务就绪表包含两部分:一个就绪优先级位映射表OSPrioTbl[],用来标明哪个优先级下有任务就绪;一个就绪任务列表OSRdyList[],其中包含指向各个就绪任务的指针。2.就绪优先级位映射表OSPrioTbl[] // 就绪优先级位映射表的大小#define OS_PRIO_TBL_SIZE
2017-05-23 16:43:59 1108
原创 uC/OS-III之系统内部任务
1.uC/OS-III系统内部有提供了5个任务:空闲任务、时钟节拍任务、统计任务、中断服务管理任务和定时器任务。其中空闲任务和时钟节拍任务是必须创建的,而统计任务、定时器任务和中断服务管理任务是可选的。2.空闲任务(OS_IdleTask()、os_core.c) 空闲任务是系统必须创建的。当其他所有的任务都未就绪时,就需要运行它。 (1)优先级–它的优先级比较特殊,总是设置为OS_CFG_PR
2017-05-23 14:40:29 1379
原创 uC/OS-III的任务管理
uC/OS-III的任务管理欢迎进入linuxweiyh的博客。。。1.多任务管理就是在多个任务间调度和切换CPU使用权的过程。2.任务的类型有两种:运行至完成型和无限循环型。 注:嵌入式系统一般使用的是无限循环类型的任务。在无限循环类型的任务中必须调用某个uC/OS-III服务函数,使该任务进入等待某个事件的状态。3.任务的创建参考另一篇文章《uC/OS-III任务创建函数》4.有关任务优先级的
2017-05-18 18:49:31 844
原创 uC/OS-III任务创建函数OSTaskCreate()
uC/OS-III任务创建函数OSTaskCreate()1.OSTaskCreate()函数原型void TaskCreate(OS_TCB *p_tcb, // 任务控制OS_TCB的地址CPU_CHAR *p_name, // 任务的名字OS_TASK_PTR p_task, // 任务代码的起始地址void *p_arg, // 任务第一次运行时接收到
2017-05-17 19:16:37 4552
原创 编程知识总结
编程知识总结欢迎进入linuxweiyh的博客。。。声明:该博文会不定期更新1.当不清楚一个循环的次数时,使用while循环;当知道循环的次数时,就会使用for循环
2017-05-17 18:43:23 295 1
uboot顶层config.mk分析
2018-09-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人