stm32中 .c和.h文件是什么关系?

2024-05-16 20:19

1. stm32中 .c和.h文件是什么关系?

本质上没有任何区别。 只不过一般:.h文件是头文件,内含函数声明、宏定义、结构体定义等内容.c文件是程序文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。你可以强制编译器把任何后缀的文件都当作c文件来编。
编译器在编译时是以C文件为单位进行的,也就是说如果你的项目中一个C文件都没有,那么你的项目将无法编译,连接器是以目标文件为单位。
它将一个或多个目标文件进行函数与变量的重定位,生成最终的可执行文件,在PC上的程序开发,一般都有一个main函数,这是各个编译器的约定,当然,你如果自己写连接器脚本的话,可以不用main函数作为程序入口。(main .c文件 目标文件 可执行文件)

扩展资料
main函数为标准C/C++的程序入口,编译器会先找到该函数所在的文件。
假定编译程序编译myproj.c(其中含main())时,发现它include了mylib.h(其中声明了函数voidtest()),那么此时编译器将按照事先设定的路径(Include路径列表及代码文件所在的路径)查找与之同名的实现文件(扩展名为.cpp或.c,此例中为mylib.c)。
如果找到该文件,并在其中找到该函数(此例中为voidtest())的实现代码,则继续编译;如果在指定目录找不到实现文件,或者在该文件及后续的各include文件中未找到实现代码。
则返回一个编译错误.其实include的过程完全可以"看成"是一个文件拼接的过程,将声明和实现分别写在头文件及C文件中,或者将二者同时写在头文件中,理论上没有本质的区别。

stm32中 .c和.h文件是什么关系?

2. stm32实例的流程图

void EEPROM_Write( uint8 Addr , uint8 Data )
{
	IIC_START();					// IIC开始
	IIC_Write( AT24C02_Write );		// 写入哪个EEPROM
	IIC_Write( Addr );				// 写入哪个地址
	IIC_Write( Data );				// 写入什么数据
	IIC_STOP();						// IIC结束,释放总线

	delay(500);						// EEPROM读写速度较慢
}

uint8 EEPROM_Read( uint8 Addr )
{
	uint8 ch;
	IIC_START();  					// IIC开始
	IIC_Write( AT24C02_Write );		// 选择哪个EEPROM
	IIC_Write( Addr );				// 读取哪个地址

	IIC_START();					// 见手册
	IIC_Write(AT24C02_Read);		// 读取哪个EEPROM
	ch = IIC_Read( );				// 读取数据
	IIC_STOP();						// IIC结束,释放总线

	delay(500);					  	// EEPROM读写速度较慢
	return ch ;
}

3. 照着李想的视频学stm32,对工程里面的文件关系有点迷糊,比如led.x和led.h和main.c

姨是对妈妈姐妹的称呼,姑是对爸爸姐妹的称呼。 老话说:妈亲舅大,爹亲姑大。意思是舅排第一,姑和叔差别不大,随礼的时候姑和叔差不多,姨是当辈亲。姑舅亲,辈儿辈儿亲,砸断骨头连着筋;姨家亲,当辈儿亲,死了姨娘断了亲。 话糙理不糙。5571

照着李想的视频学stm32,对工程里面的文件关系有点迷糊,比如led.x和led.h和main.c

4. 怎么在STM32的工程里 添加用户自己的.c和.h文件,希望可以说的详细一点儿,非常感谢。

在自己创建的文件里面  我一般放在(存放工程文件和用户层代码的文件里面  这个根据自己定义的名字 USER(我用的)) 在里面 新建文版文档 把 .txt 都去掉  比方说创建LED 那就是led.c和led.h


5. USER\main.c(24): error: #5: cannot open source input file "stm32_eval.h": No

USER\main.c(24): error: #5: cannot open source input file "stm32_eval.h": No,是设置错误造成的,解决方法如下:
1、首先在软件根目录文件夹中创建文本文件。

2、将文件名连带后缀更改为“main.1”即可。

3、然后在打开软件,问题就解决了,不会在提示了。

4、不同版本的 clue 打开后的界面对比。

5、如果设置 main parameters 点击这里,进行设置就完成了。

USER\main.c(24): error: #5: cannot open source input file "stm32_eval.h": No

6. STM32程序问题 #include "stm32f10x.h" #include "led.h" main() { LED_GPIO_Config(); while(1) { } }

看看你头文件里的 
LED_GPIO_Config(); 这个函数申明后面有没有分号

7. stm32编译时出错问题解决

对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量 i 进行声明,在c文件的程序之前必须加上int i进行定义。extern int i=0;这一句声明和定义都做了。
    对于大一点的程序,有很多c文件和头文件,这个时候全局变量就必须在头文件中声明(不需要初始化),然后在一个c文件中定义(该初始化的要初始化)。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。
   *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
       SYMBOL: K
       MODULE: 222.obj (222)
出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c文件就不需要初始化过程啦)一下就可以了。
  

另外: 下次最好能把程序贴出来

stm32编译时出错问题解决

8. 用keil4编译提示 warning: #1-D: last line of file ends without a newline最后行回车不管用

最后一行回车后还要保证是在第一列,新一行不能有空格等空字符才能不出此警告
最新文章
热门文章
推荐阅读