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/11000826.html
總結
以上是生活随笔為你收集整理的stm32f103c8t6移植uCOS Ⅲ出现Error: L6407W,解决方法:内核配置以减小代码规模的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第二章读书笔记
- 下一篇: uva232corssword answ