自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 资源 (2)
  • 收藏
  • 关注

原创 IAR+ARM出现某个全局变量的值异常变化,或某个函数执行结果突然不符合预期的问题原因分析

问题描述:程序其他执行逻辑都正确,但是突然发现某个全局变量的值不按照预期的设计变化(比如,本来还每秒钟累加一次,结果值变成一个特别大的值且不变化)。或者发现某个函数执行逻辑与预期不符。问题原因分析:通过单步调试程序,发现是程序执行到某个中断服务函数A后,全局变量或函数才开始变得异常。分析该中断回调函数的内容,发现其中使用了两个长度为1000字节左右的数组。同时,再结合程序编译后生成的map文件,发现map文件中为中断服务函数栈空间分配的2048字节。而从map文件可以看到该中断服务函数A所占用的中断栈空间

2022-11-17 10:49:39 838 1

原创 IAR+ARM出现synchronous external abort错误原因分析(2)

问题描述:当程序某个高优先级的中断触发后(如pcie中断),或者底层接口物理链路初始化的一瞬间,原本正常运行的程序突然进入异常中断程序,并报出“synchronous external abort”错误。问题原因分析:通过排查代码,发现是由于串口接收中断服务函数中将接收缓冲区指定为一个固定长度的结构体(例如:仅容纳一帧串口数据的13个字节)。结果发现在高优先级中断触发或底层接口物理链路初始化时,cpu被占用,未能够及时响应串口接收中断,导致下次正常进入串口接收中断函数后,一次读取出两帧数据(26个字节)。

2022-11-17 10:34:57 2149

原创 IAR+ARM出现“synchronous external abort“异常可能的原因分析

问题描述:在中断服务函数中,一个函数按传值的方式传递参数,该参数占据2000字节左右,结果发现进入该函数程序就报出synchronous external abort错误,经过排查和分析,是由于参数占用空间太大,函数入栈时,导致栈空间溢出。解决办法:使用传指针的方式传递该函数参数即可解决该问题。

2022-09-20 10:12:39 1286

原创 LwIP的TCP客户端先于服务端启动情况下,无法正常连接服务器端的解决办法

LwIP的TCP客户端先于服务端启动情况下,无法正常连接服务器端的解决办法

2022-08-11 11:18:53 2407

原创 LWIP TCP接收端不主动发送ACK导致接收异常问题分析

1.问题场景描述本机运行LWIP协议栈,作为TCP客户端负责接收数据,上位机使用标准TCPIP协议栈并使用socket套接字,作为服务器端按照100ms周期向客户端发送数据。通信链路为千兆以太网,且整个网络仅有两个节点。在数据交互的过程中发现,客户端的TCP链接不稳定,频繁与服务器端断开链接,无法正常接收服务器端的数据。2.问题分析与排查由于服务器端是使用标准socket套接字编程,且经过长期验证,因此问题出现点大概率为使用LWIP协议栈的客户端。排查过程中,首先将服务器端的数据速率由100ms降低为

2022-05-20 22:48:27 2591

原创 方法:IAR+ARM cortex A7出现非对齐异常(Alignment Fault)的解决办法

解决IAR+ARM环境环境下,无法使用非4字节对齐结构体的问题

2022-04-16 16:24:45 2533

原创 方法:vivado提示 “由于找不到vcomp140.dll,无法继续执行代码。重新安装程序可能会解决此问题”的解决办法

解决办法:1.进入控制面板,直接卸载旧的vc++15(不要选择修复,因为有可能修复也会报错);2.通过如下链接下载新版的vc++15的安装程序(vc_redist.x64.exe)点我下载程序3.下载完毕后,直接安装即可搞定;...

2022-01-12 22:27:01 11852

原创 RS232 RS422 RS485 DB9公座脚定义

2022-01-12 11:22:24 2880

原创 将内存长度size,按照对齐长度align向上对齐

记录一种用于将内存长度按照对齐长度向上对齐的宏定义方法#define ALIGNMENT 4#define ALIGN_SIZE(size) (((size)+ALIGNMENT-1) &~(ALIGNMENT-1))

