stm32f103c8t6移植uCOS Ⅲ出现Error: L6407W,解决方法:内核配置以减小代码规模
筆者在移植uCOS Ⅲ到stm32f103c8時(shí)碰到如下問(wèn)題
Error: L6407W: Sections of aggregate size 0x6c48 bytes could not fit into .ANY selector(s).初步推定應(yīng)該是內(nèi)核服務(wù)沒(méi)有配置導(dǎo)致,在別人提示下查看了以前stm32f103vet6移植編譯成功的ucos Ⅲ工程MAP文件。
如下:
考慮到stm32f103c8不用這么多服務(wù),因此擬對(duì)內(nèi)核服務(wù)做出裁剪。
事后驗(yàn)證,事實(shí)上不用刪除uCOS-III\Source下對(duì)應(yīng)服務(wù)的C語(yǔ)言文件,只需找到os_cfg.h文件,對(duì)其中不用的服務(wù)進(jìn)行置0操作,MEMORY MANAGEMENT 占用內(nèi)存較多,而且f103c8不需要內(nèi)存管理,首先可將其服務(wù)置零,然后編譯發(fā)現(xiàn)已經(jīng)可以編譯通過(guò),代碼量差不多是27KB左右,后又對(duì)其他不用服務(wù)進(jìn)行了相同操作。最終可將代碼量控制在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() ? ? ? ? ? ? ?*/
代碼編譯后規(guī)模如下
轉(zhuǎn)載于:https://www.cnblogs.com/siahekai/p/11000826.html
總結(jié)
以上是生活随笔為你收集整理的stm32f103c8t6移植uCOS Ⅲ出现Error: L6407W,解决方法:内核配置以减小代码规模的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第二章读书笔记
- 下一篇: Android之Handler探索