stm32f103c8t6移植uCOS Ⅲ出现Error: L6407W,解决方法:内核配置以减小代码规模

笔者在移植uCOS Ⅲ到stm32f103c8时碰到如下问题

Error: L6407W: Sections of aggregate size 0x6c48 bytes could not fit into .ANY selector(s).初步推定应该是内核服务没有配置导致,在别人提示下查看了以前stm32f103vet6移植编译成功的ucos Ⅲ工程MAP文件。

如下:


考虑到stm32f103c8不用这么多服务,因此拟对内核服务做出裁剪。

事后验证,事实上不用删除uCOS-III\Source下对应服务的C语言文件,只需找到os_cfg.h文件,对其中不用的服务进行置0操作,MEMORY MANAGEMENT 占用内存较多,而且f103c8不需要内存管理,首先可将其服务置零,然后编译发现已经可以编译通过,代码量差不多是27KB左右,后又对其他不用服务进行了相同操作。最终可将代码量控制在8k左右。

os_cfg.h文件最终配置如下所示

#define OS_CFG_APP_HOOKS_EN             0u   /* Enable (1) or Disable (0) application specific hooks                  */
#define OS_CFG_ARG_CHK_EN               1u   /* Enable (1) or Disable (0) argument checking                           */
#define OS_CFG_CALLED_FROM_ISR_CHK_EN   1u   /* Enable (1) or Disable (0) check for called from ISR                   */
#define OS_CFG_DBG_EN                   1u   /* Enable (1) debug code/variables                                       */
#define OS_CFG_ISR_POST_DEFERRED_EN     1u   /* Enable (1) or Disable (0) Deferred ISR posts                          */
#define OS_CFG_OBJ_TYPE_CHK_EN          1u   /* Enable (1) or Disable (0) object type checking                        */
#define OS_CFG_TS_EN                    0u   /* Enable (1) or Disable (0) time stamping                               */


#define OS_CFG_PEND_MULTI_EN            1u   /* Enable (1) or Disable (0) code generation for multi-pend feature      */


#define OS_CFG_PRIO_MAX                32u   /* Defines the maximum number of task priorities (see OS_PRIO data type) */


#define OS_CFG_SCHED_LOCK_TIME_MEAS_EN  0u   /* Include code to measure scheduler lock time                           */
#define OS_CFG_SCHED_ROUND_ROBIN_EN     0u   /* Include code for Round-Robin scheduling                               */
#define OS_CFG_STK_SIZE_MIN            64u   /* Minimum allowable task stack size                                     */




                                             /* ----------------------------- EVENT FLAGS --------------------------- */
#define OS_CFG_FLAG_EN                  0u   /* Enable (1) or Disable (0) code generation for EVENT FLAGS             */
#define OS_CFG_FLAG_DEL_EN              0u   /*     Include code for OSFlagDel()                                      */
#define OS_CFG_FLAG_MODE_CLR_EN         0u   /*     Include code for Wait on Clear EVENT FLAGS                        */
#define OS_CFG_FLAG_PEND_ABORT_EN       0u   /*     Include code for OSFlagPendAbort()                                */




                                             /* -------------------------- MEMORY MANAGEMENT ------------------------ */
#define OS_CFG_MEM_EN                   0u   /* Enable (1) or Disable (0) code generation for MEMORY MANAGER          */




                                             /* --------------------- MUTUAL EXCLUSION SEMAPHORES ------------------- */
#define OS_CFG_MUTEX_EN                 0u   /* Enable (1) or Disable (0) code generation for MUTEX                   */
#define OS_CFG_MUTEX_DEL_EN             0u   /*     Include code for OSMutexDel()                                     */
#define OS_CFG_MUTEX_PEND_ABORT_EN      0u   /*     Include code for OSMutexPendAbort()                               */




                                             /* --------------------------- MESSAGE QUEUES -------------------------- */
#define OS_CFG_Q_EN                     0u   /* Enable (1) or Disable (0) code generation for QUEUES                  */
#define OS_CFG_Q_DEL_EN                 0u   /*     Include code for OSQDel()                                         */
#define OS_CFG_Q_FLUSH_EN               0u   /*     Include code for OSQFlush()                                       */
#define OS_CFG_Q_PEND_ABORT_EN          0u   /*     Include code for OSQPendAbort()                                   */




                                             /* ----------------------------- SEMAPHORES ---------------------------- */
