stm32编译器(stm32 编程)

STM32能用GCc吗

gcc只是编译器,stm32只是芯片

可以用gcc编译你的程序,产生的二进制文件烧入stm32

stm32 用什么编译器好

应该IAR好很多。

同样的ucosII本家的移植代码Micrium-ST-uCOS-II-LCD-STM32,

用里面自带的keil工程和IAR工程编译,

都设置为最大尺寸优化,

keil的编译结果:

Program Size: Code=27562 RO-data=4870 RW-data=196 ZI-data=9240

FLASF占用:Code+RO-data+RW-data = 27562 +4870 +196 = 32628字节

RAM占用:RW-data+ZI-data = 196 + 9240 = 9436字节

IAR的编译结果:

13 730 bytes of readonly code memory

5 618 bytes of readonly data memory

8 636 bytes of readwrite data memory

FLASF占用:13 730 + 5 618 = 19348字节

RAM占用:8 636字节

KEIL比IAR占用FLASH多:32628- 19348 = 13280字节

stm32编译前为什么要配置keil中C/C++中的define 和include Paths?

这是Keil与编译器的一个相互通信的过程,准确的来说,是编译器读取Keil的配置

ARM系列的有一些公司的库编译器,是与Keil的一些配置通信的.

比如你说的那个

Define,include

path

一般来说,我们用Keil做51或者STR710等等一些单片机的程序时候,不需要配置刚才的两个选项,为什么?

因为C51和ARM7的编译器不去读取上述的配置.

而Cortex-M3编译器,则读取上述的配置,并转换成自己的内编译器配置

比如:你在Define里面写:THIS_MY_DEF

那么,编译器在编译的时候,文件里会隐性的定义出这么一句:

#define

THIS_MY_DEF

通常,我们写Define里,都写USE_STDPERIPH_DRIVER,STM32F10X_HD这两个

然后,编译的时候,文件里会隐性定义

#define

USE_STDPERIPH_DRIVER

#define

STM32F10X_HD

而这两个宏,决定了STM32的库函数的一些配置.

如果你把那个Define文本框空闲出来,那么,编译器找不到任何配置信息,自然就出错.

如果你一定要把Define文本框空闲,那么,你就要在Stm32F10x.h等多个文件里手工添加

#define

USE_STDPERIPH_DRIVER

#define

STM32F10X_HD

过程比较繁琐,如果一旦换了芯片,整个的工程就有多处要修改,

工作量太大,且容易出错

,就不如在配置的时候操作一次那么简便

kiel tutinstm32文件能编译吗

可以。

STM32是ARM7核,而KEIL是ARM旗下的,KEIL只是一个开发环境,支持什_还需要下载相应的编译器,你原来如果是学51的,肯定有C51编译器,但是你需要去官网下载KEIL MDK就是所说的RVMDK,就是ARM的编译器,包含STM32,然後安装,然後看着教程打开KEIL选择相应的芯片来建立工程就行了,不过需要破解。

一般在STM32工程使用Keil编译之后,keil的build output窗口中会出现如图所示的输出信息,其中会显示code_笮。_O-data、RW-data、ZI-data大小。ARM程序的组成(ARM系统中正在执行的程序,而非保存在ROM中的BIN映像文件,请注意区别):一个ARM程序包含3个部分:RO,RW和ZI,RO是程序中的指令和常量;RW是程序中已经初始化的变量;ZI是程序中未经初始化的变量;以上3点可以理解为:RO就是readonly,RW就是read/write,ZI就是zeroARM映像文件的组成:所谓的ARM映像文件就是烧录到ROM中的BIN文件,也称为Image文件,以下用Image文件来替代。Image文件包含了RO和RW数据,之所以Image文件不包含ZI数据,那是因为ZI数据都是0,没必要包含,运行之前将ZI数据数据所在的区域清零即可,包含进去反而浪费存储空间补充一个问题:Q:为什么Image必须O,RW?A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样无中生有的。

361知讯网

本文链接:http://pdidw.com/keil/19730.html

发表评论

评论列表

还没有评论,快来说点什么吧~