×

关于QT 结构体的使用,socker发送不了0x00的问题

错误调试

关于QT 结构体的使用,socker发送不了0x00的问题

zxjy辉 zxjy辉 发表于2025-01-09 浏览582 评论0

采用了结构体来确定数据结构,然后使用socker发送不了0x00,正常socker是可以发送0x00的


结构体定义

// 起始帧+结束帧
struct  _YmodemStartEndFrame
{
    uint8_t frameHeader;            // 帧头
    uint8_t packetNumber;           // 包号
    uint8_t packetNumberR;          // 包号反码
    uint8_t NUL[PACKET_SIZE];       // 数据存储区
    uint8_t crc16H;                 // CRC校验位高
    uint8_t crc16L;                 // CRC校验位低

};

错误调试

wk2124子串口接收, 数据被覆盖

zxjy辉 zxjy辉 发表于2024-05-15 浏览1691 评论0

大意了!


读取wk2124 FIFO缓冲区

/*===================================================================================
功能:读取wk2124子串口的FIFO的数据
*port: 1~12,表示串口的标号(该串口标号由1个wk2124芯片片选将1个spi接口转换为12个串口)
*buf:用于接受数据的缓冲区
*len:要接受的数据长度(最大长度为FIFO中已经存在的数据长度)
*返回:所读取的子串口数据长度
*备注:gwh
====================================================================================*/
uint16_t WK_PortRecvData(uint8_t port, void *buf, uint16_t len)
{
	uint8_t state = 0;
	uint8_t nread = 0;
	WK_CS_handler(port);                            // 片选三个wk2124中的一个	
	port = port % 4;                                
	if (port == 0)
	{
		port = 4;
	}
	state = WK_ReadSReg(port, WK2XXX_FSR);          // 读wk2124的子串口FIFO状态寄存器
	if (state & WK2XXX_RDAT)                        // 接收FIFO非空
	{
		nread = WK_ReadSReg(port, WK2XXX_RFCNT);      // 查询FIFO中的数据量
		nread = (len >= nread ? nread : len);
		WK_ReadFIFO(port, buf, nread);                // 读取FIFO中的数据
	}
	return nread;                                   // 返回实际读取到的数据长度
}
C ---------- 使用#define定义一个带参数的宏,注意事项

C语言学习

C ---------- 使用#define定义一个带参数的宏,注意事项

zxjy辉 zxjy辉 发表于2023-12-11 浏览1774 评论0

应避免使用使用宏定义 带参数的表达式,因为会导致多次求值,导致结果和预期不符


例如 #define max(a,b)  (a)>(b)?a:b

上述的这个宏定义带参表达式,在使用带有++,--方式时,就会导致重复求值,该表达式,一共进行两次求值,一次是在判断 a是否大于b,另一次则是,输出max(a,b)结果的时候

举个例子

C语言学习

C ---------- #define 与 typedef 的区别

zxjy辉 zxjy辉 发表于2023-12-11 浏览1507 评论0

区别还是挺大的,要注意辨别,尤其是在多个变量的时候


都可以用来定义一个别名,

#define otherName  Name

typedef Name otherName;

区别在于,多个变量定义的时候,尤其在定义指针的时候

#define D_otherName Name*

typedef Name*  T_otherName;

例如:

D_otherName a,b;    这个扩展为: Name *a,b; 在这里 a变量表示指针,而b变量则不是指针