当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 一. 服务功能的配置:根据程序中的实际情况,保留自己要用的系统服务功能,删除自己不需要的服务功能。进行合理配置后,是我们自己系统的目标代码比较紧凑,从而降低了对程

 

一. 服务功能的配置:

根据程序中的实际情况,保留自己要用的系统服务功能,删除自己不需要的服务功能。进行合理配置后,是我们自己系统的目标代码比较紧凑,从而降低了对程序代码存储空间的要求。如果代码存储空间足够大的话,那就将全部系统服务功能全部配置为1。不需要考虑功能裁剪。

2 任务管理功能的裁剪

1. OS_Task_CREATE_EN

l 作用:设定控制用户程序是否使用OSTaskCreate()函数。

l 说明:如果要使用,则应将其设置为1;否则设置为0以节省内存。

注:

1.在UC/OS中建议使用函数OSTaskCreateExt()来建立任务。

2.在配置时OS_TASK_CREATE_EN()和OS_TASK_CREATE_EXT_EN()至少有一个要为1。

2. OS_TASK_CREATE_EXT_EN

l 作用:设置程序中是否使用OSTaskCreateExt().

l 说明:如果要使用,则将其设置为1.否则将其设置为0,以节省内存。

注:若程序中如果要使用堆栈检查函数OSTaskStkChk(),则必须使用函数OSTaskCreateExt()建立任务。

3. OS_TASK_DEL_EN

l 作用:设定程序中是否使用删除任务函数OSTaskDel()

l 说明:如果要使用,则设为1,否则设为0。以节省内存。

4. OS_TASK_SUSPEND_EN

l 作用:设定程序中使用任务挂起和唤醒函数OSTaskSupend()和OSTaskResume().

l 说明:如果要使用,则设为1,否则设为0.以节省内存。

5. OS_TASK_STAT_EN

l 作用:设置系统是否使用UC/OS中的统计任务OSTaskStat()及其初始化函数。

l 说明:设为1,则使用统计任务。统计任务每秒运行一次,计算当前系统CPU使用频率并把结果保存在8位全局变量OSCPUUsage中。每次运行,OSTaskStat()都将调用函数OSTaskStatHook(),用户自定义的统计功能可以放在这个函数中。若设为0时,UC/OS在系统初始化时,全局变量OSCPUUsage,OSIdleCtrMax,OSIdleCtrRun和OSStatRdy都将不被声明,以节省内存空间

注:OSTaskStat()的优先级总是自动设为OS_LOWEST_PRIO-1。

6. OS_TASK_CHANGE_PRIO_EN

l 作用:设定程序中是否使用UC/OS的改变任务优先级函数OSTaskChangePrio().

l 说明:如果要使用,则应将其设为1。否则将其设为0.关闭此常量以节省内存

7. OS_TASK_QUERY_EN

l 作用:设定程序中是否需要使用获取任务信息函数OSTaskQuery。

l 说明:需要使用时配置为1,不需要使用时配置为0.

8. OS_SCHED_LOCK_EN

l 作用:设定应用程序中是否使用关调度锁函数OSSchedLock()和开调度锁函数OSSchedUnlock()。

l 说明:需要时配置为1,不需要使用时配置为0

2 通信功能的裁剪

1. 有关信号量功能的裁剪

1>OS_SEM_EN

l 作用:设定程序中是否使用信号量管理函数和其相关数据结构。

l 说明:如果要使用,则设为1;否则设为0。关闭此常量以节省内存

注:若配置为0后,所有有关信号量的函数均不能使用,即使对应的常量配置为1。

2>0S_SEM_ACCEPT_EN:

l 作用:设定程序中是否需要使用无等待获取信号量函数OSSemAccept()

l 说明:若要使用则配置为1.否则配置为0.

3>OS_SEM_DEL_EN:

l 作用:设定程序中是否需要使用删除信号量函数OSSemDel()

l 说明:若需要使用则配置为1.否则配置为0.

4>OS_SEM_QUERY_EN:

l 作用:应用系统是否需要使用查询信号量状态函数OSSemQuery()

l 说明:需要时配置为1,否则配置为0.

2关于互斥信号量服务功能的裁剪

1> OS_MUTEX_EN:

l 作用:设定程序中是否使用互斥信号量

l 说明:若需要使用,则设为1.否则设为0

注:若配置为0,则所有关互斥信号量的函数均不能使用,即使对应的常量配置为1.

2>OS_MUTEX_ACCEPT_EN

l 作用:设定程序中是否使用无等待获取互斥型信号量函数OSMutexAccept()

l 说明:若需要使用则设为1.否则设为0.

3>OS_MUTEX_DEL_EN

l 作用:设定程序中是否使用OSMutexDel()函数。

l 说明:若需要使用时则设为1,否则设为0.

4>OS_MUTEX_QUERY_EN

l 作用:设定程序中是否使用OSMutexQuery()函数。

l 说明:若需要使用则设为1.否则设为0.

3关于事件标志组服务功能的裁剪

1> OS_FLAG_EN