#define OS_CFG_SEM_EN                   1u   /* Enable (1) or Disable (0) code generation for SEMAPHORES              */
#define OS_CFG_SEM_DEL_EN               1u   /*    Include code for OSSemDel()                                        */
#define OS_CFG_SEM_PEND_ABORT_EN        1u   /*    Include code for OSSemPendAbort()                                  */
#define OS_CFG_SEM_SET_EN               1u   /*    Include code for OSSemSet()                                        */




                                             /* -------------------------- TASK MANAGEMENT -------------------------- */
#define OS_CFG_STAT_TASK_EN             0u   /* Enable (1) or Disable(0) the statistics task                          */
#define OS_CFG_STAT_TASK_STK_CHK_EN     0u   /* Check task stacks from statistic task                                 */


#define OS_CFG_TASK_CHANGE_PRIO_EN      0u   /* Include code for OSTaskChangePrio()                                   */
#define OS_CFG_TASK_DEL_EN              0u   /* Include code for OSTaskDel()                                          */
#define OS_CFG_TASK_Q_EN                0u   /* Include code for OSTaskQXXXX()                                        */
#define OS_CFG_TASK_Q_PEND_ABORT_EN     0u   /* Include code for OSTaskQPendAbort()                                   */
#define OS_CFG_TASK_PROFILE_EN          1u   /* Include variables in OS_TCB for profiling                             */
#define OS_CFG_TASK_REG_TBL_SIZE        1u   /* Number of task specific registers                                     */
#define OS_CFG_TASK_SEM_PEND_ABORT_EN   0u   /* Include code for OSTaskSemPendAbort()                                 */
#define OS_CFG_TASK_SUSPEND_EN          1u   /* Include code for OSTaskSuspend() and OSTaskResume()                   */




                                             /* -------------------------- TIME MANAGEMENT -------------------------- */
#define OS_CFG_TIME_DLY_HMSM_EN         1u   /*     Include code for OSTimeDlyHMSM()                                  */
#define OS_CFG_TIME_DLY_RESUME_EN       1u   /*     Include code for OSTimeDlyResume()                                */




                                             /* ------------------------- TIMER MANAGEMENT -------------------------- */
#define OS_CFG_TMR_EN                   0u   /* Enable (1) or Disable (0) code generation for TIMERS                  */
#define OS_CFG_TMR_DEL_EN               0u   /* Enable (1) or Disable (0) code generation for OSTmrDel()              */

代码编译后规模如下




转载于:https://www.cnblogs.com/siahekai/p/5840328.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!感谢您的提问。要在STM32F103C8T6移植uC/OS-II操作系统,您可以按照以下步骤进行操作: 1. 准备工作: - 下载uC/OS-II源代码,并将其加入您的工程中。您可以从Micrium官方网站获取源代码。 - 确保您已经熟悉STM32F103C8T6的硬件配置,并且已经完成了基本的初始化工作。 2. 配置uC/OS-II: - 打开uC-CPU目录下的"cpu_cfg.h"文件,根据您的硬件平台配置相关选项,如时钟频率、堆栈大小等。 - 打开OS_CFG目录下的"os_cfg.h"文件,配置uC/OS-II的一些参数,如任务数量、时钟节拍等。 3. 硬件驱动支持: - 根据您的需求,编写或添加适当的设备驱动程序。 - 确保uC/OS-II能够与硬件平台协同工作,例如定时器、中断等。 4. 创建任务: - 在main函数中使用OSTaskCreate函数创建您的任务。您可以根据自己的需求创建多个任务。 - 每个任务都应该有一个入口函数,您可以在这里编写任务的逻辑。 5. 启动uC/OS-II: - 在main函数中调用OSStart函数启动uC/OS-II内核。这会启动任务调度器并开始执行任务。 这些是移植uC/OS-II到STM32F103C8T6的基本步骤。请注意,移植过程可能会因为您的具体需求和硬件平台的差异而有所不同。为了成功移植,您可能需要进一步了解uC/OS-II的使用文档和STM32F103C8T6的技术参考手册。 希望这些信息对您有所帮助!如有任何疑问,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值