胖纸带你嘿嘿嘿

一个搞嵌入式开发的胖纸

BUG记录:sscanf()函数导致内存溢出,造成其他变量被改变

问题代码:

typedef union
{
	uint16_t Value16;
	uint8_t  Value8[2];
}PULSE;
PULSE MaxPowerOpt;
static char cSetValue[]="00.00";
sscanf(cSetValue,"%d",(int *)&MaxPowerOpt.Value16);

问题描述:

本来是希望通过sscanf()函数将字符串cSetValue转为无符号整数给MaxPowerOpt.Value16,但是发现每一次转换完成后,有一个变量(MutexSemaphore)的值都会被莫名其妙的修改为0,而且根据.map文件,这个被莫名其妙修改的变量(MutexSemaphore)被分配的地址刚好是在MaxPowerOpt的后面。

未命名1563433804.png


进制转换器 - V1.0

支持的转换类型:十进制、十六进制、二进制三者之间互相自动转换

未命名1562556043.png

C语言循环队列的实现与验证

//循环队列的结构体类型定义
typedef int DataType;
typedef struct
{
	DataType Data[QueueMaxLength];
	int      TailOffset;//数组数据中最新加入数据的下标
	int      DataLength;//数组数据中加入数据的总量,加入后取出的不算
}QUEUE;

//函数声明
QUEUE *  CreateQueue(void);
void     SetQueueNull(QUEUE * Queue);
void     InQueue(QUEUE * Queue , DataType Data);
DataType OutQueue(QUEUE * Queue);


Powered By itdoy

Copyright itdoy . All Rights Reserved.备案号:琼ICP备15000663号