在 uC/OS 系统中,中断相当于一个优先级最高的任务。中断一般用于处理比较紧急的事件, 而且只做简单处理,例如标记该事件,带退出中断后再做详细处理。在使用 uC/OS系统时, 一般建议使用信号量、 消息或事件标志组等标志中断的发生,将这些内核对象发布给处理任务,处理任务再做详细处理。 1.在使用 Read More
任务等待多个对象。然而, uC/OS-III只允许同时等待多个信号量和消息队列。换句话说,不能同时等待多个事件标志组或mutex。 1.任务可以同时等待多个信号量和消息队列。 任务接收到一个信号量或消息就会被就绪。 任务通过调用OSPendMulti()等待多个对象,并可使设置等待时限。这个时限对应 Read More
内存管理 uC/OS-III可以获得连续的内存块。内存块大小可以相同, 所有的内存分 区包含了整数个内存块。 在特定的时间执行内存块的分配和释放。内存分 区以内存块数组的形式被静态分配的。如果分配后不被释放,也可以调用 malloc()动态分配。 不要在嵌入式系统中使用malloc()和free() Read More
同步 uC/OS-III中用于同步的两种机制:信号量和事件标志组 。 1.信号量 信号量最初用于控制共享资源的访问。信号量可用于ISR与任务间、任务与任务间的同步。 “ N”表示信号量可以被累计。初始化时也可以设置为非0值,表明已经有事件发生。ISR或任务可以提交信号量多次,信号量计数值会记录该信号 Read More
消息传递 有些情况下任务或ISR与另一个任务间进行通信,这种信息交换叫做作业间的通信。 可以有两种方法实现这种通信: 全局变量、 发送消息。 1.果使用全局变量,任务或ISR就须确保它独占该变量。如果防止被ISR嵌套, 那么就只有关中断这种方法来保护这个变量。 如果是任务间共享该变量, 那么可以通过 Read More
1.共享资源可以是:变量(静态的或全局的)、结构体、内存空间、 I/O等。 多个任务可能会同时要求占用资源: 内存空间、 全局变量、 指针、缓冲区、 列表、 环形缓冲区等。 通过共享资源, 任务间通信将会比较简单。当然,避免任务间的竞争和防止资源被破坏是非常重要的 。 2.大部分独占资源的方法都是创 Read More
1.当uC/OS-III转向执行另一个任务的时候,它保存了当前任务的CPU寄存器到堆栈。并从新任务的的堆栈中CPU寄存器载入CPU。这个过程叫做上下文切换。 上下文切换需要一些开支。 CPU的寄存器越多, 开支越大。 上下文切换部分的代码是移植uC/OS-III时需编写的。该部分代码要适用于处理器。 Read More
1.当任务等待信号量、 mutex、事件标志组、消息队列时,该任务会被放入挂起队列。 挂起队列是一个OS_PEND_LIST类型的数据结构,它包含了三部分内容。 .NbrEntries 挂起队列中有几个任务。.TailPtr 指向队列的尾部(最低优先级的任务).HeadPtr 指向队列的首部(最高优 Read More
调度器,决定了任务的运行顺序。 uC/OS-III是一个可抢占的, 基于优先级的内核。根据其重要性每个任务都被分配了一个优先级。uC/OS-III支持多个任务拥有相同的优先级。 1.抢占式调度 uC/OS-III通过两种方法处理中断提交的事件:直接提交或延迟提交。 从调度的角度看, 这两种方法产生的 Read More
1.CPU的中断处理 理器通常有多个中断源。 例如, UART中断、 DMA中断、 ADC中断、定时器中断等。 2.中断器件标志中断处理器,然后中断处理器将优先级最高的中断提交给CPU。 现在的中断控制器都是智能的,允许定义中断优先级,记住哪些中断还处于挂起状态。在大多数情况下,中断控制器会直接提供 Read More