C/C++
Wucll
这个作者很懒,什么都没留下…
展开
-
环形队列实现
环形队列在嵌入式开发上有较多的应用,比如任务队列,串行数据缓存等等。使用环形队列可以实现更高效的数据管理。代码实现如下:typedef struct { uint8_t* buf; //指向队列数组的指针 uint16_t maxsize; uint16_t length; //长度 uint16_t head; //队头 uint16_t ...原创 2020-04-20 19:09:23 · 251 阅读 · 0 评论 -
树状菜单实现
多级菜单编程实现1)菜单结构 菜单结构采用树状结构,由若干个节点组成多级菜单。每个节点由当前层级节点数、标题,操作函数、父节点和子节点构成,如下代码所示。typedef struct Menu{ uint8_t MenuNodes; //当前层节点数目 char *MenuName; //菜单标题 void (*func)(uint16_t key); //节点函数 co...原创 2019-11-19 19:42:38 · 1129 阅读 · 1 评论 -
STM32+串口空闲中断实现不定长数据接收
常见的数据帧断帧方式有两种,一种是通过固定的协议格式断帧,另外一个是通过两帧数据的时间断帧,下面介绍最后一种,利用STM32F1的串口空闲中断实现不定长的数据断帧。笔者使用的标准官方库。空闲中断是接受数据后出现一个字节的空闲状态,就会触发空闲中断。利用该特性区分两个不同数据帧。1.初始化USART 按照官方的初始化流程配置,需要注意一点就是需要开启接收中断和空闲中断。/** * @...原创 2019-10-26 15:24:26 · 1233 阅读 · 2 评论 -
C语言的条件编译
1.含义对一个程序的某些部分进行条件编译,多用于一个程序有多个版本的情况。2.用法预处理器条件: if行 文本 elif 部分 else 部分 #endif if行: - #if 常量表达式 - #ifdef 标识符 -#ifndef 标识符 elif 部分: - else行 文本 elif部分 elif 行: - #elif 常量表原创 2017-11-10 19:07:49 · 715 阅读 · 0 评论 -
位字段
1.概念位字段是“字”中相邻位的集合,是C语言中一种存储结构,不同于一般结构体的是它在定义成员的时候需要指定成员所占的位数。一般使用在储存空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字节中。这时候就可以用到位字段。2.用法2.1常规用法struct{unsigned int is_keyword : 1;unsigned int is_extern : 1;unsigned int原创 2017-10-31 09:20:11 · 949 阅读 · 0 评论 -
C语言中的符号重载
符号意义static 在函数内部,表示该变量的值在各个调用间一直保持延续 在函数这一级,表示该函数只对本文件可见extern 用于函数定义,表示全局可见(属于冗余的) 用于变量,表示它在其他地方定义void 作为函数的返回类型,表示不返回任何值 在指针声明中,表示通用指针的类型 位于参数列表中,表示没有参数原创 2017-11-06 20:28:39 · 579 阅读 · 0 评论 -
C语言学习----疑难点整理
1.局部变量和全局变量当局部变量和全局变量同名时,局部变量会屏蔽全局变量。2.指针使用指针的时候,需要注意分配内存空间,避免越界进行内在读写而导致程序崩溃。3.指针声明与常量char *s=“AAA”;printf(“%s”,s);s[0]=’B’;printf(“%s”,s);s为指向字符串常量的指针,相当于const char *s,所以对s[0]的赋值是不合法的。4.volatil原创 2017-10-13 09:59:11 · 598 阅读 · 0 评论 -
C\C++语言题库
1.指针1.求输出结果int a[2][2][3]= { {{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}};int *ptr=(int *)(&a+1);printf(“%d %d”, *(int*)(a+1), *(ptr-1));答案:7 12 1. &a+i = a + i*sizeof(a); 2. a+i = a +i*sizeof(a[0]);原创 2017-10-17 23:37:56 · 1979 阅读 · 0 评论