ZYNQ——C语言基础知识复习

雨燕双飞 提交于 2019-11-27 12:45:16

  ZYNQ的SDK是用C语言进行开发的,C语言可以说是当今理工类大学生的必备技能。我本科学C语言时就是对付考试而已,后面在51单片机里用C语言编过一些课程设计,真的是不熟。现在特开一帖,整理一下C语言的基础知识。

一、位操作

运算符 & | ^ ~ << >>
含义 按位与 按位或 按位异或 取反 左移 右移

 

 

 

tips:不改变其他位的状况下,对某几位赋值,分两步实现

①用 & 进行清0操作: a &= 0x0F; //对第4-7位清0,第0-3位的值不变 

②用 | 进行赋值操作: a |= 0x20; //对第4-7位赋值为2,第0-3位的值不变 

 

二、define宏定义

常见格式: #define 标识符 字符串 

例如: #define A 8  那么A的值就为8

 

三、ifdef条件编译

不仅是C语言还是Verilog,都会经常使用这个功能。

// 标识符已被#define定义过则编译程序段1,否则编译程序段2
//===========================================================
#ifdef 标识符
程序段1
#else
程序段2
#endif

// #else部分也可以没有
//===========================================================
#ifdef
程序段1
#endif

 

三、extern变量申明

  C 语言中 extern 可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里面要注意,对于 extern 申明变量可以多次,但定义只有一次。

 

四、typedef类型别名

  typedef 用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。

1.常规方法

①定义一个结构体GPIO

struct _GPIO
{
__IO uint32_t MODER;
__IO uint32_t OTYPER;
}

②定义一个变量GPIOA,它是和GPIO类似的结构体变量

struct _GPIO GPIOA

2.typedef法

①为该结构体定义一个别名GPIO_TypeDef

typedef struct
{
__IO uint32_t MODER;
__IO uint32_t OTYPER;
} GPIO_TypeDef;

②通过 GPIO_TypeDef 来定义结构体变量:

GPIO_TypeDef_GPIOA;
这里的 GPIO_TypeDef 就跟 struct _GPIO 是等同的作用了。 这样是不是方便很多?
 
 
五、结构体Struct
  结构体是个好东西,在不改变入口参数的情况下,只需要改变结构体的成员变量就可以达到增加函数的路口参数的目的。
1.格式:
struct 结构体名{
成员列表; }变量名列表;
//for example -----------------------------------struct U_TYPE {
Int BaudRate
Int WordLength; 
}usart1,usart2;

2.也可以在结构体申明的时候定义变量,申明之后再定义:

Struct 结构体名字 结构体变量列表 ;
//for example ------------------------------------
struct U_TYPE usart1,usart2;

3.结构体成员变量的引用方法是:

结构体变量名字.成员名
//for example ------------------------------------
usart1.BaudRate;

 4.结构体指针变量定义也是一样的,和其他变量没有啥区别

struct U_TYPE *usart3;//定义结构体指针变量 usart1;

5.结构体指针成员变量引用方法是通过 -> 符号实现

Usart3->BaudRate; //访问 usart3 结构体指针指向的结构体的成员变量 BaudRate

 

 6.static的作用

  static定义的值称为静态,使用后值不会被释放而是仍然等于它定义时的赋值。

//==========================================================================
//==    调用多次 int getValue(),flag = 1,1,1,1,1,1,1,1,1......
//==========================================================================
int getValue()
{
    int flag=0;
    flag++;
    return flag;
}

//==========================================================================
//==    调用多次 int getValue(),flag = 1,2,3,4,5,6,7,8,9......
//==========================================================================
int getValue()
{
    static int flag=0;    //只会执行一次
    flag++;
    return flag;
}

 

参考资料:

[2]正点原子STM32教程

[2]威三学院FPGA教程

[3]科技老顽童C语言教程

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!