我在SCB論壇上問過這個問題,但沒有回答 我試圖從uVision ide將一些項目移植到SCB。 問題始於向量表的實現。對於examle,我有簡單的C++代碼Sourcery CodeBench ARM Cortex-M矢量表實現
#define STACK_TOP 0x20000800
typedef void (*handler_ptr)();
void ResetHandler() { while (1); }
void NMIHandler() { while (1); }
void HardFaultHandler() { while (1); }
__attribute__ ((section("vectors"))) handler_ptr const vector_table[] = {
(handler_ptr) STACK_TOP,
ResetHandler,
NMIHandler,
HardFaultHandler,
};
此代碼不能編譯,因爲SCB圖書館尋找「INT主要(無效)」的宣言。 好的,我可以添加這個函數,但是然後SCB忽略我的向量表實現並使用它自己的(如果我調用函數VT中的哪個地址,我會看到SCB僞處理程序)。
我該如何重寫我的SCB VT實現? 請不要使用特殊的SC3函數名稱(用2個IDE支持不好)或將矢量表移動到另一個內存位置。
__attribute__ ((section(".isr_vector"))) void (* const g_pfnVectors[])(void)
從Luminary Micro的 「startup_gcc.c - 使用的啓動代碼與GNU工具」 也沒有效果
謝謝。
伊戈爾,謝謝。你是對的。最好的解決方案是爲每個編譯器分別創建一個頭文件。我在鏈接器文件 - 「.cs3.interrupt_vector」中找到正確的節名稱,但鏈接器在SCB生成後放置我的矢量聲明。 – 2012-03-27 07:27:29
我設法得到一個C++項目,與Keil ARM 6.6和Cortex M7的GCC 6相同的「vectors.c/h」文件。由於Keil編譯器(通過uVision調用 - 需要專用的rant)具有預定義的部分(例如RESET),因此我更改了GCC鏈接器腳本以匹配。更難的部分是設置堆棧是一樣的。沒有完全排除。 – Flip 2017-01-19 08:06:04