变量

在计算机中,整数是以补码形式存放的。所以如果整数的最高位是1,有符号数的话就是负数;如果是无符号数,则都表示正数

整形 int ->32 -2^31~2^31
无符号整形 unsigned int ->32 2^31
volatile unsigned int

volatile 不稳定的,易变的,告诉编译器要谨慎处理
什么时候用 volatile,3种情况
1.中断服务函数的共享变量
2.多线程的共享变量
3.寄存器变量 (举例,传感器拿到数据更改寄存器的某一位)

相同点: 这三种情况 都属于 不属于main函数控制的范围

在程序设计中 使用 int short char
typedef unsigned int u32
typedef unsigned short u16
typedef unsigned char u8

一个c代码文件编译过程:
预处理,词法分析,语法分析,语义分析,编译为汇编,链接库文件
a.c/a.h->a.i->a.s->a.o

一个c在执行时包括什么?
代码段 .text
数据段 .data 被初始化的全局变量 volatile unsigned int b=1;
BSS(未初始化数据段) 没有被初始化的全局变量 unsigned int a;

关键字
static------extern
作用1 限定作用域
       作用域: 在一个.c中, 在一个函数中, 定义了static变量,不做初始化时,默认会自动初始化为0(数据放在数据段.data 的静态区)
作用2 在一个函数中定义static时,调用过程中其值不变
作用3 在模块中定义static时, 被定义者只能被本模块使用(类似于私有变量/函数)

#define 仅仅是字符串常量替换,数据类型跟平台相关
const 只读, 能指定数据类型

#define PI 3.141592653 (数据类型不明确,需要看平台)
const float PI=3.141592653 (精确指定用float类型)

typedef 类型 别名
typedef struct Student{
int age;
char name;
}Stu;
struct Student stu1;
Stu stu1;

位运算:
& 按位与
| 按位或
! 按位取反
^ 按位异或 如果两个相应bit位相同,则结果为0,否则为1

<<(左移)
运算规则: 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
数学意义: 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次,左移n位就相当于乘以2的n次方。

>>(带符号右移)
运算规则: 按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
数学意义: 右移一位相当于除2,右移n位相当于除以2的n次方。取商,余数不要。

掩码MASK
掩码的作用 提取某一位
掩码的生成 掩码= 1<<提取的位数

寄存器编程的三个手段
1.置1 flag|=MASK flag|=(1<<(想要操作的位数))
2.清0 flag&=~MASK flag&=~(1<<(想要操作的位数))
3.转置 flag^=MASK flag^=(1<<(想要操作的位数))

数组
int a[容量]
数组名 (const) 是个固定地址 (不能自加 不能赋值)

int a[32];
int* pa;
pa=a;
pa++;

函数
函数的调用就是把函数的定义地址放入pc指针寄存器

结构体
结构体指针访问成员用->,结构体访问成员用.
寄存器封装(注意:每个寄存器位数对齐操作)

typedef volatile unsigned int VU32;
typedef struct _T_Xxx_Config{
  union{
    struct{
      VU32 enable_start :1;
      VU32 read_start :1;
      VU32 stdbm :1;
      ...
    }bits;
    VU32 INIT;
  }adccon;
}T_Xxx_Config;
typedef T_Xxx_Config * p_XxxRegs;
p_XxxRegs p_XxxReg;

p_XxxReg->adccon.bits.enable_start=1;
p_XxxReg->adccon.bits.read_start=1;

参考:

结构体: https://www.elecfans.com/d/1433999.html
epoll: https://blog.csdn.net/armlinuxww/article/details/92803381

最新文章

  1. Mac 下如何使用 Tree 命令
  2. 如何提高Linux操作系统的安全性 转自https://yq.aliyun.com/articles/24251?spm=5176.100239.blogcont24250.7.CfBYE9
  3. AngularJS in Action读书笔记3——走近Services
  4. asmlinkage
  5. 【转载】C++中public,protected,private访问
  6. JSP Servlet 路径解析 路径设置
  7. Java垃圾回收基础
  8. Angular2经典文章集锦
  9. 【转】vim 修改tab为四个空格
  10. RMAN备份各种物理文件
  11. spring:ContextLoaderListener接口
  12. Excel 提供数据 更新或者插入数据 通过函数 自动生成SQL语句
  13. linux安装bind with DLZ &lt;NIOT&gt;
  14. 二级C考点汇总
  15. C 函数参数 char **s与char *s[]
  16. hdu 3954 线段树 (标记)
  17. php OpenSSL 加解密
  18. [转]Java NIO 系列教程
  19. 【面试篇】必须掌握的Spring 常用注解
  20. VB操作EXCEL文件大全

热门文章

  1. C# datatable group by分组
  2. 在orangepi 3 lts上使用SmartCardReader(读卡器)
  3. CF生化全模式全装备单机版安装教程(基于CSOL)
  4. Ubuntu磁盘查看分区和挂载
  5. windwos11没有Hyper-V的解决方法
  6. dart 学习笔记
  7. 激光雷达ldlidar communication is abnormal.
  8. netmiko批量操作网络设备_pandas版
  9. toast简介
  10. idea字体的大小设置