C语言基础开发入门系列(二)创建C语言工程以及main文件
C语言基础开发入门,在Keil5的软件下,手把手创建C语言代码工程,创建main.c文件,拷贝printf打印代码到main.c文件,实现字符串hello world的打印。
前言
C语言的学习一般都是从单文件工程起步,掌握基础语法后逐步引入多文件项目。所以工程的创建以及main.c文件的创建就是学习C语言的第一步,这个章节就介绍下使用Keil uVision5嵌入式系统集成开发环境创建C语言工程,由于C语言基础开发入门系列文章只是介绍使用C语言编程,所以不需要真实的单片机硬件连接,调试就采用模拟仿真方式,不需要与硬件下载器连接。
在Keil5开发环境软件下开始学习C语言还需要两步,1:创建C语言工程 2:添加main.c文件,有了这两步,就可以进行C语言的代码编写与调试了。
这里的C语言工程就是用Keil5创建的代码工程,里面包含了系统文件,启动文件,库文件,编译调试界面等,我们常说的编译与调试就是对创建的代码工程进行编译与调试。
一、手把手创建Keil5的C语言代码工程
双击Keil5图标,打开Keil5软件。
打开软件之后,如下图所示,创建一个新的工程。
保存工程名,名字最好采用英文。
选择内核,选择ARMCM3,就是Cortex M3核,主流的单片机是这个内核。
选择系统文件,选择CMSIS->CORE,同时选择Device->Startup。
系统文件选择好后,左边窗口就会有显示。
如下图所示,添加微库功能,这样Keil5就可以包含malloc内存分配、printf调试输出等常用功能。
如下图所示,选择Use Simulator,用于在无硬件环境下模拟嵌入式程序运行,帮助开发者调试代码逻辑。
经过以上步骤,Keil5的C语言工程就创建好了,就可以用过添加main.c文件,进行C语言学习与调试了。
二、创建main.c文件
新的C语言代码工程创建好之后,就可以添加main.c文件了。
如下图所示,创建新的main.c文件。
如下图所示,我们拷贝原先写好的代码段到main.c。
代码段如下:
#include <stdio.h>//系统输入输出头文件
#define ITM_PORT8(n) (*(volatile unsigned char *)(0xe0000000 + 4*(n)))//printf函数需要
int fputc(int ch, FILE *f)//定义字符输出的文件操作函数printf函数
{
ITM_PORT8(0) = ch;
return ch;
}
int main(void)
{
printf("Hello, World!\n");//在调试窗口打印"Hello,World"字符串
return 0;
}
拷贝原先写好的代码段到main.c,并保存。
如下图所示,保存main.c到工程目录下。
如下图所示,工程中添加main.c,这样编译的时候,就会把main.c加载进去了。
如下图所示,选择main.c添加到工程。
如下图所示,main.c添加到工程成功。
main函数详解
C语言中的main函数是程序的唯一入口点,程序执行总是从这里开始,最终也在这里结束。所以我们通常查看C语言的代码,首先就是找到main函数,main函数大括号里面就是顺序执行的代码。
int main(void)
{
return 0;
}
上面就是main函数的写法,int意思是返回数据类型是整数,也可以是void。void是一个特殊的关键字,意思为"无"或"空。圆括号里的void代码表示该函数不需要任何参数。
main函数里的大括号代表大括号内的所有代码都属于该函数,每个开括号 { 必须有对应的闭括号 }。
return 0,代表程序执行完毕,跳出main函数,并返回数值0。
三、调试C语言代码工程查看结果
main.c文件添加好之后,就是编译调试了。
如下图所示,编译代码工程,编译成功,没有错误。如果有错误,需要排查错误原因,否则不能进行下一步的调试。
如下图所示,点击按钮,就可以进入仿真调试界面。
如下图所示,进入调试界面,程序光标会自动运行到main函数处,光标在哪一行,就说明程序运行到哪一步。
如下图所示,查看printf打印界面。
下图就是printf打印界面。
如下图所示,调试运行,查看运行结果。
代码链接下载:
C语言基础开发入门系列所有代码链接
四、STM32单片机工程的main文件
我们STM32单片机工程的实际main文件以及main函数如下:
main.c文件,一般也都会包含驱动相关的头文件。
总结
工预先善其事必先利其器,磨刀不误砍柴工,所以经过上述Keil5的C语言代码工程以及main文件的创建添加,就可以边学习理论,边调试验证理论结果,大大提高效率,接下去就可以学习C理论知识并调试验证结果了。
更多推荐



所有评论(0)