UCOS
文章平均质量分 65
gtkknd
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ucos 多个任务等待一个信号量
一个例子 前提:有三个任务,优先级为4、5、6,并且优先级最低的最先运行,同时三个任务都会使用同一个信号量,信号量初始值为1. 第1步:信号量被创建,cnt=1,这时候任务就绪列表为空,信号量等待列表为空。 第2步:任务6开始执行,试图获得信号量由于cnt为1,所以会得到信号量得到后cnt减一变为0,这时候任务就绪列表为6,信号量等待列表为空。转载 2016-08-15 16:08:39 · 3420 阅读 · 0 评论 -
usosiii中OS_CRITICAL_ENTER() 有两种define含义
#if OS_CFG_ISR_POST_DEFERRED_EN > 0u /* Deferred ISR Posts ------------------------------ */ /* Lock the s转载 2016-08-16 16:13:24 · 2823 阅读 · 0 评论 -
osIII任务同时等待多个内核对象
前面我们讲过都是等待单个内核对象,包括:信号量、互斥信号量、消息队列和事件标志组。在UCOS–III中允许任务同时等待多个信号量和多个消息队列,也就是说,UCOS–III不支持同时等待多个事件标志组或互斥信号量。 一个任务可以等待任意数量的信号量和消息队列,第一个信号量或消息队列的发布会导致该任务进入就绪态。一个任务可以调用函数OSPendMulti()函数来等待多个对象,并且可以转载 2016-08-16 17:19:07 · 1193 阅读 · 0 评论 -
osiii的调度点
调度点1、释放信号量或者发送消息,也可通过配置相应的参数不发生任务调度。 2、使用延时函数OSTimeDly()或者OSTimeDlyHMSM()。 3、任务等待的事情还没发生(等待信号量,消息队列等)。 4、任务取消等待。 5、创建任务。 6、删除任务。 7、删除一个内核对象。 8、任务改变自身的优先级或者其他任务的优先级。 9、任务通过调用OSTaskS转载 2016-08-16 18:21:05 · 465 阅读 · 0 评论 -
OS_OPT_POST_1 OS_OPT_POST_ALL
OS_OPT_POST_1:当前任务只想给一个任务(最高优先级的)发信号;OS_OPT_POST_ALL:给所有等待该信号量任务发信号;转载 2016-08-17 09:54:50 · 2725 阅读 · 0 评论 -
uC/OSIII时钟节拍处理过程
uC/OSIII时钟节拍处理过程 时钟节拍涉及到的函数调用过程:从main开始,创建了第一个任务AppTaskStart,在其一开始执行时,对BSP和CPU进行初始化,调用BSP_CPU_TickInit()函数;该函数定义在bsp文件夹下的bsp.c文件中,该函数先读取时钟频率,然后按OSCfg_TickRate_Hz值计算应该为CM3的systick定时器设置的转载 2016-08-17 11:13:03 · 2851 阅读 · 0 评论 -
osiii中OS_CRITICAL_ENTER和CPU_CRITICAL_ENTER关系
osiii的系统函数中的临界代码有的用CPU_CRITICAL_ENTER();有的用OS_CRITICAL_ENTER();CPU_CRITICAL_ENTER是真的关掉中断而OS_CRITICAL_ENTER()要看#define OS_CFG_ISR_POST_DEFERRED_EN 这个选项------------------------------------转载 2016-08-17 16:01:46 · 5915 阅读 · 0 评论 -
ucos和低功耗
MCU实现低功耗本质而言便是停止MCU工作,通过中断的方式重新唤醒MCU,这些中断可以包括外部IO中断,UART接收中断,定时器中断等等。如果结合嵌入式操作系统,可以在空任务或者空任务钩子函数中进入低功耗模式,在系统滴答时钟中断服务函数中重新回到正常工作模式。利用操作系统进入和退出低功耗模式,需要熟悉嵌入式操作系统的空任务和系统滴答时钟中断,500ms一次的定时器中断唤醒一次可以吗?转载 2016-08-17 17:22:24 · 3291 阅读 · 1 评论 -
STM32L151内部RTC时钟
STM32L151内部RTC时钟STM32L151系列CPU内置低功耗RTC日历。RTC时钟源可以是LSE、LSI、HSE。为了降低功耗,预分频器被分成两个预分频器。一个7为的异步预分频器,一个13位同步预分频器。Fclk=32768/[(PREDIV_S+1)*(PREDIV_A+1)]void RTC_Config(void) {RTC_Init转载 2016-08-18 15:33:04 · 10005 阅读 · 0 评论 -
uCOS-III开关中断进出临界区的三个宏
* 1. 临界区解释:* 代码的临界短也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许* 任何中断打入。为确保临界段代码的执行不被中断,在进入临界段之前必须关中断,而临界段* 代码执行完后,要立即开中断。* 2. uCOS-III中有两种进入临界区方式和一种开关中断方式。下面简单说明:* 注意,临界区的处理方式采用的方式3,即CPU_CRITICAL_ME原创 2016-08-21 16:42:33 · 4282 阅读 · 0 评论 -
ucosiii任务内建消息队列
任务内建消息队列——OSTaskQ???()一、知识背景实际应用中,多个任务同时等待一个消息队列的情况很少见,也就是说OSQ???()用的并不多,因此,在uC/OS-III 中,每一个任务都有其内建的消息队列。用户可以通过外部消息队列直接发送消息给任务。 这个特性不仅简化了代码, 还提高了效率。如下示意图, uC/OS-III 中与任务消息队列相关的服务都是转载 2016-08-16 15:12:55 · 5106 阅读 · 1 评论 -
理解osIII中的消息队列
在uC/OSIII中没有邮箱这个概念,而是统一合并到了消息队列MSG_Q。因为消息队列可以看作是很多邮箱的集合,邮箱只是包含单个消息的消息队列。在分析消息队列之前,必须要对消息的数据结构做一个彻底的分析。消息队列对象和其他内核对象一样,它的结构定义很简单:下面看一下消息队列的结构体,记住这个结构体名字叫OS_Q:struct os_q { /* Message Queue */转载 2016-08-16 14:32:42 · 3016 阅读 · 2 评论 -
μC/OS-Ⅲ系统的任务切换和任务调度
μC/OS-Ⅲ系统的任务切换和任务调度一、任务切换 在操作系统中当任务需要从一个任务切换到另外一个任务时,要将当前任务的现场保存到当前任务的堆栈中(当前任务现场主要指CPU相关寄存器),然后回复新任务的现场并执行新任务。这个叫做上下文切换(context switch),也可以叫任务切换。 上下文切换会给系统带来一定的负担。CPU寄存器越多转载 2016-08-16 10:05:27 · 2437 阅读 · 0 评论 -
uC/OS-III 函数整理
学uC/OS-III的时候 觉得这些常用的函数找起来太麻烦,便整理在一起,方便复制粘贴用。 更改任务优先级void OSTaskChangePrio( OS_TCB *p_tcb, //需要更改优先级的任务函数名称。可以为空,即改变当前任务优先级。OS_PRIO prio_new, //需要更改的新优先级。不能为0和 大于或等于OS_CFG_PRI转载 2016-08-15 21:39:47 · 1100 阅读 · 0 评论 -
uc iii的一些领悟
任务堆栈:存储任务中的调用的函数、局部变量、中断服务程序和CPU寄存器的值。全局变量的保护:1.如果只在一个任务中写(或只有一个数据),而在其他任务中只是读取,则可以不用互斥型信号量,最多会造成读取的数据未被完全写完。2.如果全局变量在多个任务中写,则需要用互斥型信号量保护,这样当有任务申请到互斥型信号量(保护不可重入的程序段)写数据时,其他任务的同一个互斥型信号量必须等待上一个任转载 2016-08-15 22:05:54 · 1477 阅读 · 0 评论 -
uCOS-II任务调度过程
uCOS-II任务调度过程ucos-II是基于任务优先级抢占式任务调度法的,就是内核在管理调度时,调用任务切换函数(一般为SSched()),在该函数中将此时已处于就绪状态(条件一)并且为最高优先级(条件二)的任务的保存于其栈中的相应信息压入cpu寄存器中(软中断完成),然后cpu开始运行该任务的代码。 内核是何时进行任务调度的呢?虽然uC/OS-II是可被剥夺资源的内核(高优先级可强转载 2016-08-15 22:23:49 · 11737 阅读 · 1 评论 -
μC/OS—III为缩短中断关闭时间作出的改进
引言 μC/OS—III是一款全新的实时内核,源于世界上流行的实时内核μC/OS—II。较μC/OS—II,μC/OS—III做了很多改进。其中,很重要的一点就是为了缩短中断关闭时间作出的改进。本文将深入分析为什么这些改进能够使得μC/OS—III的实时性能得到提升。1 中断简介 所谓中断,其实就是一种硬件机制,用于通知CPU有一个异步事件发生了。由于μC/OS—III转载 2016-08-16 09:11:55 · 1330 阅读 · 0 评论 -
μC/OS-Ⅲ系统中的任务种类及基本状态
μC/OS-Ⅲ系统中的任务种类及基本状态在μC/OS-Ⅲ系统中,任务自身一共有五种状态。 1、休眠态 调用函数OSTaskCreate()创建任务后,任务就可以接受μC/OS-Ⅲ的管理。处于休眠态的任务代码实际上已经写入代码空间中了,但是μC/OS-Ⅲ还不知道它的存在。当不在需要μC/OS-Ⅲ管理某个任务时,用户可以调用任务删除函数OSTaskDel()来删转载 2016-08-16 09:56:40 · 1686 阅读 · 0 评论 -
临界段临界区
临界段代码(critical sections),也叫临界区(critical region),是指那些必须完整连续运行,不可被打断的代码段。μC/OS-Ⅲ系统中存在大量临界段代码。采用两种方式对临界段代码进行保护:关闭中断、给调度器上锁。两种临界段代码保护功能均通过宏定义实现。 对于中断处理程序和任务都会访问的临界段代码,必须使用关中断的方式进行保护;对于仅由任务访问的临界段代转载 2016-08-16 09:58:08 · 1295 阅读 · 0 评论 -
μC/OS-Ⅲ系统的中断管理
μC/OS-Ⅲ系统的中断管理一、典型的μC/OS-Ⅲ中断服务程序解析μC/OS-Ⅲ系统中典型有内核参与中断服务程序示例如下:MyISR: (1) Disable all interrupts;转载 2016-08-16 10:18:54 · 923 阅读 · 0 评论 -
μC/OS-Ⅲ系统的资源管理-临界区共享
一、各种资源管理方法简介 μC/OS-Ⅲ系统中提供了一些基本方法用于管理共享资源(典型的共享资源有:变量、数据结构体、RAM中的表格、IO设备中的寄存器等)。资源共享方法名称及适用范围如下表所示。资源共享方法适用范围关中断、开中断当访问共享资源的时间很短以至于方位共享资源所花的时间小于μC/OS-Ⅲ关中断时间时转载 2016-08-16 10:53:46 · 1474 阅读 · 0 评论 -
ucosiii消息队列实例
消息队列实例:1.4.1 创建创建一个可以容纳10个消息的全局消息队列.OS_Q Main_Task_Q;OSQCreate(&Main_Task_Q,"Main_Task_Q",10,&err);1.4.2 挂起将任务挂起等待消息,以阻塞方式等待消息来为止.OS_MSG_SIZE nMsgSize = 0;u8 *pM转载 2016-08-16 13:16:48 · 3287 阅读 · 0 评论 -
CUOS优先级翻转反转—互斥信号量
一. 任务优先级反转的概念当任务以独占方式使用共享资源时,会出出低优先级任务先于高优先级任务而被运行的现象,这就是所谓的任务优先级反转。例如:1. 任务A和任务C都要使用同一共享资源S,现在假设任务A和任务B都在等待与各自任务相关的事件发生而处于等待状态,而任务C正在运行,且在t1时刻取得了信号量的并开始访问共享资源S。2. 如果在任务C使用共享资源S过程中的t转载 2016-08-15 12:00:07 · 1341 阅读 · 0 评论
分享