2021-11-30 09:37:18 343

原创 度数-码盘值-密位转换工具(含十进制与十六机制)

有时需要涉及到度数、码盘值和密位之间的相互转换,并且会存在十进制与十六进制两种情况,因此,根据这个需求基于QT平台编写了一个度数-码盘值-密位转换工具。使用效果如下图所示:使用时,可以在上面六个输入框中的任意一个输入一个数据,将得到其余五个转换后的值。...

2021-09-08 22:27:03 941

原创 记录: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 473

原创 若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 922

原创 写一个会导致“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 209

原创 基础:基于链表的空闲队列与工作队列示例

0 简介本示例使用最基础的链表结构体,演示了空闲队列与工作队列的使用方式。主要构建了两个函数:insertToTail()和getFromHead()。其中,insertToTail()用于向一个链表的尾部插入一个元素,getFromHead()用于从一个链表的头部摘取一个元素。主函数的执行流程是:1.首先静态分配10个链表元素;2.然后依次将这10个元素插入到由指针freeListPtr指向的空闲队列的尾部,插入完成后,输出空闲链表当前长度,并从链表头部依次打印这10个元素的数据值;3.接着,从

2021-05-23 22:24:54 682

原创 方法:柔性数组及其内存分配方式

柔性数组的简要示例

2021-05-20 21:13:08 134

原创 方法:使用宏定义,实现调试信息的可控输出

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 322

原创 细节:与大神交流记录

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 115

原创 细节:强协议相关性软件开发流程及注意事项

开发流程1.通信接口连通性测试,确保CAN、网口、串口等外部接口收发无误;2.高低温环境试验,确保数据收发无误;3. 根据协议添加相关代码(数据结构、宏定义、函数定义),并使用CAN、网络调试助手进行模拟自测试;4. 与外单位进行设备联调,确保信息交互软件收发数据的正确性;5. 同操控上位机进行联调,确保由上位机下发的数据能够正确转发到设备,且能够将设备反馈的数据正确转发回上位机;注意事项1. 大部分时间是用在接口连通性测试、协议商定上的,协议商定的时间周期长短,将影响实际编码时间。2. 注

2021-02-02 22:03:45 208

原创 细节:使用网络调试助手遇到的坑坑

近期一个项目中需要使用多任务同时向一个udp套接字发送数据,上位机使用网络调试助手接收数据。 发送数据长度14个字节,每个任务发送10000次,因此理论上上位机应该收到280000个字节。 但是实际测试时发现如下问题: 当两个任务通过udp发送数据的周期小于4ms时,上位机调试助手收到的字节数小于28万。问题分析:开始以为是没有将套接字的sendto函数进行互斥保护,结果查资料发现sendto函数是不需要进行互斥保护的。后来突然想到会不会是网络调试助手接收后显示不过来,于是将网络调试..

2021-01-27 17:28:24 2548

原创 TMS320C6678LE开发板环境搭建及使用说明(下)

目录3. 软件环境搭建3.1.软件清单3.2.搭建步骤3.3.HelloWorld测试工程3.3.1.新建CCS项目3.3.2.程序编写与构建3.3.3.新建目标配置文件3.3.4.目标配置3.3.5.开启Debug模式,运行程序3. 软件环境搭建3.1.软件清单表 2 软件清单序号名称备注1CCS5.2.1.00018_win32CCS5.2.1开发环境安装包2ti_emupack_5.0.838.0仿真器补丁包3ti_emupack_keystone1

2020-12-03 20:27:28 2072 6

原创 TMS320C6678LE开发板环境搭建及使用说明(上)

1.概述本文档分别从硬件环境搭建与软件环境搭建两个方面,对TMS320C6678LE开发板的环境搭建过程进行了描述。其中,硬件环境搭建部分给出了具体的硬件清单和搭建步骤,并演示了固化在开发板中的两个BOOT测试程序的使用过程;软件环境搭建部分给出了具体的软件清单和搭建步骤,并通过一个HelloWorld测试工程,演示了如何创建、构建、配置、下载和运行程序的过程。该测试工程仅限于演示单核功能,多核功能的使用方法与单核类似,故不再详述。2.硬件环境搭建2.1 硬件清单序号名称备注

