Keil和IAR——使用笔记

1. 几个宏的定义

Keil和IAR均用到以下三种宏定义,分别是:
USE_STDPERIPH_DRIVER——表示使用ST提供的标准外设固件库;
STM32F40_41xxx——作为芯片的判断;
VECT_TAB_SRAM——中断向量表定位在CPU内部RAM;

2.批处理文件*.bat的使用
CopyHex_Flash.bat内容为:copy FlashObjoutput.hex ..out(mdk).hex
工程文件project.uvproj或者project.eww所在的路径是批处理文件中路径的依据。

3.调试模式
STM32仅支持SWD模式;

4.printf打印函数的使用
Keil中,在Options的Target页面,选中"Use MicroLIB";
IAR中,在OptionsGeneral OptionsLibrary 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所涉及的头文件,其路径为LibrariesCMSISInclude;
而在OptionsC_C++ CompilerPreprocessor页面内,已经填写了$PROJ_DIR$....LibrariesCMSISInclude;
因此为避免重复,这里就不需要再选中“Use CMSIS";

6. 生成Map文件
OptionsLinkerList页面的"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. 的

注:转载请注明出处http://www.cnblogs.com/zaishuiyifang006 人生如棋,我愿为卒,行动虽缓,可谁见我后退一步。
原文地址:https://www.cnblogs.com/zaishuiyifang006/p/5323556.html