Keil和IAR——使用筆記


 

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. 的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM