随笔分类 - 嵌入式C语言学习
volatile
摘要:1.编译器优化,优化掉看起来重复无用的代码。 (1)并行设备的硬件寄存器(如状态寄存器)。当声明指向并行设备的硬件寄存器的指针时要用volatile修饰,因为寄存器可以随时被外设硬件修改。例如使用for循环对指向寄存器的指针循环读写的时候如果不加volatile修饰指针,编译器会优化,只执行最后一次
阅读全文
if……else if
摘要:如果是几个if并列,并且如果if都为真则几个if语句都会执行,如果是if……else if则执行第一个为真的语句即便是后面的语句还有为真的也不执行 1 int main() 2 { 3 OLED_Init(); 4 int value1=1,value2=2,value3=3; 5 OLED_Cle
阅读全文
结构体内部包含结构体指针
摘要:1 typedef struct ListNode 2 { 3 Menu_t _Attibute; 4 struct ListNode *_fatherMenu;//struct不能少,别和C++混了 5 struct ListNode *_childrenMenu1; 6 struct ListN
阅读全文
数据类型一些相关问题
摘要:小端和大端存储: 注意一个内存地址8位,因此8位8位的取 数据类型 强制类型转换并不会改变变量的数据类型和数值 本例子来源于ST官方函数 1 //stm32f10x_flash.c 2 FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t
阅读全文
整型和浮点型是怎么存储的
摘要:先看一段程序: 1 int main() 2 { 3 int n = 9; 4 float* pFloat = (float*)&n; 5 printf("n的值为:%d\n", n);//将一个整型值以整型的形式取出来 6 printf("*pFloat的值为:%f\n", *pFloat);//
阅读全文
数据类型
摘要:强制类型转换并不会改变变量的类型,和指针指向的变量的类型 只有常量引用才可以接任意类型,指针和引用只能接同类型的变量 确定一个地址下变量的类型: 1 *((__IO uint16_t*)Adress);//STM32中地址是32位的,该语句并没有改变地址的类型,只是表明有个无符号16位的指针指向该地
阅读全文
位操作
摘要:数据拼接 在通信协议中我们往往只能一个字节一个字节的读取,但是外设一个完整的数据往往不止一个字节,这个时候我们就需要数据拼接: 限制数据位数 USARTx->DR = (Data & (uint16_t)0x01FF);//USARTx->DR读到的是9位数据 (16位数据)检查最高位是否为1 1
阅读全文