随笔分类 - [ 操作系统 - μC/OS-II ]#
摘要:1. 声明任务的优先级、任务堆栈的大小及任务函数 ~~~~ define LED_TASK_PRIO 6 define LED_STK_SIZE 64 void led_task(void pdata); ~~~~ 2. 分配任务堆栈缓冲区 ~~~~ OS_STK LED_TASK_STK[LED_
阅读全文
摘要:简介 在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式。μC/OS II 为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。 信号量集所能管理的信号量都是一些二值信号,所有信号量集实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算的组合
阅读全文
摘要:简介 使用消息队列可以在任务之间传递多条消息。消息队列由三个部分组成:事件控制块、消息队列和消息。 当把事件控制块成员 OSEventType 的值置为 OS_EVENT_TYPE_Q 时,该事件控制块描述的就是一个消息队列。 消息队列相当于一个共用一个任务等待列表的消息邮箱数组,事件控制块成员 O
阅读全文
摘要:简介 如果把数据缓冲区的指针赋给一个事件控制块的成员 OSEventPrt,同时使事件控制块的成员 OSEventType 为常数 OS_EVENT_TYPE_MBOX,则该事件控制块就叫做消息邮箱,消息邮箱是在两个需要通信的任务之间通过传递数据缓冲区指针的方法来通信的。 邮箱的数据结构 创建邮箱
阅读全文
摘要:任务间通信 系统中的多个任务在运行时,经常需要互相无冲突地访问同一个共享资源,或者需要互相支持和依赖,甚至有时还要互相加以必要的限制和制约,才保证任务的顺利运行。因此,操作系统必须具有对任务的运行进行协调的能力,从而使任务之间可以无冲突、流畅地同步运行,而不致导致灾难性的后果。 与人们依靠通信来互相
阅读全文
摘要:简介 μC/OS II 与大多数计算机系统一样,用硬件定时器产生一个周期为 ms 级的周期性中断来实现系统时钟,最小的时钟单位就是两次中断之间相间隔的时间,这个最小时钟单位叫做时钟节拍(Time Tick)。 硬件定时器以时钟节拍为周期定时地产生中断,该中断的中断服务程序叫做 OSTickISR(
阅读全文
摘要:任务调度 多任务操作系统的核心工作就是任务调度。 所谓调度,就是通过一个算法在多个任务中确定该运行的任务,做这项工作的函数就叫做调度器。 μC/OS II 进行任务调度的思想是 “近似地每时每刻总是让优先级最高的就绪任务处于运行状态” 。为了保证这一点,它在系统或用户任务调用系统函数及执行中断服务程
阅读全文
摘要:任务堆栈的作用 应用程序在创建一个新任务的时候,必须把在系统启动这个任务时 CPU 各寄存器所需要的初始数据(任务指针、任务堆栈指针、程序状态字等等),事先存放在任务的堆栈中,以备任务切换等操作时调用。 初始化函数的调用 μC/OS II 是在创建任务函数 OSTaskCreate( ) 中通过调用
阅读全文
摘要:1. 任务的状态及其转换 睡眠状态: 任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠状态。 等待状态: 正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。 就绪状态: 系统为任务配备了任务控制块且在任务就
阅读全文
摘要:"上一篇文章" 介绍了S3c2440的中断体系结构,今天我们来分析一下GNU uC/OS II在S3c2440上中断的实现。 首先找到IRQ的中断的向量,位于 2440init.S : OK ,我们通过名字找到了这个函数: ~~~~ OS_CPU_IRQ_ISR: STMFD SP!, {R1 R3
阅读全文
摘要:CM3 的堆栈分为两个:主堆栈和进程堆栈。 那么,这两个栈分别在什么情况下使用呢? 我们看一下CM3的控制寄存器(CONTROL):控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针。 CONTROL[1] 在 Cortex‐M3 的 handler 模式中, CONTROL[1]总是 0。
阅读全文
摘要:首先贴出今天要与大家分享的内容源码(位于内核源码的 os_cpu_a.asm 中):PendSV_Handler CPSID I MRS R0, PSP CBZ R0, PendSV_Handler_Nosave SUBS R0, R0, #0x20 STM R0, {R4-R11} LDR R1,
阅读全文