l 作用:设定程序中是否使用事件标志组。

l 说明:需要是设定为1.不需要时设为0.

注:若配置为0,则所有有关事件标志组的函数均不能使用。即使对应的常量配置为1。

2>OS_FLAG_ACCEPT_EN

l 作用:设定程序中是否需要使用OSFlagAccept()。

l 说明:需要时配置为1.否则配置为0.

3>OS_FLAG_DEL_EN

l 作用:设定应用程序中是否需要使用OSFlagDel()函数。

l 说明:需要使用时配置为1.否则配置为0.

4>OS_FLAG_QUERY_EN:

l 作用:设定程序中是否使用OSFlagQuery()函数

l 说明:需要时配置为1,不用是配置为0.

4.关于消息邮箱服务功能大裁剪

1>OS_MBOX_EN

l 作用:设置程序是否使用消息邮箱函数及其相关数据结构。

l 说明:如果程序中要使用消息邮箱函数就要将其设置为1.否则为0.关闭此常量以节省内存。

注:若配置次常量为0后,所有有关消息邮箱的函数均不能使用,即使对应的常量配置为1.

2>OS_MOX_ACCEPT_EN

l 作用:设定程序中是否需要使用OSMboxAccept()函数。

l 说明:需要时配置为1,不需要时配置为0

3>OS_MOX_DEL_EN

l 作用:设定程序中是否使用OSMboxDel()函数[!--empirenews.page--]

l 说明:需要时配置为1.否则配置为0。

4>OS_MBOX_POST_EN:

l 作用:设定程序中是否使用OSMboxPost()函数

l 说明:需要使用时配置为1.否则配置为0.

5>OS_MBOX_OPST_OPT_EN:

l 作用:设定程序中是否使用OSMboxPostOpt()函数

l 说明:需要是配置为1.否则配置为0.

6>OS_MBOX_QUERY_EN:

l 作用:设定程序中是否使用OSMboxQuery().

l 说明:需要时配置为1.否则配置为0.

5.关于消息队列服务功能的裁剪

1> OS_Q_EN

l 作用:设定程序中是否使用消息队列函数及其相关数据结构。

l 说明:如果要使用,则必须将其设置为1;否则设置为0.关闭此常量以节省内存。

注:若该配置为0时,所有有关消息队列的函数均不能使用,即使对应的常量配置为1。

2> OS_Q_ACCEPT_EN

l 作用:设定程序中是否使用OSQAccept()

l 说明:需要时设置为1,否则配置为0.

3> OS_Q_DEL_EN

l 作用:设定程序中是否使用OSQDel()

l 说明:需要使用时配置为1,否则配置为0.

4> OS_Q_FLUSH_EN

l 作用:设定程序中是否使用OSQFlush()(清空消息队列函数)

l 说明:需要使用时配置为1,否则配置为0.

5> OS_Q_POST_EN:

l 作用:设定程序中是否使用按FIFO规则向消息队列发送消息函数OSQPost()函数。

l 说明:需要使用时配置为1,否则配置为0

6> OS_Q_POST_FRONT_EN

l 作用:设定程序中是否使用按LIFO规则向消息队列发送消息函数OSQPostFront()函数

l 说明:需要是使用配置为1,否则配置为0.

7> OS_Q_POST_OPT_EN

l 作用:设定程序中是否使用按FIFO或LIFO规则向消息队列发送消息函数OSQPostOpt().

l 说明: 若需要时配置为1,否则配置为0.

注:该函数功能灵活,可以替代上面两个消息发送函数。

8> OS_Q_QUEAY_EN

l 作用:设定程序中是否使用OSQQuery()函数。

l 说明:需要时配置为1,否则配置为0.

6. 有关内存管理服务功能的裁剪

1> OS_MEM_EN

l 作用:设置程序中是否使用内存块管理函数及其相关数据结构。

l 说明:如果要使用,则必须将其设为1;否则将其置为0.关闭此常量以节省内存。

注:当配置为0时。所有有关内存管理功能的函数均不能使用,即使对应的常量配置为1.

2> OS_MEM_QUERY_EN

l 作用:设定程序中是否使用OSMemQuery()函数(查询内存分区状态函数)

l 说明:需要时配置为1.否则配置为0。

2 其它功能的裁剪

1. OS_TIME_DLY_HMSM_EN

l 作用:设定程序中是否使用OSTimeDlyHMSM()函数。

l 说明:需要时配置为1,否则配置为0。

2. OS_TIME_DLY_RESUME_EN:

l 作用:设定应用系统是否需要使用OSTimeDlyResume()函数。

l 说明:需要时配置为1,不需要时配置为0.

3. OS_TIME_GET_SET_EN

l 作用:设定应用系统中是否使用OSTimeGet()函数。

l 说明:需要时配置为1,否则配置为0.

4. OS_CPU_HOOKS_EN

l 作用:设定是否在文件OS_CPU_C.C中实现各钩子函数(Hook Function).如果要实现钩子函数,则常量OS_CPU_HOOKS_EN必须设置为1.