2020-12-02 21:30:44 1570

原创 CCS5.2.1/5.5 错误-No source available for main()

1 错误现象在CCS5.2.1开发环境中从别处导入项目并编译完成后,下载程序时出现如下图所示错误:备注:当前使用的compiler版本为C6000v7.4.14。2. 解决办法进入项目属性设置页面:可以看到当前的调试模式为:Suppress all symbolic debug generation(–symdebug:none),所以会导致调试时没有任何符号信息。因此,需要将该选项设置为:Full symbolic debug(–symdebug:dwarf,-g)。重新编译并下载程序

2020-11-28 14:24:13 4256

原创 从“知道”到“会”:动手写写冒泡排序算法

冒泡排序算法代码实现

2020-09-29 20:11:11 91

原创 方法:使用Excel和Notepad++批量写代码

有时候需要进行大量代码的编写,而这些代码基本不涉及逻辑,仅仅是一些打印信息。那么,如果在需要大量打印这种信息时,怎么高效地编写代码呢?

2020-07-31 22:59:49 626

原创 细节:使用scanf函数输入数据时的注意事项,若使用不当会导致程序进入死循环。

正常情况下,使用如下的scanf语句就可以向变量a循环输入一个十六进制的值。但是这种scanf的用法有问题吗?答案是有的。问题就在于输入一个非十六进制数的字符就会导致scanf获取值失败,程序进入死循环。

2020-07-30 23:22:26 1033 1

原创 细节:使用scanf同时输入两个不同类型的变量可能会踩到的坑(既可能导致栈空间损坏,也可能会导致其中一个变量老是为0)

从表面上而言,看到scanf()数都会觉得这个函数很简单,就是按照给定的格式获取输入数据。但是在实际使用时才发现这个函数还是有一些坑值得注意的。下面分别对使用scanf()的正确情况和错误情况进行记录,以备后用。

2020-07-28 23:24:10 3319

原创 方法:解决同一文件的同一行代码,在sourceinsight与notepad++中的行号不同的问题

如果出现同一个文件中的同一行代码,在sourceinsight中与notepad++或其他IDE中的行号不同的现象,很有可能是sourceinsight的换行格式没有设置正确,可以尝试如下设置是否能够解决问题

2020-07-17 22:27:18 451

原创 方法:使用Visio中的页面内引用(超链接),实现形状之间的跳转

在Visio中绘制程序流程图时,有时可能由于程序过于复杂,导致一个页面都画不下整个流程。这时,一般需要进行页面内引用

2020-07-14 22:59:51 8468

原创 方法:在Visio中自定义可以同时在上下两个形状中输入数据的形状

方法:在Visio中自定义可以同时在上下两个形状中输入数据的形状

2020-07-10 22:59:59 1149

原创 知识点分类及相关资料

知识点分类及相关资料

2020-07-09 23:02:40 87

原创 解决Ubuntu sudo apt-get update找不到源的问题

执行sudo apt-get update命令时,出现如下报错信息:N: 无法认证来自该源的数据,所以使用它会带来潜在风险。E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

2020-07-03 21:54:56 2522 1

原创 使用SSH远程登录,实现在Linux终端下重复执行同一命令的方法。

对于某些Linux程序,在编写完成后需要进行循环压力测试,而测试时基本都是循环输入同样的命令。如果用手动输入的方法进行一两次测试还行,如果需要测试成百上千次,那么人就得累死。所以需要使用一种方法,实现在Linux终端下重复执行同一个命令(组),来进行自动化的循环压力测试。

2020-07-02 22:37:32 1133 2

原创 《VxWorks7系统引导指南》笔记——U-boot概述

使用U-Boot启动VxWorks

