前言

什么是C语言?C语言是一种通用的、面向过程的计算机编程语言。它于1972年由丹尼斯·里奇在贝尔实验室为开发UNIX操作系统而设计。C不只支持UNIX,C语言是一种通用(广泛可用)的编程语言,在编程领域中,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域,同时,C语言的通用性强,应用广泛,目前绝大多数嵌入式单片机(MCU微控制器)软件开发都会使用C语言进行开发,且效率显著。
在这里插入图片描述

什么是面向过程?面向过程就是一种编程思想,它关注的是“做什么事的步骤”,也就是一步一步完成任务的过程,编程人员就是用C语言就是把这个过程描述给计算机,让计算机按照编程人员的思路进行控制动作。

为什么要学C语言?尽管现在有很多更现代、更高级的编程语言,但C语言仍然在计算机科学和工程中占据着核心地位,C语言允许直接操作内存、指针和硬件,这使它成为系统编程(如操作系统、嵌入式系统)的理想选择,C语言编译后的代码执行效率高,几乎与汇编语言相当,因此常用于对性能要求严格的场合,C语言标准在不同平台上都有实现,可以编写跨平台的代码。

C语言难学吗?C语言给人难以学习的印象,很大程度上源于其“接近硬件”的特性。作为一门底层语言,C语言直接操作内存,管理数据结构,这种高度的灵活性和控制力,在带来强大功能的同时,也要求学习者具备更为严谨的逻辑思维和细致的操作能力。不要只看书,一定要多敲代码!从最简单的代码开始,到各种小练习(计算器、排序等),在集成开发环境(IDE)中亲手调试程序是理解概念的最佳途径。

什么是集成开发环境(IDE)?我们通常将集成开发环境(IDE)定义为将软件开发所需的多种工具集成在一起的应用程序。这些工具通常包括代码编辑器、编译器、调试器、图形用户界面构建器等。IDE旨在提高开发人员的生产力,通过提供统一的界面来处理整个软件开发过程,点击IDE中的“编译”按钮,IDE会自动调用编译器编译代码,并显示编译错误(如果有),如果程序有逻辑错误,我们可以使用IDE内置的调试器设置断点、单步执行、查看变量值等。

以下代码就是经典的C语言示例,在集成开发环境(IDE)窗口打印"Hello,World"字符串。

#include <stdio.h>  // 引入标准输入输出头文件
// main函数是每个C程序的入口点
int main() 
{
    printf("Hello, World!\n"); // 使用printf函数向屏幕输出文本 \n 表示换行
    return 0;// 返回0,表示程序正常结束,退出main函数
}

上述代码在计算机上的Keil uVision5嵌入式系统集成开发环境(IDE)中运行,就能打印如下图所示的结果。
在这里插入图片描述
本系列文章为C语言初学者量身定制的循序渐进学习路线图,将学习过程大致分为五个明确的阶段,并附有每个阶段的核心目标与学习时间,稳扎稳打,从入门到精通。

第一阶段:学习开发环境准备与初体验 (1-2周)。
第二阶段:基础语法与流程控制 (1-2周)。
第三阶段:函数与模块化编程 (2-3周)。
第四阶段:数组、结构体、字符串与指针 (4-5周)。
第五阶段:多文件工程 (1-2周)。

一、C语言代码如何生成计算机可执行文件

我们编写的C语言代码如何能转换成电脑能识别的可执行文件呢?
C语言代码转换为计算机可以运行的机器码的过程分为四个步骤:预处理、编译、汇编和链接。
在这里插入图片描述

1.预处理(Preprocessing)
处理以#开头的指令,例如:#include, #define, #ifdef等。
将头文件的内容插入到源程序中。
展开宏定义。
条件编译。
输出一个纯C语言的代码文件。
比如前面的示例代码,预处理就会把stdio.h头文件的内容放到C文件中


//stdio.h  整个头文件内容替代原来的#include <stdio.h> 
// main函数是每个C程序的入口点
int main() 
{
    printf("Hello, World!\n"); // 使用printf函数向屏幕输出文本 \n 表示换行
    return 0;// 返回0,表示程序正常结束,退出main函数
}

2.编译(Compilation)
将预处理后的C代码转换为汇编代码(Assembly Code),汇编代码是机器代码的文本表示,通过汇编器(Assembler)可以将汇编代码转换成机器代码,每一条汇编指令对应一条机器指令。
编译器会进行词法分析、语法分析、语义分析、中间代码生成和优化等一系列操作。
输出一个汇编语言文件(通常以.s作为扩展名)。

