![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
uC/OS
LiYuan199118
这个作者很懒,什么都没留下…
展开
-
UC/OS基础知识之任务堆栈
UC/OS基础知识之任务堆栈1.任务堆栈 所谓堆栈就是在存储器中按数据“后进先出(LIFO)”的原则组织的连续存储空间,为了满足任务切换和响应中断时保存CPU寄存器中的内容及任务调用其他函数时的需要,每个任务都应该配有自己的堆栈。每个任务控制块都有一个指向该任务堆栈的指针。 PO:堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈转载 2016-01-05 10:24:23 · 3374 阅读 · 0 评论 -
UC/OS-II基础知识之信号量及其操作
UC/OS-II基础知识之信号量及其操作1.信号量 当事件控制块成员OSEventType的值被设置成OS_EVENT_TYPE_SEM时,这个事件控制块描述的就是一个信号量,信号量由信号量计数器和等待任务表两部分组成,信号量使用事件控制块的成员OSEventCnt作为计数器,而用数组OSEventTbl【】来充当等待任务表。每当有任务申请信号量时,如果信号量计数器OSEventCnt的值大于0,转载 2016-01-07 10:28:49 · 1747 阅读 · 0 评论 -
UC/OS-II基础知识之事件控制块及事件处理函数
UC/OS-II基础知识之事件控制块及事件处理函数1.等待任务列表 作为功能完善的事件,应该对那些处于等待任务具有两方面的管理功能,一是要对等待事件的所有任务进行记录并排序,而是允许等待任务有一个等待时限,即当等待任务认为等不及时可以退出对事件的请求。对于等待事件任务的记录,系统使用了与任务就绪表类似的位图,即定义了一个INT8U类型的数组OSEventTbl【】作为等待事件任务的记录表,即等待任转载 2016-01-06 22:05:31 · 2604 阅读 · 0 评论 -
UC/OS-II基础知识之任务的同步与事件
UC/OS-II基础知识之任务的同步与事件为了实现各个任务之间的合作和无冲突的运行,在各任务之间必须建立起一些制约制约关系,UC/OS-II有两种制约关系,间接制约和直接制约。直接制约关系来源于任务间的合作,间接制约关系源于对资源的共享, 1.事件 UC/OS-II使用信号量,邮箱(消息邮箱)和消息队列这些中间环节来实现任务间的通信,为了方便起见,这些中间环节都统称为事件。两个任务通过事件进行通转载 2016-01-06 21:06:24 · 1459 阅读 · 0 评论 -
UC/OS基础知识之时间管理
UC/OS-II基础知识之时间管理1.任务的延时 由于嵌入式系统的任务是一个无限循环,并且UC/OS-II还是个抢占式内核,所以为了使优先级别高的任务不至于独占CPU,UC/OS-II规定:除了空闲任务之外的所有任务必须在任务中合适的位置调用系统提供的函数OSTimeDly(),使当前任务的运行延时(暂停)一段时间并进行一次任务调度,以让出CPU的使用权。 函数OSTimeDly()的代码如下转载 2016-01-06 17:46:10 · 543 阅读 · 0 评论 -
UC/OS-II基础知识之时钟
UC/OS-II基础知识之时钟与大多数计算机系统一样,UC/OS-II用硬件定时器产生一个毫秒级的周期性中断来实现系统时钟,最小的时钟单位就是两次中断之间的间隔时间,这个最小时钟单位就叫做时钟节拍。硬件定时器以时钟节拍为周期定时的产生中断,该中断的中断服务程序叫做OSTickISR(),中断服务程序通过调用函数OSTimeTick()来完成系统在每个时钟节拍时需要做的工作。OSTickISR()是用转载 2016-01-06 17:21:22 · 1043 阅读 · 0 评论 -
UC/OS-II基础知识之中断
UC/OS-II基础知识之中断1.中断 任务在运行过程中,应内部或者外部异步事件的请求终止当前任务而去处理异步时间所要求的任务的过程叫做中断,应中断请求而运行的程序叫做中断服务子程序,中断服务子程序的入口地址叫做中断向量。UC/OS-II系统响应中断的过程是:系统接收到中断请求时,如果这时CPU处于中断允许状态,即中断时开放的,系统就会终止正在运行的当前任务,而按照中断向量的指向转而去运行服务子程转载 2016-01-06 16:19:54 · 2988 阅读 · 0 评论 -
UC/OS-II基础知识之系统的初始化
UC/OS-II基础知识之系统的初始化1.UC/OS-II的初始化 在使用UC/OS-II的所有服务之前,必须调用UC/OS-II的初始化函数OSInit()来对UC/OS-II的运行环境进行初始化。OSInit()将对UC/OS-II的所有全局变量和数据结构进行初始化,同时创建空闲任务OSTaskIdle,并赋之以最低的优先级别和永远的就绪状态,如果用户还使能了通缉任务,系统还要创建统计任务。初转载 2016-01-06 15:20:54 · 1075 阅读 · 0 评论 -
UC/OS基础知识之任务的删除
UC/OS基础知识之任务的删除所谓的删除一个任务,就是把任务处于睡眠状态。具体状态就是把删除的任务从任务控制块链表中山删除,并归还给空任务控制块链表,然后在任务就绪表中把该任务的状态位置0,于是该任务就不能被调度器所调用了。在任务中可以调用函数OSTaskDel()来删除空闲任务以外的任务。#if OS_TASK_DEL_EN > 0INT8U OSTaskDel (INT8U prio){转载 2016-01-06 14:58:16 · 1114 阅读 · 0 评论 -
UC/OS基础知识之任务的挂起和恢复
UC/OS基础知识之任务的挂起和恢复所谓挂起就是停止这个任务的运行。用户可以通过调用系统提供的OSTaskSuspend()函数来挂起除空闲任务之外的其他任务,只能在其他任务中调用恢复函数OSTaskResume()使其恢复为就绪状态。任务在运行,就绪状态和等待状态之间的转移关系如下图 1.任务的挂起 挂起任务函数OSTaskSuspend()如下所示#if OS_TASK_SUSPEND_转载 2016-01-05 22:56:09 · 1025 阅读 · 0 评论 -
UC/OS基础知识之任务的创建
任务的创建1.创建任务函数 任务的创建实质上是创建一个任务控制块,并通过任务控制块把任务代码和任务堆栈关联起来形成一个完整的任务。UC/OS提供两个函数创建任务OSTaskCreate()和OSTaskCreateExt()。一般前者用的多,OSTaskCreate()如下所示:INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg,转载 2016-01-05 22:02:50 · 786 阅读 · 0 评论 -
UC/OS基础知识之任务
UC/OS基础知识之任务(1)1.任务的组成 UC/OS操作系统内核的主要工作就是对任务进行管理和调度,任务由3部分组成:任务控制块,任务堆栈和任务程序代码。任务控制块就是关联了任务代码的程序控制块,记录了任务的各个属性;任务堆栈则用来保存任务的工作环境;任务程序代码就是任务的执行部分。其结构示意图如下图所示: 2.任务的种类 UC/OS有两种任务:用户任务和系统任务。有应用程序设计者编写的任转载 2016-01-04 20:38:26 · 1450 阅读 · 0 评论 -
UC/OS基础知识之任务就绪表
UC/OS基础知识之任务就绪表1.任务就绪表 系统总是从处于就绪状态的任务中选择任务运行,为此系统需要一个就绪任务登记表,它登记了系统中所有处于就绪状态的任务,在UC/OS中这个就绪表就是一个位图,系统中的每个任务都在这个位图中占据一个进制位,该位值得状态(1或者0)表示该任务是否处于就绪状态。 其示意图如下图所示: OSRdyTbl[]数组的一个元素代表8个任务的就绪状态,一个元素构转载 2016-01-05 14:55:31 · 1598 阅读 · 0 评论 -
UC/OS基础知识之任务控制块
UC/OS基础知识之任务控制块1.任务控制块结构 用来记录任务的堆栈指针,任务的当前状态,任务的优先级别等一些与任务管理有关的属性的表就叫做任务控制块,没有任务控制块的任务不能被系统承认和管理 任务控制块是一个结构类型数据,当调用OSTaskCreate()创建任务时,该函数就会对任务控制块中的所有成员赋值,并驻留在RAM中。任务控制块结构的定义如下typedef struct os_tcb {转载 2016-01-05 11:49:54 · 1969 阅读 · 0 评论 -
?C_XBP解析
首先在startup.a51中找到如下语句: IF XBPSTACK <> 0 EXTRN DATA (?C_XBP) MOV ?C_XBP,#HIGH XBPSTACKTOP MOV ?C_XBP+1,#LOW XBPSTACKTOP ENDIF 从前面的定义知道XBPSTACK定义为1,因此此处将首先对C转载 2016-01-08 10:41:48 · 854 阅读 · 0 评论