zhamatu 发表于 2020-7-25 22:55

KF32-c语言-工具链基础知识

本帖最后由 zhamatu 于 2020-8-25 09:59 编辑

1.1 简介
C 编译器(kf32-gcc)对 C 语言模块及库文件进行编译;汇编器(kf32-as)对汇编语言模块及库文件进行汇编;链接器(kf32-ld)对目标文件及库文件进行链接,同时生成 HEX 文件。

zhamatu 发表于 2020-7-25 22:56

1.2 文件命名约定
KF32 编译工具链识别如下文件扩展名:


zhamatu 发表于 2020-7-25 22:57

编译器的字节顺序
KF32 编译器以小端字节序格式存储数据。最低有效字节存储在最低地址。例如,32 位数值 0x12345678 在地址 0x10000000 处开始,按如下格式存储:



zhamatu 发表于 2020-7-25 22:58

整型类型与范围
KF32 编译器中的整型范围如下:



zhamatu 发表于 2020-7-25 23:01

默认字节 char 变量的符号说明
默认情况下,不带修饰符的 char 类型的值被 KF32 编译器定义为无符号值。同时,可以使用命令行选项-fsigned-char 将默认类型设置为有符号,-funsigned-char 将默认类型设置为无符号。
浮点类型与长度
KF32 编译器使用 IEEE-754 浮点格式。

指针类型与长度
KF32 编译器中指针长度为 32 位整数。


zhamatu 发表于 2020-7-25 23:04

1.4 属性
通过属性扩展变量或函数的意义,如中断函数。格式为
__attribute__((attribute-list)) 即支持多个属性,属性之间用“,”间隔。
1.4.1 Interrupt 中断函数
用作中断处理程序的函数生成序言和尾声代码。如:使用__attribute__((interrupt))修饰函数,则该函数即被编译器视为中断函数处理。详情参见中断处理程序。
1.4.2 section (“name”) 指定类型段
将函数或变量放入由“name”指定的段。
例如,void __attribute__((section(“.new_sect1”))) foo(){return;}
函数 foo 将被放入.new_sect1 段。
unsigned int var __attribute__((section(“.new_sect2”)))
变量 var 将被放入.new_sect2 段。
当声明该属性后-ffunction-sections、-fdata-sections 命令行选项对该属性定义的函数不起作用。
常见的段定义为 text (flash 空间), data(RAM 空间)。同时根据需要将空间进行罗列化顺序使用,即针对 flash 空间,先存放 text 段的 vector 文件中代码,也就是中断向量表。接着存放普通的 text 函数代码信息,后面跟常量属性的 rdata 和 rodata 代码信息。针对 ram 空间,设计 ram 函数的存放的定义 indata 段名,定义初始化的数据.data 段名,定义无初始化的数据 COMMON或 bss 段名。
1.4.3 packed 对齐
具有该属性的变量或结构成员将具有所可能的最小对齐值。即,将不为声明分配任何对齐填充存储空间。与 aligned 属性联合使用时, packed 可以用于设置任意的对齐限制,即大于或小于变量或结构成员的类型所具有的默认对齐值。
需要注意的是,即使声明了该对齐模式,但针对结构体、联合体,其起始仍将按照对齐存放。
如 struct name1{
char order1;
struct name2{
char order2;
} __attribute__((packed)) names;
} __attribute__((packed)) name ; 的 order2 偏移地址是 4。

1.4.4 常见属性
变量属性支持
algined(alignment) 定义数据地址对齐配置
unused
定义参数未使用的不给予警告
used
即使看起来未使用,也对其进行编译
packed
一般语言结构体或联合,明确内部连续地址分派。
section(“section-name”)
函数属性支持
section(“section-name”)
noinline 强制函数不内联,定义的 inline 是否内联由编译器决定
always_inline 强制函数内联
weak
常定义中断函数,即 即使未发现调用关系仍保留该函数。
alias(“fun-name”) 函数为别名
unused 未使用也不输出警告信息


zhamatu 发表于 2020-7-25 23:07

1.5 命令行格式
1.5.1 设置环境变量
在使用命令行环境之前,先设置环境变量。
在命令行下输入如下命令添加编译命令至环境变量(以 IDE 默认安装目录为例):
PATH=XXXX;%PATH%
在命令行下输入如下命令关闭 DOS 路径警告信息“MS-DOS style pathdetected”:
set CYGWIN=nodosfilewarning
ChipON IDE 环境自动集成了环境的自动配置。
1.5.2 命令行选项
KF32 编译工具链提供了许多控制编译、链接的选项,区分大小写。



一般情况下,不需要修改属性,ChipON IDE 集成了常规的语言属性,比较常见的修改属性包括添加库或引用路径,是否输出调试信息,编译优化等级等选项。


电子xiaocainiao 发表于 2020-7-27 22:20

没有仔细研究过其他32位的指令,感觉和arm也没什么区别吧。纯新手,单从直觉看,忘大神拍砖。

スモモ 发表于 2020-8-23 18:50

谢谢分享

怎么叫都可以 发表于 2020-8-23 19:30

很详细
页: [1]
查看完整版本: KF32-c语言-工具链基础知识