配置手册

 

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_EN

OS_MAX_EVENTS

OSMboxPend()

OS_MBOX_EN

OSMboxPost()

OS_MBOX_EN

OSMboxQuery()

OS_MBOX_EN

内存块管理

 

 

OSMemCreate()

OS_MEM_EN

OS_MAX_MEM_PART

OSMemGet()

OS_MEM_EN

OSMemPut()

OS_MEM_EN

OSMemQuery()

OS_MEM_EN

消息队列

 

 

OSQAccept()

OS_Q_EN

OSQCreate()

OS_Q_EN

OS_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_EN

OS_MAX_EVENTS

OSSemPend()

OS_SEM_EN

OSSemPost()

OS_SEM_EN

OSSemQuery()

OS_SEM_EN

任务管理

 

 

OSTaskChangePrio()

OS_TASK_CHANGE_PRIO_EN

OS_LOWEST_PRIO

OSTaskCreate()

OS_TASK_CREATE_EN

OS_MAX_TASKS

OS_LOWEST_PRIO

OSTaskCreateExt()

OS_TASK_CREATE_EXT_EN

OS_MAX_TASKS

OS_STK_GROWTH

OS_LOWEST_PRIO

OSTaskDel()

OS_TASK_DEL_EN

OS_LOWEST_PRIO

OSTaskDelReq()

OS_TASK_DEL_EN

OS_LOWEST_PRIO

OSTaskResume()

OS_TASK_SUSPEND_EN

OS_LOWEST_PRIO

OSTaskStkChk()

OS_TASK_CREATE_EXT_EN

OS_LOWEST_PRIO

OSTaskSuspend()

OS_TASK_SUSPEND_EN

OS_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_PRIOOS_LOWEST_PRIO-1。其中OS_LOWEST_PRIO留给系统的空闲任务(Idle task(OSTaskIdle())OS_LOWEST_PRIO-1留给统计任务(OSTaskStat())。用户任务的优先级可以从0OS_LOWEST_PRIO-2OS_LOWEST_PRIOOS_MAX_TASKS之间没有什么关系。例如,可以设OS_MAX_TASKS10

 

 

 

OS_LOWEST_PRIO32。此时系统最多可有10个任务,用户任务的优先级可以是030。当然,OS_LOWEST_PRIO设定的优先级也要够用,例如设OS_MAX_TASKS20,而OS_LOWEST_PRIO10,优先级就不够用了。

 

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的时候,全局变量OSCPUUsageOSIdleCtrMaxOSIdleCtrRunOSStatRdy都不声明,以节省内存空间。

 

OS_TASK_STAT_STK_SIZE

 

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

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

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

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

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

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

 

 

 

OS_CPU_HOOKS_EN

 

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

l         OSTaskCreateHook()

l         OSTaskDelHook()

l         OSTaskStatHook()

l         OSTaskSwHook()

l         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_ENOS_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

 

 

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值