
uCOS-II
Auto笔记
本人从事汽车电子行业,主要负责底层驱动开发、上位机软件开发、应用层逻辑开发
包括:UDS、OSEK、SIMULINK、Bootloader、ISO14229、ISO15765.。。。
展开
-
uCOS-II 基础入门教程(三)
任务优先级每个任务都有其优先级。任务越重要,赋予的优先级应越高。静态优先级应用程序执行过程中诸任务优先级不变,则称之为静态优先级。 动态优先级应用程序执行过程中,任务的优先级是可变的,则称之为动态优先级。实时内核应当避免出现优先级反转问题。 优先级反转如图,任务1优先级高于任务2,任务2优先级高于任务3。任务1和任务2处于挂起状态,等待某一事件的发生,任务3正在运行如。...原创 2019-01-03 20:47:46 · 4515 阅读 · 0 评论 -
uCOS-II 基础入门教程(八)
μC/OS-Ⅱ初始化在调用μC/OS-Ⅱ的任何其它服务之前,μC/OS-Ⅱ要求用户首先调用系统初始化函数OSIint()。OSIint()初始化μC/OS-Ⅱ所有的变量和数据结构(。OSInit()建立空闲任务idle task,这个任务总是处于就绪态的。空闲任务OSTaskIdle()的优先级总是设成最低,即OS_LOWEST_PRIO。如果统计任务允许OS_TASK_STAT_E...转载 2019-01-16 22:41:41 · 903 阅读 · 0 评论 -
uCOS-II 基础入门教程(十)
任务堆栈 每个任务都有自己的堆栈空间。堆栈必须声明为OS_STK类型,并且由连续的内存空间组成。用户可以静态分配堆栈空间(在编译的时候分配)也可以动态地分配堆栈空间(在运行的时候分配)。静态堆栈声明如程序,这两种声明应放置在函数的外面。 静态堆栈static OS_STK MyTaskStack[stack_size]; 用户可以用C编译器提供的malloc()...转载 2019-01-21 21:29:43 · 782 阅读 · 0 评论 -
uCOS-II 基础入门教程(七)
任务调度(Task Scheduling)μC/OS-Ⅱ总是运行进入就绪态任务中优先级最高的那一个。确定哪个任务优先级最高,下面该哪个任务运行了的工作是由调度器(Scheduler)完成的。任务级的调度是由函数OSSched()完成的。中断级的调度是由另一个函数OSIntExt()完成的,这个函数将在以后描述。OSSched()的代码如程序: void OSSched (vo...转载 2019-01-15 21:38:58 · 1156 阅读 · 0 评论 -
uCOS-II 基础入门教程(九)
建立任务,OSTaskCreate()想让µC/OS-Ⅱ管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()与µC/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的扩展版本,提供了一些附加的功能。用两...转载 2019-01-20 20:47:58 · 1217 阅读 · 0 评论 -
uCOS-II 基础入门教程(六)
中断中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被识别,CPU保存部分(或全部)现场(Context)即部分或全部寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。中断服务子程序做事件处理,处理完成后,程序回到:在前后台系统中,程序回到后台程序 对不可剥夺型内核而言,程序回到被中断了的任务 对可剥夺型内核而言,让进入就绪态的优先级最高的任务开始运行...转载 2019-01-14 21:10:07 · 1073 阅读 · 1 评论 -
uCOS-II 基础入门教程(五)
死锁(或抱死)(Deadlock (or Deadly Embrace))死锁也称作抱死,指两个任务无限期地互相等待对方控制着的资源。设任务T1正独享资源R1,任务T2在独享资源T2,而此时T1又要独享R2,T2也要独享R1,于是哪个任务都没法继续执行了,发生了死锁。最简单的防止发生死锁的方法是让每个任务都:先得到全部需要的资源再做下一步的工作 用同样的顺序去申请多个资源 释放资源时使...原创 2019-01-08 22:21:10 · 1282 阅读 · 0 评论 -
uCOS-II 基础入门教程(十二)
内存管理在ANSI C中可以用malloc()和free()两个函数动态地分配内存和释放内存。但是,在嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常小而且彼此又不相邻的内存区域,也就是内存碎片。由于这些碎片的大量存在,使得程序到后来连非常小的内存也分配不到。由于内存管理算法的原因,malloc()和free()函数执行时间是不确定的。在µC/OS-I...转载 2019-01-23 22:03:29 · 953 阅读 · 0 评论 -
uCOS-II 基础入门教程(四)
互斥条件 实现任务间通讯最简便到办法是使用共享数据结构。。虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。与共享资源打交道时,使之满足互斥条件最一般的方法有:关中断 使用测试并置位指令 禁止做任务切换 利用信号量 关中断和开中断 处理共享数据时保证互斥,最简便快捷的办法是关中断和...原创 2019-01-07 20:38:50 · 1875 阅读 · 1 评论 -
uCOS-II 基础入门教程(二)
内核(Kernel)多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块...原创 2019-01-02 21:44:16 · 3656 阅读 · 0 评论 -
uCOS-II 基础入门教程(一)
最近一起分享下uCOS-II学习教程,包括uCOS-II一些专有名词,任务,优先级等。Start:uCOS-II概念μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微处理器,微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)实时系统概念实时系统的特点是,如果逻辑和时序出现偏差将会引起严重后果的系统。...原创 2019-01-01 17:08:33 · 14521 阅读 · 5 评论 -
uCOS-II 基础入门教程(十一)
任务之间的通讯与同步在µC/OS-II中,有多种方法可以保护任务之间的共享数据和提供任务之间的通讯。在前面的章节中,已经讲到了其中的两种:一是利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中断和打开中断。当两个任务或者一个任务和一个中断服务子程序共享某些数据时。二是利用函数OSSchedLock()和OSSchekUnlock()对µC/OS...转载 2019-01-22 23:10:11 · 875 阅读 · 0 评论