嵌入式C语言--gcc

目录

一、c语言书籍我推荐

二、gcc概述

三、gcc常用命令

四、C语言编译过程

五、常见错误

1.预处理错误

2.编译错误 

3.链接错误

六、预处理的运用


一、c语言书籍我推荐

        《C语言深度解剖》、《C专家编程》、《程序员面试宝典》和《C和指针》。

二、gcc概述

        原名GNU C Compiler,C语言翻译官(C语言翻译成机器语言)。

三、gcc常用命令

命令注释
gcc -v查看gcc版本

gcc -o 输出文件名  输入文件名

gcc 输入文件名  -o 输出文件名

模糊化命令,根据文件名后缀判断调用不同命令(-o 后面一定跟的是output文件)。加上-v后卡查看gcc调用的具体工具。输入文件为.o时,就是链接过程
gcc -S -o 输出文件名.s  输入文件名.c

编译

gcc -c -o 输出文件名.o  输入文件名.s汇编
gcc -E -o 输出文件名.i  输入文件名.c预处理
gcc -I  查找头文件的目录头文件路径
gcc -D 宏名自动在源文件中添加宏

 

四、C语言编译过程

预处理:处理宏定义、文件包含、条件编译和注释,生成预处理后的代码。

gcc -E

编译:将预处理后的代码编译为汇编代码。

gcc -S

汇编:将汇编代码转换为目标文件(机器代码)。

gcc -c

链接:将多个目标文件和库文件链接为最终的可执行文件或库文件。

gcc -o

五、常见错误

1.预处理错误

        #include “name”:双引号常用于当前文件路径下寻找(常用于自定义库)。

        #include <name>:首先在系统默认的标准库目录中查找头文件,然后根据编译器配置的路径(常用于系统库)。

no find

2.编译错误 

  ; { }等

3.链接错误

原材料不够 。

undefine reference to ‘function’

原材料多了。

multiple definition of “fun”

六、预处理的运用

#include                包含头文件

#define                  宏        替换,不进行语法检查

        #define 宏名  宏体        注意养成习惯加括号。

        #define    ABC         5+3

        printf("the %d \n", ABC * 5);        //5+3 * 5

        #define    ABC         (5+3)

        #define    ABC(x)      (5+(x))

#ifdef #else #endif

预定义宏:系统库中实现

__FUNCTION__:函数名

__LINE__:行号

__FILE__:文件名

printf("the %s, %s, %d", __FUNCTION__, __FILE__, __LINE__);

# 字符串化

#define ABC(x)        #x                  //"x"

## 连接符

#define ABC(x)        ABC##x         //ABCx

 

嵌入式C语言是针对特定硬件平台和系统进行编程的一种版本,主要用于控制和管理微控制器、嵌入式设备以及实时系统的程序设计。学习嵌入式C语言通常包括以下几个步骤: 1. **基础C语言学习**:首先了解C语言的基本语法、数据类型、控制结构等基础知识,这是所有嵌入式开发的基础。 2. **目标平台理解**:你需要熟悉你将要使用的嵌入式处理器架构(如ARM, AVR, PIC等),操作系统(如RTOS如FreeRTOS, Linux Lite等)或板级支持包(Boardsupport Package, BSP)。 3. **内存管理和资源限制**:嵌入式环境内存资源有限,因此理解如何高效利用栈、堆和Flash存储,以及优化代码以减少存储和功耗至关重要。 4. **I/O操作**:嵌入式设备通常直接操作GPIO、中断、串口、USB等接口,学会编写驱动程序和处理这些输入输出操作。 5. **中断处理**:由于硬件响应速度较快,理解和熟练中断处理机制是嵌入式编程的关键部分。 6. **汇编语言基础**:虽然不是必需的,但了解一些汇编语言可以帮助理解底层工作原理,并优化性能。 7. **工具链使用**:掌握编译器(如Keil MDK, GCC, IAR等)、调试器(JLink, ST-Link等)以及版本控制系统(如Git)的使用。 8. **实践项目**:动手做些小项目,比如LED灯控制、温度传感器读取、简单的通信协议实现等,有助于巩固理论知识并提高实际能力。 **相关问题--:** 1. 嵌入式C语言的主要应用领域有哪些? 2. 如何在嵌入式环境中有效地管理内存? 3. 学习嵌入式C时遇到困难,常见的解决方法有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值