news 2026/5/26 19:41:01

嵌入式c语言开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式c语言开发

1.开发前预备知识

主要使用的编辑器为GCC编辑器(广泛使用与支持多平台 开源与自由软件 强大功能高效优化 标准化与一致性 工具链集成),下载地址为Releases · niXman/mingw-builds-binaries

1.1gcc编译流程

预处理:预处理器(如cpp)会处理源代码中的宏定义、文件包含(#include)、条件编译等指令,将它们展开,并生成一个纯粹的C语言代码.i文件。

编译:编译器将经过预处理的源代码转换成汇编语言代码为.s文件。这个阶段主要是语法分析、语义分析和生成汇编代码。此时,编译器会检查语法错误、类型错误等,但它通常不会检查是否有未定义的函数。只要函数已被声明或者其定义可以在某个地方找到,编译器就会继续生成目标代码。

汇编:汇编器将汇编代码转换为机器代码,也就是目标文件(.o或者.obj)文件。

链接:链接器将目标文件和库文件连接,生成最终的可执行.exe文件。链接阶段是发生未定义函数错误的阶段。如果存在函数的调用,但是没有对应的函数定义(或者在链接的文件中找不到定义),链接器会报告一个“未定义引用”错误。这时,编译器才能检测出是否有未定义的函数。

C语言并不完全依赖于平台,主要是因为它具有良好的可移植性。可移植性指的是,C语言编写的程序可以在不同的平台上编译并运行,只需要进行一些小的调整或重新编译,而不需要对整个程序做出大的修改。C语言支持结构化编程,强调程序逻辑的清晰、模块化和易维护。它不强制使用面向对象编程(OOP),而是通过函数和控制结构来组织代码。C语言的类型系统是强类型的,要求在变量使用之前必须明确声明类型,保证程序的类型安全。C语言是高效的,确定的,且能直接对内存进行访问。

2.IDE (Integrated Development Environment)是用于程序开发的软件,一般包括代码编辑器、编

译器、调试器和图形用户界面工具。IDE为用户使用C、Java、ASP、PHP等编程语言提供了方便。

3.main()函数

每个C语言程序不管有多少行代码,都是从main()函数开始执行的,main()函数是程
序的入口,main 函数也被叫做主函数。
●main()函数是程序的入口
●main()函数有且仅有一个

在C语言中,main()函数的返回值int通常用于表示程序的执行状态。返回值为0表示程序成功执行,返回其他值通常表示程序发生错误。main()函数的返回值会传递给操作系统,作为程序退出的状态码。
在 C99 标准中,只有以下两种定义方式是正确的:
int main( void ) /* 无参数形式 */
{
...
return 0;
}
int main( int argc, charargv[] ) /带参数形式 */
{
...
return 0;
}

5.头文件

头文件通常包含函数声明、宏定义、结构体定义等,避免代码重复,并提供对标准库函数的访问。它不会直接提高程序的执行效率。源代码文件通过#include指令来包含头文件。在使用#include时,也可以指定头文件的路径。头文件可以包含变量声明,但应谨慎使用。

.c文件:

名称:源文件(Source file)。

作用:.c文件包含程序的主要实现代码,是程序的源代码文件。

.h文件:

名称:头文件(Header file)。

作用:.h文件通常包含函数的声明(即函数原型)、宏定义、结构体定义、全局变量声明以及其

他需要在多个源文件中共享的内容。

为什么需要头文件 硬件和计算资源限制 操作系统工具链设计特点 模块化开发和增量编译

代码重用 避免重复定义 提供抽象和封装

同时使用#ifdef和#endif可以避免多次包含同一头文件。常见的做法是在头文件的开头加上条件编译指令。

如果自己定义的头文件,例如使用#include "header.h"时,预处理器会从当前源文件所在的目录开始查找头文件。如果文件存在且没有问题,头文件的内容会被插入到源代码中。这不会导致头文件被忽略。因此,这个选项不会导致头文件被忽略。在C语言中,虽然头文件通常使用.h扩展名,但头文件的扩展名并不直接影响编译器是否能处理它。只要文件内容符合头文件规范(如包含声明、宏等),编译器可以处理该文件。使用其他扩展名(如.hpp、.inc等)不会导致头文件被忽略。

6.多文件编译

1. 编译并链接所有 .c 文件到一个可执行文件

如果你有多个 .c 文件,比如 file1.c 和 file2.c,你可以使用以下命令编译并链接它们到一个可执行文件 program.exe:

gcc file1.c file2.c -o program.exe

这里,gcc 会自动将所有列出的 .c 文件编译成目标文件(.o 文件),然后将这些目标文件链接成一个可执行文件 program。

2. 单独编译成目标文件,然后链接

你也可以先编译每个 .c 文件生成目标文件(.o 文件),然后再将这些目标文件链接成一个可执行文件。这样做可以更方便地

在多个文件间进行增量编译。

首先编译每个 .c 文件:

gcc -c file1.c -o file1.o

gcc -c file2.c -o file2.o

然后将所有目标文件链接成一个可执行文件:

gcc file1.o file2.o -o program.exe

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 19:40:23

GNN与强化学习融合:构建动态个性化推荐系统的核心技术解析

1. 项目概述:当图神经网络遇上强化学习在电商、新闻流、短视频这些我们每天都会接触的平台背后,推荐系统是那个“看不见的手”,它决定了我们下一秒会看到什么。从业这么多年,我见过太多推荐系统从早期的“千人一面”到后来的“千人…

作者头像 李华
网站建设 2026/5/26 19:39:20

OpenAvatarChat深度解析:如何用模块化架构打造你的专属AI数字人

OpenAvatarChat深度解析:如何用模块化架构打造你的专属AI数字人 【免费下载链接】OpenAvatarChat 项目地址: https://gitcode.com/gh_mirrors/op/OpenAvatarChat OpenAvatarChat是一个革命性的开源项目,它彻底改变了数字人对话系统的构建方式。作…

作者头像 李华
网站建设 2026/5/26 19:37:31

PVC上压环加工非标件定制| PVC环件加工的变形控制

从图纸看,这是一个大直径薄壁环形件,外径 Φ347 mm,内径 Φ301 mm,环宽约 23 mm,截面高度约 7.2 mm(含台阶)。外圆周均布 12 个扇贝形凸耳,每个凸耳上有安装孔:正面 12Φ…

作者头像 李华