3.汇编(Assembly)
将汇编代码转换为机器代码(Machine Code),即目标文件(Object File)。
目标文件包含了二进制形式的指令和数据,但还不能直接运行。
输出一个目标文件(通常以.o或.obj作为扩展名)。

4.链接(Linking)
将多个目标文件(例如:多个.c文件产生的目标文件)和库文件(例如:C标准库)链接在一起,生成一个可执行文件。
解析目标文件中的符号(函数和变量)引用,将所有的符号定义与引用关联起来。
分配最终的内存地址(包括代码和数据)。
输出一个可执行文件(在Windows下是.exe)。

在单片机嵌入式软件开发中,Keil uVision5集成开发环境就包含了上述转换功能,只是最后链接的文件是单片机中运行的.hex二进制文件,在Keil uVision5中,从C语言代码变成.hex二进制文件的功能,只要按下编译按钮就能实现转换,比较方便而且快速。

下图是用Keil uVision5编译一段简单C语言代码,编译成功后,C语言代码与汇编代码以及.hex二进制机器码的对应关系。
汇编代码及机器码

二、Keil uVision5嵌入式系统集成开发环境(IDE)介绍

为啥要使用集成开发环境(IDE)学习C语言?使用集成开发环境(IDE)可以极大地提高学习效率和编程体验,IDE将编写代码、编译、调试和运行程序的功能集成在一个环境中,无需在多个工具之间切换,IDE通常提供语法高亮、错误提示等功能,帮助初学者避免语法错误,并快速学习语言结构。
IDE具有两个强大的功能:编译与调试。
编译
IDE自动调用编译器和链接器,只需一键即可完成编译过程,直接从C文件生成.hex二进制文件,避免了手动输入复杂的编译命令。
调试
调试是学习编程的重要部分。IDE集成了调试器,可以设置断点、单步执行、查看变量和内存等,实时观察每个变量的变化,帮助理解程序运行过程和排查错误。

Keil uVision5(简称Keil5)是一款集成开发环境(IDE),由Keil公司专为嵌入式系统开发者所设计,Keil5提供了包括C编译器、汇编器、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision5)将这些部分组合在一起。Keil uVision5的仿真调试功能是其核心价值之一,尤其对于嵌入式开发来说至关重要。它允许你在没有实际硬件的情况下,在电脑上模拟运行微控制器程序,所以Keil uVision5对于将来需要从事嵌入式开发的同学来说,用来学习C语言最合适。

在这里插入图片描述

Keil5提供了代码编辑、编译、调试和仿真的一体化环境,方便初学者在一个工具中完成所有开发步骤。
它拥有强大的学习辅助功能,有可视化调试器,调试功能包括:
✅ 实时变量观察
✅ 内存查看器
✅ 寄存器监视
✅ 外设状态显示
在这里插入图片描述

提供了一系列调试操作按钮:
✅ 运行(Run):全速运行程序,直到遇到断点。
✅ 停止(Stop):停止全速运行。
✅ 单步跳过(Step Over):执行下一行代码,如果当前行是函数调用,则将该函数作为一个整体执行,不会进入函数内部。
✅ 单步进入(Step Into):执行下一行代码,如果当前行是函数调用,则进入该函数内部。
✅ 单步跳出(Step Out):从当前函数中跳出,回到调用该函数的地方。
✅ 运行到光标处(Run to Cursor):运行程序直到光标所在的行。

在这里插入图片描述

三、Keil uVision5集成开发环境安装

  1. 双击安装包图标进行安装,如图所示。
    在这里插入图片描述

  2. 进入安装界面——点击Next(下一步)。
    在这里插入图片描述

  3. 选择安装路径(建议选择默认C盘路径,不然有时候会出现编译不通过的问题)——点击Next(下一步)。
    在这里插入图片描述

  4. 去掉下图方框中的勾,安装完成——点击Finish(完成)。
    在这里插入图片描述

  5. 安装完之后,双击桌面上的Keil uVision5图标,就可以打开软件。

    在这里插入图片描述

  6. 打开软件,点击菜单栏的File->License Management可以看到默认是免费评估版本的License如图所示,Keil5的免费评估版(Evalution Version),支持32KB代码容量,超过这个代码容量就得安装正版的License。在这里插入图片描述
    在这里插入图片描述
    经过以上步骤,Keil uVision5集成开发环境就已经安装好了,可以开始后续C语言的学习开发了。

总结

C语言像是汽车的驾驶理论和技术原理,集成开发环境像是一个功能齐全的汽车维修厂与驾驶模拟器。你可以只学理论,但如果没有实践环境,你永远不知道车坏了该怎么修,也无法真正驾驭它。所以后续的文章中不止会介绍C语言理论,同时也会介绍Keil5相应的调试过程,理论结合实践,循序渐进。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