IAR工程建立


  • @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.软件配色问题(该章节只是个人洁癖爱好,可省略)

程序软件个人从网上找到的配色方案,个人感觉以下几种配色比较好。

本文原址:微信公众号:奇趣电子

猜你喜欢

转载自blog.csdn.net/qq_30237735/article/details/84953089