视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
第12章 嵌入式实时操作系统UCOS-II(第2版)
2025-09-25 17:59:40 责编:小OO
文档
第12章

配置手册

本章将介绍μC/OS-II中的初始化配置项。由于μC/OS-II向用户提供源代码,初始化配置项由一系列#define constant语句构成,都在文件OS_CFG.H中。用户的工程文件组中都应该包含这个文件。

本节介绍每个用#define constant定义的常量,介绍的顺序和它们在OS_CFG.H中出现的顺序是相同的。表12.1列出了常量控制的μC/OS-II函数。“类型”为函数所属的类型,“置1”表示当定义常量为1时可以打开相应的函数,“其他常量”为与这个函数有关的其他控制常量。

注意编译工程文件时要包含OS_CFG.H,使定义的常量生效。

表T12.1 μC/OS-II函数和相关的常量(#define constant定义)

表 T12.1    µC/OS-II 函数和相关常量

类型置1

其他常量
杂相
OSInit()OS_MAX_EVENTS

OS_Q_EN and OS_MAX_QS

OS_MEM_EN

OS_TASK_IDLE_STK_SIZE

OS_TASK_STAT_EN

OS_TASK_STAT_STK_SIZE

OSSchedLock()
OSSchedUnlock()
OSStart()
OSStatInit()OS_TASK_STAT_EN &&

OS_TASK_CREATE_EXT_EN

OS_TICKS_PER_SEC
OSVersion()
中断处理
OSIntEnter()
OSIntExit()
消息邮箱
OSMboxAccept()OS_MBOX_EN
OSMboxCreate()OS_MBOX_ENOS_MAX_EVENTS
OSMboxPend()OS_MBOX_EN
OSMboxPost()OS_MBOX_EN
OSMboxQuery()OS_MBOX_EN
内存块管理
OSMemCreate()OS_MEM_ENOS_MAX_MEM_PART
OSMemGet()OS_MEM_EN
OSMemPut()OS_MEM_EN
OSMemQuery()OS_MEM_EN
消息队列
OSQAccept()OS_Q_EN
OSQCreate()OS_Q_ENOS_MAX_EVENTS

OS_MAX_QS

OSQFlush()OS_Q_EN
OSQPend()OS_Q_EN
OSQPost()OS_Q_EN
OSQPostFront()OS_Q_EN
OSQQuery()OS_Q_EN
信号量管理
OSSemAccept()OS_SEM_EN
OSSemCreate()OS_SEM_ENOS_MAX_EVENTS
OSSemPend()OS_SEM_EN
OSSemPost()OS_SEM_EN
OSSemQuery()OS_SEM_EN
任务管理
OSTaskChangePrio()OS_TASK_CHANGE_PRIO_ENOS_LOWEST_PRIO
OSTaskCreate()OS_TASK_CREATE_ENOS_MAX_TASKS

OS_LOWEST_PRIO

OSTaskCreateExt()OS_TASK_CREATE_EXT_ENOS_MAX_TASKS

OS_STK_GROWTH

OS_LOWEST_PRIO

OSTaskDel()OS_TASK_DEL_ENOS_LOWEST_PRIO
OSTaskDelReq()OS_TASK_DEL_ENOS_LOWEST_PRIO
OSTaskResume()OS_TASK_SUSPEND_ENOS_LOWEST_PRIO
OSTaskStkChk()OS_TASK_CREATE_EXT_ENOS_LOWEST_PRIO
OSTaskSuspend()OS_TASK_SUSPEND_ENOS_LOWEST_PRIO
OSTaskQuery()OS_LOWEST_PRIO
时钟管理
OSTimeDly()
OSTimeDlyHMSM()OS_TICKS_PER_SEC
OSTimeDlyResume()OS_LOWEST_PRIO
OSTimeGet()
OSTimeSet()
OSTimeTick()
用户定义函数
OSTaskCreateHook()OS_CPU_HOOKS_EN
OSTaskDelHook()OS_CPU_HOOKS_EN
OSTaskStatHook()OS_CPU_HOOKS_EN
OSTaskSwHook()OS_CPU_HOOKS_EN
OSTimeTickHook()OS_CPU_HOOKS_EN
OS_MAX_EVENTS

OS_MAX_EVENTS定义系统中最大的事件控制块的数量。系统中的每一个消息邮箱,消息队列,信号量都需要一个事件控制块。例如,系统中有10个消息邮箱,5个消息队列,3个信号量,则OS_MAX_EVENTS最小应该为18。只要程序中用到了消息邮箱,消息队列或是信号量,则OS_MAX_EVENTS最小应该设置为2。

OS_MAX_MEM_PARTS

OS_MAX_MEM_PARTS定义系统中最大的内存块数,内存块将由内存管理函数操作(定义在文件OS_MEM.C中)。如果要使用内存块,OS_MAX_MEM_PARTS最小应该设置为2,常量OS_MEM_EN也要同时置1。

OS_MAX_QS

OS_MAX_QS定义系统中最大的消息队列数。要使用消息队列,常量OS_Q_EN也要同时置1。如果要使用消息队列,OS_MAX_ QS最小应该设置为2。

OS_MAX_TASKS

OS_MAX_MEM_TASKS定义用户程序中最大的任务数。OS_MAX_MEM_TASKS不能大于62,这是由于μC/OS-II保留了两个系统使用的任务。如果设定OS_MAX_MEM_TASKS刚好等于所需任务数,则建立新任务时要注意检查是否超过限定。而OS_MAX_MEM_TASKS设定的太大则会浪费内存。

OS_LOWEST_PRIO

OS_LOWEST_PRIO设定系统中的任务最低优先级(最大优先级数)。设定OS_LOWEST_PRIO可以节省用于任务控制块的内存。μC/OS-II中优先级数从0(最高优先级)到63(最低优先级)。设定OS_LOWEST_PRIO小于63意味着不会建立优先级数大于OS_LOWEST_PRIO的任务。μC/OS-II中保留两个优先级系统自用:OS_LOWEST_PRIO和OS_LOWEST_PRIO-1。其中OS_LOWEST_PRIO留给系统的空闲任务(Idle task)(OSTaskIdle())。OS_LOWEST_PRIO-1留给统计任务(OSTaskStat())。用户任务的优先级可以从0到OS_LOWEST_PRIO-2。OS_LOWEST_PRIO和OS_MAX_TASKS之间没有什么关系。例如,可以设OS_MAX_TASKS为10而

OS_LOWEST_PRIO为32。此时系统最多可有10个任务,用户任务的优先级可以是0到30。当然,OS_LOWEST_PRIO设定的优先级也要够用,例如设OS_MAX_TASKS为20,而OS_LOWEST_PRIO为10,优先级就不够用了。

OS_TASK_IDLE_STK_SIZE

OS_TASK_IDLE_STK_SIZE设置μC/OS-II中空闲任务(Idle task)堆栈的容量。注意堆栈容量的单位不是字节,而是OS_STK(μC/OS-II中堆栈统一用OS_STK声明,根据不同的硬件环境,OS_STK可为不同的长度----译者注)。空闲任务堆栈的容量取决于所使用的处理器,以及预期的最大中断嵌套数。虽然空闲任务几乎不做什么工作,但还是要预留足够的堆栈空间保存CPU寄存器的内容,以及可能出现的中断嵌套情况。

OS_TASK_STAT_EN

OS_TASK_STAT_EN设定系统是否使用μC/OS-II中的统计任务(statistic task)及其初始化函数。如果设为1,则使用统计任务OSTaskStat()。统计任务每秒运行一次,计算当前系统CPU使用率,结果保存在8位变量OSCPUUsage中。每次运行,OSTaskStat()都将调用OSTaskStatHook()函数,用户自定义的统计功能可以放在这个函数中。详细情况请参考OS_CORE.C文件。统计任务OSTaskStat()的优先级总是设为OS_LOWEST_PRIO-1。

当OS_TASK_STAT_EN设为0的时候,全局变量OSCPUUsage,OSIdleCtrMax,OSIdleCtrRun和OSStatRdy都不声明,以节省内存空间。

OS_TASK_STAT_STK_SIZE

OS_TASK_STAT_STK_SIZE设置μC/OS-II中统计任务(statistic task)堆栈的容量。注意单位不是字节,而是OS_STK(μC/OS-II中堆栈统一用OS_STK声明,根据不同的硬件环境,OS_STK可为不同的长度----译者注)。统计任务堆栈的容量取决于所使用的处理器类型,以及如下的操作:

●进行32位算术运算所需的堆栈空间。

●调用OSTimeDly()所需的堆栈空间。

●调用OSTaskStatHook()所需的堆栈空间。

●预计最大的中断嵌套数。

如果想在统计任务中进行堆栈检查,判断实际的堆栈使用,用户需要设OS_TASK_CREATE_EXT_EN为1,并使用OSTaskCreateExt()函数建立任务。

OS_CPU_HOOKS_EN

此常量设定是否在文件OS_CPU_C.C中声明对外接口函数(hook function),设为1为声明。μC/OS-II中提供了5个对外接口函数,可以在文件OS_CPU_C.C中声明,也可以在用户自己的代码中声明:

●OSTaskCreateHook()

●OSTaskDelHook()

●OSTaskStatHook()

●OSTaskSwHook()

●OSTimeTickHook()

OS_MBOX_EN

OS_MBOX_EN控制是否使用μC/OS-II中的消息邮箱函数及其相关数据结构,设为1为使用。如果不使用,则关闭此常量节省内存。

OS_MEM_EN

OS_MEM_EN控制是否使用μC/OS-II中的内存块管理函数及其相关数据结构,设为1为使用。如果不使用,则关闭此常量节省内存。

OS_Q_EN

OS_Q_EN控制是否使用μC/OS-II中的消息队列函数及其相关数据结构,设为1为使用。如果不使用,则关闭此常量节省内存。如果OS_Q_EN设为0,则语句#define constant OS_MAX_QS无效。

OS_SEM_EN

OS_SEM_EN控制是否使用μC/OS-II中的信号量管理函数及其相关数据结构,设为1为使用。如果不使用,则关闭此常量节省内存。

OS_TASK_CHANGE_PRIO_EN

此常量控制是否使用μC/OS-II中的OSTaskChangePrio()函数,设为1为使用。如果在应用程序中不需要改变运行任务的优先级,则将此常量设为0节省内存。

OS_TASK_CREATE_EN

此常量控制是否使用μC/OS-II中的OSTaskCreate()函数,设为1为使用。在μC/OS-II中推荐用户使用OSTaskCreateExt()函数建立任务。如果不使用OSTaskCreate()函数,将OS_TASK_CREATE_EN设为0可以节省内存。注意OS_TASK_CREATE_EN和OS_TASK_CREATE_EXT_EN至少有一个要为1,当然如果都使用也可以。

OS_TASK_CREATE_EXT_EN

此常量控制是否使用μC/OS-II中的OSTaskCreateExt()函数,设为1为使用。该函数为扩展的,功能更全的任务建立函数。如果不使用该函数,将OS_TASK_CREATE_EXT_EN设为0可以节省内存。注意,如果要使用堆栈检查函数OSTaskStkChk(),则必须用OSTaskCreateExt()建立任务。

OS_TASK_DEL_EN

此常量控制是否使用μC/OS-II中的OSTaskDel()函数,设为1为使用。如果在应用程序中不使用删除任务函数,将OS_TASK_DEL_EN设为0可以节省内存。

OS_TASK_SUSPEND_EN

此常量控制是否使用μC/OS-II中的OSTaskSuspend()和OSTaskResume()函数,设为1为使用。如果在应用程序中不使用任务挂起-唤醒函数,将OS_TASK_SUSPEND_EN设为0可以节省内存。

OS_TICKS_PER_SEC

此常量标识调用OSTimeTick()函数的频率。用户需要在自己的初始化程序中保证OSTimeTick()按所设定的频率调用(即系统硬件定时器中断发生的频率----译者注)。在函数OSStatInit(),OSTaskStat()和OSTimeDlyHMSM()中都会用到OS_TICKS_PER_SEC。下载本文

显示全文
专题