![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式
文章平均质量分 92
我才是鳴海步
新显实验室毕业的机械专业程序猿
展开
-
ARM交叉编译入门及交叉编译第三方库常见问题解析
交叉编译简单说来,就是编译成果物的地儿不是你运行这个成果物的地儿。最常见的场景,就是我们要编译一个 `ARM版本` 的可执行程序,但我们编译这个 `ARM版本` 可执行程序的地方,是在一个 `x86_x64` 的平台上。原创 2023-02-14 18:05:46 · 5657 阅读 · 0 评论 -
Web服务无法响应但本地业务正常的故障排查记录
现场反馈我们的设备存在不定时的情况下,会出现Web服务无法正常访问的情况。经过简单的现场排查,发现了呈现以下特点:a. 重启设备后,无法正常访问的情况能够解除。b. 在出现问题的时候,设备本身的与WEB无关的业务是能够正常运行的.c. 在出现问题的时候,有时候只是WEB服务无法访问,有时候所有通过私有协议交互端口均无法访问。d. 在出现问题的时候,即便是有时候所有通过私有协议交互端口均无法访问的场景,过很长时间后,通过配置工具的连接还是能够恢复正常的,但WEB服务只要坏过就无法恢复了。原创 2022-10-21 22:07:13 · 1107 阅读 · 0 评论 -
Web数据流的一生——从前端界面到后端数据,以及万级QPS的后台服务搭建
Web数据流的一生——从前端界面到后端数据,以及万级QPS的后台服务搭建原创 2022-08-11 17:56:12 · 1559 阅读 · 0 评论 -
现场校时错乱分析,开启NTP校时延迟分析以及部署建议
1. 问题背景描述2021年7月23日宜春现场出现一台信号机在应该跑早高峰方案的时候,实际上跑了凌晨的方案,从而造成现场车辆拥堵的问题,客户进行了投诉并要求给出解释和解决方案。2. 问题排查和分析排查过程中发现宜春现场的校时配置十分混乱。现场存在NTP,GPS,平台校时三种模式同时进行校时的情况。并且现场并不止有一个平台,也就是通过平台校时这个方式的校时源有多种。所以可以得知的是,现场的信号机在较多情况下同时会接受3-5种不同的校时源进行校时。3. 同时有多种不同校时源下存在的风险信号机是一个时原创 2021-07-28 16:11:08 · 1144 阅读 · 0 评论 -
ARM应用调试打印的耗时分析
1. 问题背景在多个微服务子程序调试的时候,发现一个奇怪的问题。在Shell登陆信号机手动启动各个微服务程序的时候,一切都响应正常。但是打包成固件包,上电启动的时候,在应用配置稍微复杂一些的情况下,就会出现频繁的RPC通信超时获取不到信息的情况。由于每个微服务程序不是直接通过启动脚本启动的,而是通过一个管理微服务的程序间接启动。管理微服务程序(Manager Microservice Program, MMP)通过fork + exec的方式将启动信息传递给子进程,从而作为父进程能够拿到子进程的退出状.原创 2021-04-29 14:25:55 · 402 阅读 · 0 评论 -
嵌入式软件开发调试问题常用方法及案例分析
1. 常用调试工具介绍网络问题调试工具:tcpdump有源码情况下调试:arm-linux-gnueabihf-gdb + arm-linux-gnueabihf-gdbserver系统调用调试:strace类任务管理器工具:mpstat,pidstat2. 逐个工具介绍2.1 网络问题调试工具:tcpdump语法:tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-原创 2021-02-01 11:51:22 · 891 阅读 · 1 评论 -
ARM Linux CAN 异常排查步骤
ARM Linux CAN 异常排查方法1. 背景项目上经常有反馈,说我们的CAN总线相关设备不受控,或者控制板重启也没用。登陆系统后查看,会发现经常出现CAN通信异常或超时的情况,由于我们的控制程序在CAN总线上连续6秒接收不到信息就会异常退出。所以表象上,经常只能看到CAN总线超时退出的程序打印日志。这样显然是不利于问题偏差的,如何更容易定位问题,弄清哪里坏了,是现在需要解决的问题。本文最后会提供一个基于ARM Linux CAN的问题排查方法。2. 进一步探索后续发现我们使用的libsoc.原创 2020-12-25 21:25:56 · 4554 阅读 · 2 评论 -
基于C++11的高精度多级时间轮定时器
定时器通常包括至少两个成员:一个超时时间(通常采用相对时间或者超时时间)和一个超时时间到达后的一个回调函数。有时候还可能包括回调函数被运行时须要传入的参数,以及是否又一次启动定时器,更改定时器的超时时间等。假设使用链表作为容器来串联全部的定时器。则每一个定时器还要包括指向下一个定时器的指针成员。进一步,假设链表是双向的,则每一个定时器还须要包括指向前一个定时器的指针成员。基于排序链表的定时器使用唯一的一条链表来管理所有的定时器,所以插入操作的效率随着定时器的数目增多而降低。而时间轮使用了哈希表处理冲突的思想原创 2020-12-18 16:25:05 · 5449 阅读 · 11 评论 -
现场大批量内存泄露问题追溯及根因分析
现场大批量内存泄露问题追溯及根因分析1. 问题背景某现场集中在11日和15日的时候,陆续有4台机器出现异常,一台机器出现灭灯的情况,并且重启机器后可以恢复。但是进去查日志,发现并没有检测到物理硬件异常。一般机器异常闪烁是由物理硬件异常或者程序异常导致。某现场机器有200台左右的规模,之前项目上极少出现莫名异常闪烁问题,并且这种短时间陆续出现的问题更加少,初步怀疑和硬件问题无关,是由于某种机制变更触发导致的。2. 问题深入排查与现象深入排查问题后,发现如下现象。2.1 现场初步现象: 现场大批量主.原创 2020-10-29 15:29:30 · 683 阅读 · 0 评论 -
函数sync、fsync与fdatasync的总结整理
一、术语解释脏页:linux内核中的概念,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存,linux是以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。内存映射:内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件与转载 2020-10-16 15:32:29 · 616 阅读 · 0 评论 -
通过编写程序修改 linux 登陆密码
背景最近本组有需求需要通过程序能够修改用户的登陆密码。在完整的 linux 系统中,可以通过 passwd 指令实现,但是嵌入式系统中一般为了精简,不会将此命令暴露出来,所以我们只能使用别的方式修改登陆密码。linux passwd 密码构成root:Shheg7V0sDMEk:0:0:root:/root/:/bin/sh/etc/passwd 存放用户信息,由 6 个冒号组成 7 个信息。用户名密码(x 表示加密密码)UID(用户标识)GID(组标识)用户全名或原创 2020-09-11 17:21:25 · 412 阅读 · 0 评论 -
VSCode加速自动补全和跳转语句,实现秒补全和秒跳转
1 你是否有如下问题,如果遇到过如下困难,可以参考一下本文章觉得VSCode的自动补全功能很鸡肋,经常是自己敲了个首字母等了好久才跳出来,还不如自己打完。觉得VSCode的跳转功能在遇到代码很多的情况下,也需要等待很久,体验很差,甚至可以去泡杯咖啡。VSCode用久了后,觉得自己的C盘空间越来越小,空间越来越不够用了。如果以上问题你都感同身受,那么如果你符合以下一个条件,那么就能实现秒跳和秒补全你是否有一个编译服务器或者性能高的服务器/电脑,如果有,那么恭喜你。如果没有,有兴趣的话可以继续原创 2020-09-04 10:47:34 · 20193 阅读 · 9 评论 -
tar.gz包中保证同内容文件hash一致的打包方式
问题背景同样的文件两次tar.gz打包生成的tar包hash值不一致,但是我们的需求是文件二进制内容一致的时候,tar包应该hash一致。文件根因分析tar.gz打包的时候,会把文件的组名,排列顺序,用户归属,修改时间,tar归档包的生成时间信息均打入。解决办法 tar --sort=name --owner=root:0 --group=root:0 --mtime='2020-09-03T08:00:00Z' -cf ../mmmm.tar ./* gzip –n mmm.tar通过强制原创 2020-09-03 11:41:14 · 1094 阅读 · 0 评论 -
嵌入任意文件到arm linux elf可执行文件中并读取内容
嵌入任意文件到arm linux elf可执行文件中的方式1 假设待嵌入文件为一个linux.h.2 执行arm-at91-linux-gnueabi-objcopy -I binary -O elf32-littlearm --binary-architecture armv5te linux.h data.o后,linux.h生成了一个data.o的文件,这里-I表示按照二进制写入,-O表示输出格式是elf32-littlearm的,也就是板子里的格式。这里还需要指定arm架构,armv5原创 2020-09-03 11:25:47 · 458 阅读 · 0 评论 -
gRPC/Protobuf ARM Linux交叉编译记录
【背景】由于本组业务需要,新架构需要RPC框架作为支持。gRPC以其高效的性能以及方便的接口广为人知,作为技术储备,需要预研gRPC在arm v5te架构和cortex A7架构下的移植可能性。【准备】gRPC交叉编译之前,需要先交叉编译好protobuf,并且与交叉编译其他库不同的是,gRPC需要先生成宿主机平台的protobuf和gRPC。原因是在gRPC交叉编译的过程中,需要使用对应的编译平台的bin文件(protoc,grpc_cpp_plugin等等),所以第一步是需要在宿主机平台原创 2020-07-13 17:06:35 · 3645 阅读 · 5 评论 -
JsonCpp库调优相关记录
关键字: JsonCpp、解码调优、耗时、性能调优案例简述随着本组业务的逐渐复杂,对于协议中使用的部分Json相关字符序列化与反序列化的需求逐步增加。之前业务中,Json长度相对较短,嵌套层数相对较低,序列化与反序列化的CPU占用与时间消耗相对较少,对业务影响不大。但随着本组业务的复杂度逐步递增,Json表项的嵌套逐渐增多以及表项数目逐渐增大,此问题的影响逐渐凸显。介绍一下系统运行环境,运行在ARM Linux板子中,板子的主频为400MHz,无硬浮点协处理器(no FPU),Linux内核环境原创 2020-07-09 14:54:20 · 464 阅读 · 1 评论 -
ioctl控制字异常导致CPU占用100%等一系列奇怪问题的深究和解决方案
近期排查问题发现一个历史遗留的bug,牵扯出很多隐藏的问题。排查期间也收获不少知识与需要注意的要点。 【问题表象】 在开发某款产品的时候,发现在ioctl控制的时候,加上打印后会导致卡死并且CPU占用100%的现象。 【问题表象探测】 最开始觉得是某款产品程序有问题,后来发现基线在相同的地方加打印后也会这样,甚至所缩减到如下代码的时候,也会这样。#defineYELLOW_CONTROL_OUTPUT2_00x...原创 2020-06-29 18:59:52 · 2007 阅读 · 1 评论 -
异步编程简单入门及基于ASIO的两种事件处理模式的优劣势解析
异步编程简单入门及基于ASIO的两种事件处理模式的优劣势解析关键字: Proactor、Reactor、ASIO、异步通信案例简述随着本组业务的扩大,需要对接的业务越来越多,常见的同步通信方式由于开销较高,资源利用率低而备受诟病。由于本组板载嵌入式系统资源比较紧缺,所以更加不适应同步通信的方式。异步通信作为一种效率高,开销低的通信方式,在信号机对接第三方服务的时候显得尤为合适。鉴于异步通信的书写方式本组同事大多数不算了解,这里对异步编程简单进行讲解,并介绍两种时间处理模式的优劣势解析,最后附上原创 2020-05-29 00:29:51 · 881 阅读 · 0 评论 -
一种基于VSCode的嵌入式开发的Windows平台可视化代码调试方法
一种基于VSCode的嵌入式开发的可视化代码调试方法关键字: VSCode、gdbserver、可视化调试、嵌入式开发案例简述随着本组业务的扩大,新进组员的增多,在开发定制或者排查基线的问题时候,经常会遇到问题不是那么明显,不方便通过加打印的方式进行排查的问题,并且加打印排查的方式较为低效,使得调试过程极为痛苦。可视化调试效率一直比命令行调试要方便和快捷很多,而嵌入式开发由于目标程序在开发板上,而不在编写代码本身的环境中,这样的程序运行环境和编译环境分离的情况,导致普通的集成开发环境并不能满足原创 2020-05-29 00:26:36 · 1190 阅读 · 0 评论 -
符合目标平台的交叉编译链制作及简单分析
符合目标平台的交叉编译链制作及简单分析关键字: 交叉编译、工具链、ARM、gcc bug 项目或工作中存在的的问题 由于本组使用的现有交叉编译工具链为网上下载的工具链,名称为arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar,由他人制作而成。平时常使用其中的arm-none-linux-gnueabi-gcc并未出现错误,而最近使用其中的arm-none-linux-gnueabi-g++程序时,发现程序中使用STL库则无法通原创 2020-05-19 00:32:07 · 911 阅读 · 0 评论