l 说明:UC/OS中提供了5个对外接口函数:

? OSTaskCreateHook();

? OSTaskDelHook();

? OS TaskStatHook();

? OSTaskSwHook();

? OSTimeTickHook();

这五个钩子函数即可以在文件OS_CPU_C.C中声明,也可以在用户代码中声明。

5. OS_ARG_CHK_EN:

l 作用:设定系统中是否使用参数检查功能。

l 说明:需要时配置为1,不需要时配置为0.

一. 数据结构功能的配置:

2 与任务有关的数据结构

1.OS_MAX_TASKS

l 作用:设置用户程序中可以使用的最多任务数。

l 说明:该值不能超过62.

l 举例: 若程序中用到了三个任务,则该值的最小值

为3(因为UC/OS操作系统目前保留了两个任务(统计任务和空闲任务)。

注:若设定OS_MAX_TASKS的值应该比实际任务数大一些,以便于以后程序的扩展。当不能设置太大,会造成内存的浪费。

2 .OS_LOWEST_PRIO

l 作用:设置程序中最低任务的优先级。

l 说明: 设定该值可以节省操作系统使用RAM的空间。

任务的最低优先级和最大任务数是没有直接关系的。

注:

1>UC/OS操作系统中优先级分别从(0)最高优先级~(63)最低优先级。其中OS_LOWEST_PRIO留给系统的空闲任务OSTaskIdle();OS_LOWEST_PRIO-1留给统计任务OSTaskStat()。操作系统留给用户可分配的优先级为:从0~OS_LOWEST_PRIO-2.

2>OS_LOWEST_PRIO和OS_MAX_TASKS是相互独立的两个配置常量。例如:可以设OS_MAX_TASKS为10,而OS_LOWEST_PRIO为32。此时,系统最多可有10个任务,用户任务的优先级级别可以是0~30.

3. OS_TASK_IDLE_STK_SIZE

l 作用:设置UC/OS操作系统中空闲任务堆栈的容量

l 说明:设置这个常量时,要注意堆栈容量的单位不是字节,而是OS_STK

注:在UC/OS操作系统中堆栈统一用OS_STK声明,根据不同的硬件环境,OS_STK可为不同的长度。

4. OS_TASK_STAT_STK_SIZE

l 作用:设定统计任务的任务堆栈容量。

l 说明:堆栈容量单位不是字节,而是OS_STK。统计任务堆栈的容量取决于所使用的处理器类型,以及如下的操作:

? 进行32位算术运算所需的堆栈空间;

? 调用OSTimeDly()所需的堆栈空间;

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

? 预计最大的中断嵌套数

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

5.TASK_STK_SIZE

l 作用:设定任务堆栈的容量。

l 说明:该容量不在系统配置文件OS_CFG.H中定义,而在用户程序中定义。堆栈容量的单位(OS_STK)与CPU类型有关。[!--empirenews.page--]

注:对于ARM7系列CPU,OS_STK为32位。

2 与通信功能有关的数据结构

1.OS_MAX_EVENTS

l 作用:设置程序中可以具有事件控制块的最大数量。

l 说明事件控制块数量即程序设计中信号量,邮箱和消息队列的个数。

l 举例:若程序中定义了一个邮箱,一个消息队列和一个互斥信号量。则此时OS_MAX_EVENTS的最小值为3.

注:如果使用zlg提供的模版时,建议OS_MAX_EVENTS设置最小为8(因为zlg的模板中可能也用到了一些事件控制块)

2.OS_MAX_MEM_PART

l 作用:设置系统中内存块的最大数目。

l 说明:如果不用内存控制,则设置为默认值即可

l 举例:在zlg模板中OS_MAX_MEM_PART为5

注:如果应用程序要使用动态内存,那么内存控制块的配置常数OS_MAX_MEM_PARTS最小应该设置为2.

为了使编译器能够对系统的内存管理函数进行编译,常量OS_MEM_EN也要设置为1。

3.OS_MAX_QS

l 作用:设置系统中具有消息队列的最大数目

l 说明:如果程序中要使用消息队列,那么OS_MAX_QS最小应该设置为2。为了使编译器能够对系统的管理消息队列的函数进行编译,常量0S_Q_EN也要同时设置为1。

l 举例:若在程序中定义了一个消息队列,则该值最小设定为1.

4.OS_MAX_FLAGS:

l 作用:设定事件标志组的最大数目

l 说明:若定义了事件标志组,还要定义定义事件标志组包含的标志位数(只能是8位,16位或32位)

l 举例:定义16位的事件标志组

typedef INT16U 0S_FLAGS

2 其它参数

1.OS_TICK_PER_SEC:

l 作用:设置调用OSTimeTick()函数的频率,即时钟最小单位的设定。

l 说明:如果这个值设定得太大,则系统的实时性会受到影响;如果这个值设定的太小,则CPU会忙于时钟处理而增大开销。

注:根据微处理器的不同,该值设置为10~100ms的周期为宜,对应频率为10~100HZ。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