2020-06-30 21:38:51 3198

原创 《VxWorks7编程指南》笔记(十)——I/O系统:异步I/O

异步I/O

2020-06-24 20:25:32 602

原创 NETCONF和YANG的基础知识清单

文章目录1.NETCONF基础1.1.NETCONF 的特性1.2.NETCONF配置数据库类型2.YANG基础2.1.YANG的特性2.2.YANG同YIN的关系2.3YANG同.XSD和RELAX NG的关系参考文献:https://www.ietf.org/proceedings/75/slides/opsarea-5.pdf1.NETCONF基础1.1.NETCONF 的特性将配置数据和状态数据进行区分处理具备多种配置数据的存储方式(running、startup、candidate)

2020-06-23 22:00:14 1654

原创 《VxWorks7编程指南》笔记(九)——I/O系统:其他格式化I/O函数(可用于调试)

VxWorks还提供了其他内核格式化I/O功能。

2020-06-18 18:52:54 508

原创 PCIE3.0基础说明(PCI Express Base Specification Revision 3.0 by PCI-SIG)笔记——第二章:事务层说明(2)

文章目录2.2.4.路由和寻址规则2.2.4.1 基于地址的路由规则2.2.4.2.基于ID的路由规则2.2.5.头/尾DW字节使能规则2.2.6. 事务描述符2.2.4.路由和寻址规则TLP路由具备三个主要机制:地址路由、ID路由和隐式(implicit)路由。其中,隐式路由仅有消息请求使用。2.2.4.1 基于地址的路由规则地址路由主要用于内存和I/O请求。定义了两种地址格式,64位格式使用了4个DW的头部,32位格式使用了3个DW的头部。(分别如figure 2-7和2-8所示)。对于

2020-06-18 18:32:38 1943

原创 《VxWorks7编程指南》笔记(八)——I/O系统:标准I/O

VxWorks提供了一个完全支持ANSI C的标准I/O包(stdio.h),因此与Unix和Windows的标准I/O包兼容。

2020-06-18 18:31:39 572

原创 PCIE3.0基础说明(PCI Express Base Specification Revision 3.0 by PCI-SIG)笔记——第二章:事务层说明(1)

文章目录2.事务层说明2.1. 事务层概述2.1.1. 地址空间、事务类型和用法2.1.1.1.内存事务2.1.1.2. I/O事务2.1.1.3.配置事务2.1.1.4.消息事务2.1.2.数据包格式概述2.2.事务层协议:数据包定义2.2.1.常见的数据包头部域2.2.2. 带数据负载的TLP:规则2.2.3 TLP摘要规则2.2.4 路由和寻址规则2.2.4 路由和寻址规则2.事务层说明2.1. 事务层概述下图为事务层在PCIE整体结构中的示意图从一个较高的层级来看,事务层所涉及的关键内容

2020-06-17 18:48:31 4249

原创 《VxWorks7编程指南》笔记(七)——I/O系统:基础I/O

在VxWorks中,基础I/O是最底层的I/O。

2020-06-17 18:19:05 1696 2

度数码盘值密位转换工具.rar

度数-码盘值-密位转换工具(含十进制与十六机制)

2021-09-08

netperf-2.6.rar

基于netPerf2.6版本的源代码,在VS2015平台下进行编译生成得到的Windows端客户端与服务器端可执行程序。可用于网络带宽测试。 说明: 1.压缩包解压缩后可得到如下两个可执行文件: (1)netperf-2.6.exe:netperf客户端可执行程序 (2)netsever-2.6.exe:netperf服务器端可执行程序 2.使用方法: 假设服务器端IP地址为192.168.1.100,客户端IP地址为192.168.1.123 (1)首先双击运行netsever-2.6.exe,等待客户端连接; (2)在cmd窗口中运行netper-2.6.exe,命令为:“netperf-2.6.exe -H 192.168.1.100 -t TCP_STREAM -l 10",等待10秒左右即可得到吞吐量; ps:若需要其他版本的可执行程序请留言。

2019-06-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除