
笔记
weekman93
这个作者很懒,什么都没留下…
展开
-
LWIP TCP接收端不主动发送ACK导致接收异常问题分析
1.问题场景描述本机运行LWIP协议栈,作为TCP客户端负责接收数据,上位机使用标准TCPIP协议栈并使用socket套接字,作为服务器端按照100ms周期向客户端发送数据。通信链路为千兆以太网,且整个网络仅有两个节点。在数据交互的过程中发现,客户端的TCP链接不稳定,频繁与服务器端断开链接,无法正常接收服务器端的数据。2.问题分析与排查由于服务器端是使用标准socket套接字编程,且经过长期验证,因此问题出现点大概率为使用LWIP协议栈的客户端。排查过程中,首先将服务器端的数据速率由100ms降低为原创 2022-05-20 22:48:27 · 3703 阅读 · 0 评论 -
RS232 RS422 RS485 DB9公座脚定义
原创 2022-01-12 11:22:24 · 3805 阅读 · 0 评论 -
将内存长度size,按照对齐长度align向上对齐
记录一种用于将内存长度按照对齐长度向上对齐的宏定义方法#define ALIGNMENT 4#define ALIGN_SIZE(size) (((size)+ALIGNMENT-1) &~(ALIGNMENT-1))原创 2021-11-30 09:37:18 · 427 阅读 · 0 评论 -
记录:MIPS64位架构下指针强制转换为int时遇到的问题
一、问题描述在MIPS64位架构下执行如下强制转换时,第3行代码会出现精度丢失错误,程序无法编译通过:第1行 unsigned char a =0;第2行 unsigned char *pa =&a;第3行 int addr =( int ) pa;但是同样的代码在win32平台下(vs 2017)下可正常编译运行。二、原因分析在MIPS64位架构下,指针类型为64位,即8个字节。而int类型为32位,4个字节。所以在进行强制转换时,由于字节长度不匹配,将会出现精度丢原创 2021-08-04 23:08:30 · 587 阅读 · 0 评论 -
若VxWorks浮点数计算值异常变化,需要添加VX_FP_TASK选项
最近在测试VxWorks程序时,新增加了一个浮点数处理函数A,任务中需要以传参的方式调用函数A,然后函数A将以指针方式返回计算结果。出现的问题是:固定传参条件下,函数A返回的浮点数值会随机变化。排查问题时发现传入函数A的某个浮点参数arg的原始值为32768.0,但在函数A中变为了NaN。最开始怀疑是任务堆栈大小不够了,扩大堆栈,问题依旧。最后才发现是在初始化任务A时,没有使用浮点数选项VX_FP_TASK,添加后,不再出现函数返回值随机变化的问题。查阅资料发现,如果在没有使用VX_FP_TASK原创 2021-07-11 18:23:13 · 1192 阅读 · 0 评论 -
写一个会导致“Run-Time Check Failure #2-Stack around the variable ‘XXX‘ was corrupted”的BUG
1.程序描述#include <stdio.h>int main(){ int a =0; short b = 0; scanf("%d",&a); scanf("%d",&b); printf("a=%d\n",a); printf("b=%d\n",b); return 0;}2.程序执行依次输入5和6,对变量a和b进行赋值,结果出现如下图所示的错误信息:3.BUG分析先说产生这个问题的原因:因为局部变量b的类型为short型,占据2原创 2021-07-09 23:01:56 · 280 阅读 · 0 评论 -
基础:基于链表的空闲队列与工作队列示例
0 简介本示例使用最基础的链表结构体,演示了空闲队列与工作队列的使用方式。主要构建了两个函数:insertToTail()和getFromHead()。其中,insertToTail()用于向一个链表的尾部插入一个元素,getFromHead()用于从一个链表的头部摘取一个元素。主函数的执行流程是:1.首先静态分配10个链表元素;2.然后依次将这10个元素插入到由指针freeListPtr指向的空闲队列的尾部,插入完成后,输出空闲链表当前长度,并从链表头部依次打印这10个元素的数据值;3.接着,从原创 2021-05-23 22:24:54 · 861 阅读 · 0 评论 -
方法:柔性数组及其内存分配方式
柔性数组的简要示例原创 2021-05-20 21:13:08 · 189 阅读 · 0 评论 -
方法:使用宏定义,实现调试信息的可控输出
0.目标使用宏定义,实现调试信息可控输出。可对调试信息进行等级分类,并分级输出调试信息,在嵌入式操作系统环境下(如VxWorks),还可以根据实际需求,打开或关闭对应等级的调试信息,方便bug排查。1.代码#include <stdio.h>#define DBG_CAN_INFO g_dbg_can_info_level#define DBG_TCP_INFO g_dbg_tcp_info_level#define DBG_UDP_INFO g_dbg_udp_info_leve原创 2021-02-08 21:59:29 · 396 阅读 · 0 评论 -
细节:与大神交流记录
0.前言俗话说“听君一席话,胜读十年书”,在项目执行过程中有幸同一位大神进行了一次交流。收获良多,特记录于此,以供后参。1.使用柔性数组在C99标准中,添加了一个新特性——柔性数组:typedef struct{ int len; char buf[0];}SOFT_ARR,*SOFT_ARR_PTR;上述结构体类型SOFT_ARR中的成员buf即为柔性数组。其中,sizeof(SOFT_ARR)的结果为4,表明结构体成员buf并未占用内存空间。可以按照如下两种方式使用柔性数原创 2021-02-08 21:27:53 · 147 阅读 · 0 评论 -
细节:强协议相关性软件开发流程及注意事项
开发流程1.通信接口连通性测试,确保CAN、网口、串口等外部接口收发无误;2.高低温环境试验,确保数据收发无误;3. 根据协议添加相关代码(数据结构、宏定义、函数定义),并使用CAN、网络调试助手进行模拟自测试;4. 与外单位进行设备联调,确保信息交互软件收发数据的正确性;5. 同操控上位机进行联调,确保由上位机下发的数据能够正确转发到设备,且能够将设备反馈的数据正确转发回上位机;注意事项1. 大部分时间是用在接口连通性测试、协议商定上的,协议商定的时间周期长短,将影响实际编码时间。2. 注原创 2021-02-02 22:03:45 · 260 阅读 · 0 评论 -
细节:使用网络调试助手遇到的坑坑
近期一个项目中需要使用多任务同时向一个udp套接字发送数据,上位机使用网络调试助手接收数据。 发送数据长度14个字节,每个任务发送10000次,因此理论上上位机应该收到280000个字节。 但是实际测试时发现如下问题: 当两个任务通过udp发送数据的周期小于4ms时,上位机调试助手收到的字节数小于28万。问题分析:开始以为是没有将套接字的sendto函数进行互斥保护,结果查资料发现sendto函数是不需要进行互斥保护的。后来突然想到会不会是网络调试助手接收后显示不过来,于是将网络调试..原创 2021-01-27 17:28:24 · 3107 阅读 · 0 评论