创建任务, OSTaskCreateExt()
stk_size 用于指定堆栈成员数目的容量。也就是说,若是堆栈的入口宽度为 4 字节宽,那么 stk_size 为 10000 是指堆栈有 40000 个字节,意思就是数据的宽度*长度=堆栈的大小。函数
μC/OS-Ⅱ支持的处理器的堆栈既能够从上(高地址)往下(低地址)长也能够从下往上长
。用户在调用 OSTaskCreate()或 OSTaskCreateExt()的时候必须知道
堆栈是怎样长的,
当 OS_CPU.H 文件中的 OS_STK_GROWTH 置为 1 时,用户须要将堆栈的最高内存地址传递
给任务建立函数 - 通常默认为1,咱们须要改成0,才能从堆栈的最低内存开始传递参数。spa
堆栈检验, OSTaskStkChk()队列
为了适应系统之后的升级和扩展,用户应该多分配 10%-100%的堆栈空间内存
由于 μC/OS-Ⅱ不容许多个任务具备相同的优先级,因此 OSTaskChangePrio()须要检验新优
先级是不是合法的(即不存在具备新优先级的任务)消息队列
有时候将任务挂起是颇有用的。挂起任务可经过调用 OSTaskSuspend()函数来完成。被
挂起的任务只能经过调用 OSTaskResume()函数来恢复。io
OSMboxPend(MboxTimeDly, TIMEOUT, &err); 用邮箱能够实现互斥锁的功能,也能够实现延时的功能变量
消息队列是一个循环的缓冲区,圆形的。若是此时消息队列已满,那么该消息将因为不能插入到消息队列中而丢失。扩展
OSSemPend()和 OSMboxPend()函数同样,不能在中断服务子程序中调用 OSQPend(),由于中断服务子程序是不能等待的。循环
互斥锁和信号量不能在中断里使用,否则会影想任务的运行。对于初始化时胡一些系统变量,若是越界,会致使第一个优先级的任务没法运行,由于地址重叠了。程序
若是定义多个互斥锁,须要分为不一样的优先级,有的优先级不能使用,会致使内存越界,好比优先级5.