打印
[KungFu32位 MCU]

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

[复制链接]
997|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhamatu|  楼主 | 2020-7-25 22:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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 编译器中的整型范围如下:



使用特权

评论回复
5
zhamatu|  楼主 | 2020-7-25 23:01 | 只看该作者
默认字节 char 变量的符号说明
默认情况下,不带修饰符的 char 类型的值被 KF32 编译器定义为无符号值。同时,可以使用命令行选项-fsigned-char 将默认类型设置为有符号,-funsigned-char 将默认类型设置为无符号。
浮点类型与长度
KF32 编译器使用 IEEE-754 浮点格式。

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


使用特权

评论回复
6
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 段名,定义无初始化的数据 COMMONbss 段名。
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 未使用也不输出警告信息


使用特权

评论回复
7
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 集成了常规的语言属性,比较常见的修改属性包括添加库或引用路径,是否输出调试信息,编译优化等级等选项。


使用特权

评论回复
8
电子xiaocainiao| | 2020-7-27 22:20 | 只看该作者
没有仔细研究过其他32位的指令,感觉和arm也没什么区别吧。纯新手,单从直觉看,忘大神拍砖。

使用特权

评论回复
9
スモモ| | 2020-8-23 18:50 | 只看该作者
谢谢分享

使用特权

评论回复
10
怎么叫都可以| | 2020-8-23 19:30 | 只看该作者
很详细

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

粉丝