- 博客(13)
- 收藏
- 关注
原创 关于结构体和联合体大小的计算
在结构体成员中,a占5个字节,b占4个字节,c占8个字节。5+4+8=17.但是17不是 8的倍数,所以(5+3)+(4+4)+8=24.故占24个字节。那么结构体中 d占5字节,e占4字节,f占8字节。如果定义以2字节对齐,a占7字节,b占12字节,c占8字节,那么此联合体大小为12字节。联合体中a占10字节,b占8字节,c占8字节。成员a 占7字节,成员b 占 4*2=8 字节,成员c 占8字节,a占7字节,b占12字节,c占8字节。联合体中a占10字节,b占8字节,c占8字节。
2022-10-30 10:55:25
1538
原创 结构体定义函数指针的使用
下面的例子很好的说明了结构体函数指针的用法。#include <stdio.h> #include <stdlib.h> #include <string.h> #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))typedef struct{ int funCode; void (*func)(int *data);}FUNC;static void get_para1(int ...
2021-08-04 14:11:57
385
原创 #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) 的含义
arr是个数组sizeof (arr) 就是这个数组所占的内存总量也就是字节总数,sizeof(arr[0]) 就是单个数组所占的内存.(sizeof(arr)/sizeof(arr[0]))就是arr数组的元素的个数.即 ARRAY_SIZE(arr)就是arr数组的元素的个数....
2021-08-03 15:24:19
2667
原创 千位分隔符显示
有个项目需要在显示屏上,显示千位分隔符。就是1000需要显示成1,000 , 123456需要显示成123,456。 所以在自己在网上查找了相关资料,整理了一段代码,希望对自己对其他人都有帮助。void Function( int32_t n){ int8_t i=0; int8_t j=3; u8 data[20]; while(n) { data[i]=n%10; n/=10; i++; if(n!=0&&a...
2021-08-01 14:39:07
811
原创 C语言关键字(volatile / static /const / inline)
1 volatile关键字分析,往往应用在三种场合1)多线程编程共享全局变量的时候,该全局变量要加上volatile进行修饰,让编译器不要省略该变量的访问。2)裸机编程的时候,某函数与中断服务函数共享全局变量的时候,该全局变量要加上volatile进行修饰,让编译器不要省略该变量的访问。3)ARM定义寄存器的时候,寄存器是指向一个地址,要加上volatile进行修饰,让编译器不要优化而省略该变量的访问。2 static 一般有2个作用,规定作用域和存储方式.对于局部变量, st...
2021-07-04 19:15:19
525
原创 STM32 定时器小结
STM32F103共有8个16位定时器,分别为TIM0~TIM7。其中TIM6、TIM7是基本定时器,TIM2、TIM3、TIM4和TIM5是通用定时器,而TIM1和TIM8是高级定时器。还有一个SysTick定时器.1:先介绍下SysTick定时器:SysTick定时器是存在于系统内核的一个滴答定时器,只要是ARM Cortex-M0/M3/M4/M7内核的MCU都包含这个定时器,它是一个24位的递减定时器,当计数到 0 时,将从RELOAD 寄存器中自动重装载定时初值,开始新一轮计数。使用内..
2021-07-04 14:21:30
534
原创 IO模拟串口发送
1 串口传输 默认 波特率1000 ,1起始位 8个数据位,1校验位,1停止位 。2 传输时,从起始位开始,从一个数据的低位(LSB)开始发送,如图从左向右的顺序,对电平拉高或拉低,最后停止位时拉高。3 波特率大小,改变延时时间即可。例如 1000 波特率 根据公式 : 1/1000=0.001s 也就是说每发送1bit延时1Ms .4 串口发送 将电平拉低 延时1MS(视为 起始位 0 ,传输数据正式开始) 其中数据位发送的是16进制数据(8bit 一字节 例如100...
2021-07-03 14:05:56
1654
原创 2021-06-16
strncpy和memcpy的区别strcpy字符串拷贝memcpy是内存拷贝,不仅仅能拷贝字符串1函数名: strncpy功 能: 串拷贝用 法: char *strncpy(char *destin, char *source, int maxlen);2函数名: memcpy函数原型为void *memcpy(void *destin, void *source, unsigned n)功 能: 从源source中拷贝n个字节到目标destin中1.strncpy是把Num个字符从s
2021-06-16 13:44:11
88
原创 2021-05-15
从网上找资料整理出来当前两大嵌入式操作系统freertos与ucos ll的差别:freeRTOS比uCOS II优胜的地方:1。内核ROM和耗费RAM都比uCOS 小,特别是RAM。 这在单片机里面是稀缺资源,uCOS至少要5K以上, 而freeOS用2~3K也可以跑的很好。2。freeRTOS 可以用协程(Co-routine),减少RAM消耗(共用STACK)。uCOS只能用任务(TASK,每个任务有一个独立的STACK)。3。freeRTOS 可以有优先度一样的任务,这些任务是按时间片来轮流
2021-05-15 22:13:17
95
原创 C++类和对象
1.类的定义class Student{ public ://成员变量char *name;int age;float score;//成员函数void say(){ cout}};//注意分号不要忘了写class 是c++关键字,用来定义类,Student 是类的名称,{ }内部是类所包含的成员变量和成员函数,public也是
2017-03-30 10:10:28
444
原创 内联函数
在 C++类声明中直接编写类成员函数的代码,则则在编译时, 编译器把成员函数编译成员内联函数, 而在类外实现成员函数则会编译成普通函数。和普通函数不同的是:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置,相当于宏的展开。 但是并不是直接等价于宏,内联函数还是具体函数的基本特征,而宏定义不具备函数特征。内联函数好处: 加快程序运行速度。因
2017-03-12 10:49:25
349
原创 STM32F4修改晶振频率
stm32f4晶振频率为25mhz,若开发板外接的晶振频率为8mhz,则会导致定制器时钟不精确,串口打印输出也会乱码,需进行一下修改:点击system_stm32f4xx.c文件,找到 #define PLL_M 25 这条语句,将参数值25改为8,在这条语句上面,右键点击 Go To Definination Of "HSE_VALUE"进入到这条语句#define HSE_
2017-03-06 12:27:20
12357
1
原创 C++
函数重载:C++可以存在相同的函数名,只要函数的形式参数不同就可以,调用时候会根据传入的参数类型动态决定调用哪个函数,这个特性叫做函数重载。示例:#include #include using namespace std;void display(void){ cout }void display(const char*){ cout
2017-03-05 16:15:45
269
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人