- @1. IAR头文件添加:#include"ioavr.h"头文件
因为该文件包含所有单片机的头文件。
- @2. 如何对一个大项目进行模块化编程
1).一个模块设立一个.c和.h文件,头文件.h是对于该模块接口的声明,用于其他模块引用.c中的函数,只有在.h中声明了其他外部模块才可以引用。
//==定义或外部引用=============================================================================
#ifdef DEFINE_COLLECT
//此时EXTERN_COLLECT被设置成空
#define EXTERN_COLLECT
#else
//此时EXTERN_COLLECT被设置成extern
#define EXTERN_COLLECT extern
#endif
//================================================================================================
//=====举例=======================================================================================
EXTERN_COLLECT COLLECT_CTR Collect;
EXTERN_COLLECT void ADSampling(void);
*当编译器处理本模块.c文件时,变成:
COLLECT_CTR Collect;
voidADSampling(void);
编译器会把这些全局变量分配到内存中。
*当编译器处理其他.c文件时,变成:
extern COLLECT_CTR Collect;
extern voidADSampling(void);
这时编译器不分配内存,任何.c文件都可以使用这些变量,而且不分配内存
2)防止自己在本模块.C程序中重复定义
#ifndef _FILTER_H_
#define _FILTER_H_
头文件内容
......
#endif
*程序在编译头文件时会判断有没有定义filter.h文件,第二次判断时则filter.h已经定义,不会编译内容部分。
3).IAR软件声明的全局变量
//在 2)中解释
#ifndef _COLLECT_H_
#define _COLLECT_H_
//====宏定义=============================================================================
// 此处虽然每个.c文件都含,但是宏定义不分配内存
#define WEI_DW_CODE 150000
typedef struct
{
BYTE Flag; // 过程标志
。。。。。。
}COLLECT_CTR; //定义结构类型不占内存的 。(重点)
//===定义或外部引用====================================================================================
#ifdef DEFINE_COLLECT
#define EXTERN_COLLECT
#else
#define EXTERN_COLLECT extern
#endif
//===================================================================================================
EXTERN_COLLECT COLLECT_CTR collect;//结构体或变量
EXTERN_COLLECT void Delay();//函数的外部声明
*对应的.C必然会声明#define DEFINE_COLLECT这样结构体就会变成COLLECT_CTR collect;这是定义了结构体变量,就会分配内存,而函数就会变成void Delay();因为头文件对应的.C文件必然会有:
#define DEFINE_COLLECT
#including"......"
所以函数就变成了头部声明。
而其它.C文件:
#define DEFINE_其它类型
#including"......"
故结构体和变量以及函数都会加上extern,不分配内存。
*:这里问了公司同事,其它头文件调用.h文件时,函数声明时因为函数有指针,会指到函数对应的.c文件中。全局变量定义到.h文件中
#外延拓展
预编译包含:条件编译,文件包含,宏定义
编译阶段:就是把对应的头文件加载到对应的.C文件中。
//===================================================================================================
@3.永远不要在.h中定义变量(变量定义和声明是不同的)
变量定义和变量声明的区别,变量定义使用“数据类型+变量名称”的形式,编译器需要给他分配内存单元的;而变量声明使用“extern 变量类型+变量名称”的形式,是告诉编译器我这个变量将在其他外部c文件中定义,我这里只是在外部用它。编译器就不给他分配内存空间,而等到真正遇到变量定义的时候再给他分配内存空间。
@4.软件配色问题(该章节只是个人洁癖爱好,可省略)
程序软件个人从网上找到的配色方案,个人感觉以下几种配色比较好。
本文原址:微信公众号:奇趣电子