Keil-MDK 中 [WEAK] 的作用
移植后的代碼戳這里:https://code.csdn.net/KISSMonX/freertos_f3discovery_test
在上一篇文章 ARM 匯編中的 "B ." 語句意義.時(shí), 順帶介紹了 [WEAK] 的作用.
昨天再思考移植問題的時(shí)候(也就是執(zhí)行第一個(gè)任務(wù)時(shí)直接跳到 SVC_Handler 里的 B . 處),
想到了這個(gè)問題, 然后在移植配置文件中添加了幾個(gè)宏定義就解決了問題, 移植成功, 具體下文介紹.
這里再做一次解釋. 看看自己是不是真正的理解了. :)
第一步明顯是要貼代碼裝逼, 去啟動(dòng)文件里摘取出要介紹的部分. 然后記筆記的形式摘錄下來.如下:
;Resethandler這里才是啟動(dòng)文件的重點(diǎn)啊.不過沒見到為C程序建立棧空間操作啊???直接調(diào)用main大丈夫?MAN???
Reset_HandlerPROC
EXPORTReset_Handler[WEAK]
IMPORTSystemInit
IMPORT__main
LDRR0,=SystemInit
BLXR0
LDRR0,=__main
BXR0
ENDP
;DummyExceptionHandlers(infiniteloopswhichcanbemodified)
NMI_HandlerPROC
EXPORTNMI_Handler[WEAK]
B.
ENDP
HardFault_Handler
PROC
EXPORTHardFault_Handler[WEAK]
B.
ENDP
MemManage_Handler
PROC
EXPORTMemManage_Handler[WEAK]
B.
ENDP
BusFault_Handler
PROC
EXPORTBusFault_Handler[WEAK]
B.
ENDP
UsageFault_Handler
PROC
EXPORTUsageFault_Handler[WEAK]
B.
ENDP
SVC_HandlerPROC
EXPORTSVC_Handler[WEAK]
B.
ENDP
DebugMon_Handler
PROC
EXPORTDebugMon_Handler[WEAK]
B.
ENDP
PendSV_HandlerPROC
EXPORTPendSV_Handler[WEAK]
B.
ENDP
SysTick_HandlerPROC
EXPORTSysTick_Handler[WEAK]
B.
ENDP
Default_HandlerPROC
EXPORTWWDG_IRQHandler[WEAK]
EXPORTPVD_IRQHandler[WEAK]
EXPORTTAMPER_STAMP_IRQHandler[WEAK]
EXPORTRTC_WKUP_IRQHandler[WEAK]
EXPORTFLASH_IRQHandler[WEAK]
EXPORT RCC_IRQHandler [WEAK]