1. 幾個宏的定義
Keil和IAR均用到以下三種宏定義,分別是:
USE_STDPERIPH_DRIVER——表示使用ST提供的標准外設固件庫;
STM32F40_41xxx——作為芯片的判斷;
VECT_TAB_SRAM——中斷向量表定位在CPU內部RAM;
2.批處理文件*.bat的使用
CopyHex_Flash.bat內容為:copy Flash\Obj\output.hex ..\out(mdk).hex
工程文件project.uvproj或者project.eww所在的路徑是批處理文件中路徑的依據。
3.調試模式
STM32僅支持SWD模式;
4.printf打印函數的使用
Keil中,在Options的Target頁面,選中"Use MicroLIB";
IAR中,在Options\General Options\Library Configuation的Library里,選擇"Full";
原因是:
我又從手冊上找到了以下描述:
“在IAR中所有的輸入/輸出函數僅調用一個小型初等函數,一個函數集完成一個規定的任務。例如,__open函數用於打開文件,__write函數用於字符輸出等。
注意:僅當運行庫配置為full時才能支持文件輸入\輸出功能,即只有允許了配置符號__DLIB_FILE_DESCRIPTOR時運行庫才支持文件輸入\輸出功能操作,否則不能使用帶有“FILE *”參數的函數。
如果連接庫時采用XLINK選項With I/O emulation modules,將自動鏈接C-SPY調試器中底層I/O函數以便實現交互調試。”
鏈接:http://www.amobbs.com/archiver/tid-3215678.html
5.IAR中"Use CMSIS"選項
選中"Use CMSIS"表示包含DSP_Lib所涉及的頭文件,其路徑為\Libraries\CMSIS\Include;
而在Options\C_C++ Compiler\Preprocessor頁面內,已經填寫了$PROJ_DIR$\..\..\Libraries\CMSIS\Include;
因此為避免重復,這里就不需要再選中“Use CMSIS";
6. 生成Map文件
Options\Linker\List頁面的"Generate linker mpa file";表示生成map文件,方便查看
ROM,RAM占用大小;函數和變量定位位置,函數大小等信息;
7. 在IAR的Options中修改堆和棧大小
project---options---Linker---Config---Edit,修改CSTACK/HEAP的值;
8. Error[Li006]: duplicate definitions for "PendSV_Handler"
這個函數在多個地方定義了。
解決方法:
屏蔽其中一個地方即可;
9. 在A.c中定義的變量,若想在B.c中使用;
步驟一:
在A.c中定義該變量,可賦初始值;
u8 flag1ms = 0;
u8 flag4ms = 0;
u8 error = 0;
步驟二:
extern u8 flag1ms;
extern u8 flag4ms;
extern u8 error;
10. warning: #1035-D: single-precision operand implicitly converted to double-precision
此警告來源於沒有在浮點數后加f,例如應使用0.123f,而不是0.123。
11. #define Conn(x,y) x##y
x##y表示x連接y,舉例說明:
int n = Conn(123,456); 結果就是n = 123456;
char* str = Conn("abc","def"); 結果就是 str = "abcdef";
#define ToString(x) #x
#x就是給x加上雙引號,舉例說明:
char* str = ToString(1234); 結果是 str = "1234";
12. 的