① IAR 中 defined symbols 有什么用
在这里我们可以进行宏定义,这里宏定义只对当前的节点编译时起作用,有些#ifdef ***,便会执行。
② IAR中多行的宏定义怎么写
这个是编程语言(C语言)语法相关的知识。
IAR系列教程:
http://blog.csdn.net/column/details/13696.html
③ 如何让IAR编译器自动移除库里不用的函数以节省FLASH
需要用avr studio重新建立工程,并进行一些改编才可以仿真,因为编译器不一样,一个是IAR一个是avr-GCC。
具体说来区别主要体现在中断的写法上,还有iar的库里的头文件中有一些位操作的宏gcc的库里并没有。建议你搜索关键字:“AVR IAR GCC 区别”
④ IAR for STM8 的 编译器 对Printf 的格式输出不支持吗
1: 一定一定要在主程序中加入 STDIO.H
2:putchar()要重新定义
3:串口波特率 115200 8 NO 1形式
4: 编译器library 选型中 选择FULL
5:如果实验以上还是不行,还有一个方法就是自己来写printf函数!
以下是网上摘抄的的printf函数,经过测试,完全可以用!
#include "stm8s.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>//itoa()......库中没有
#include <string.h> //memset()
#include <math.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0
//#include <memory.h>
#define MAXBUF 15
#define DEFAULT_PRECI 3 //符点型默认精度
/*
由于不同的编译器 putcha 和 getchar 形参和返回值略有不同。
因此此处采用宏定义的方式区别。
_RAISONANCE_ 和 _COSMIC_ 这2个宏是由编译器自动添加的预编译宏
*/
#ifdef _RAISONANCE_
#define PUTCHAR_PROTOTYPE int putchar (char c)
#define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
#define PUTCHAR_PROTOTYPE char putchar (char c)
#define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */
⑤ iar 中设置stm32f072宏有什么意义
去stm32的.h头文件里看
需要定义哪个就定义哪个
#if
!defined
(STM32F4XX)
&&
!defined
(STM32F40XX)
&&
!defined
(STM32F427X)
/*
#define
STM32F40XX
*/
/*!<
STM32F40xx/41xx
Devices
*/
/*
#define
STM32F427X
*/
/*!<
STM32F427x/437x
Devices*/
#endif
#if
!defined
(USE_STDPERIPH_DRIVER)
/*#define
USE_STDPERIPH_DRIVER
*/
#endif
/*
USE_STDPERIPH_DRIVER
*/
这个是stm32的
stm32f4xx.h文件中的定义项,根据不同的芯片去定义不同的宏就可以了
⑥ 关于使用IAR Embedded Workbench开发时,在头文件中遇到的宏定义看不懂,有哪位大虾帮忙解决一下
ON()是 进入中断,
{uint8_t sreg = SREG; __disable_interrupt()是关闭所有其他中断,保护期间的程序不被打断。
当 ENTER_CRITICAL_REGION() 和 LEAVE_CRITICAL_REGION() 之间的程序完成之后,执行 SREG = sreg;}便可以允许其他中断了。
因为有的程序不能被中断破坏。
⑦ 请教IAR中的一条宏定义语句
第一条语句ENTER_CRITICAL_REGION()是 进入中断,
{uint8_t sreg = SREG; __disable_interrupt()是关闭所有其他中断,保护期间的程序不被打断。
当 ENTER_CRITICAL_REGION() 和 LEAVE_CRITICAL_REGION() 之间的程序完成之后,执行 SREG = sreg;}便可以允许其他中断了。
因为有的程序不能被中断破坏。
⑧ IAR 一直显示 Warning[Pe223]: function "gpio_initial" declared implicitly
这个问题是因为宏USE_STDPERIPH_DRIVER没有打开,Options->C/C++ Compiler的Preprocessor页的Defined symbols中加上USE_STDPERIPH_DRIVER ,就不会再有这个告警、错误。
USE_STDPERIPH_DRIVER又是定义在哪里,干什么用?
USE_STDPERIPH_DRIVER定义在stm32f10x.h中
#if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD)
/* #define STM32F10X_LD */ /*!< STM32 Low density devices */
/* #define STM32F10X_MD */ /*!< STM32 Medium density devices */
#define STM32F10X_HD /*!< STM32 High density devices */
#endif
把这个宏打开,也是解决连接出错的一种方法。
那它到底和assert_param有什么关系呢?我们继续查找这个文件中的USE_STDPERIPH_DRIVER,发现
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
而stm32f10x_conf.h中就定义了assert_param。