
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
整车CAN网络介绍CAN(Controller Area Network)控制器局域网络,CAN网络在早期的整车应用中以BCM(车身控制器)为控制中心,主要是车身零部件(雨刮/大灯/车窗…),智能硬件较少,所以早期的正常CAN网络把所有其他的ECU全部放在Other ECU里边,如下图。ECU(Electronic ControlUnit)电子控制单元,是汽车专用微机控制器,一个E...
本人在学习STM32 USB使用的过程中,收集网上的资料,阅读别人博文,拼凑零碎知识,边看边学,记录下学习过程。推荐看《圈圈教你玩USB》。枚举前的工作根据STM32的USB库做移植,介绍枚举过程,SetSystem函数是一些初始化化设置。首先系统执行USB中断设置:USB_Interrupts_Config(); //中断向量表设置然后执行USB时钟设置:Set_USBClock();...
typedef定义函数类型的用法最近在CodeProject上看了段关于COM in plain C项目的代码,其中的一段关于typedef使用的代码一时让人有点模糊,代码如下:typedef long SetStringPtr(char *);typedef long GetStringPtr(char *, long);typedef struct {SetStringPtr * Se
嵌入式软件错误的五个主要原因在嵌入式开发软件中查找和消除潜在的错误是一项艰巨的任务。通常需要英勇的努力和昂贵的工具才能从观察到的崩溃,死机或其他计划外的运行时行为追溯到根本原因。在最坏的情况下,根本原因会破坏代码或数据,使系统看起来仍然可以正常工作或至少在一段时间内仍能正常工作。工程师常常放弃尝试发现不常见异常的原因,这些异常在实验室中不易再现,将其视为用户错误或“小故障”。然而,机器中的这些鬼魂
利用WSL2搭建Qemu仿真Vexpress-a9开发环境,实现了制作根文件系统,u-boot引导linux运行。
常见嵌入式C问题进程与线程的区别进程与线程的区别进程,是对操作系统正在运行程序的一个抽象。操作系统会把每个运行中的程序封装成独立的实体,分配各自所需要的资源,在根据调度算法切换执行,这个抽象的实体就是进程。因此进程是操作系统机型资源分配和调度的一个基本单位。进程是任务调度的最小单位,每个进程有自己的独立代码和数据空间,使得各个进程之间内存地址相互隔离。随着应用程序功能设计的越来越复杂,应用程序中的

本文由资深嵌入式软件开发专家Jacob Beningo撰写,总结了设计驱动程序开发者应该掌握的五个技巧。每一个嵌入式应用软件都会在某些时候访问最底层的固件和进行一些硬件控制。 驱动的设计和实施是确保一个系统能够满足其实时性要求的关键。以下五个窍门是每一个开发者在设计驱动程序时应该考虑的。1 - 使用设计模式设计模式是一个用来处理那些在软件中会重复出现的问题的解决方案。 开发人员可以选择浪费宝贵的时
如何编写更高层次嵌入式C代码?1. 简介2. C语言特性2.1处处都是陷阱2.1.1 无心之过2.1.2 数组下标2.1.3 容易被忽略的break关键字2.1.4 意想不到的八进制2.1.5 指针加减运算2.1.6 关键字sizeof2.1.7 增量运算符’++’和减量运算符‘--‘2.1.8 逻辑与’&&’和逻辑或’||’的陷阱2.1.9 结构体的填充2.2 不可轻视的优先级2
设备的可靠性涉及多个方面:稳定的硬件、优秀的软件架构、严格的测试以及市场和时间的检验等等。这里着重谈一下作者自己对嵌入式软件可靠性设计的一些理解,通过一定的技巧和方法提高软件可靠性。1、判错工欲善其事必先利其器。判错的最终目的是用来暴露设计中的Bug并加以改正,所以将错误信息提供给编程者是必要的。有时候需要将故障信息储存于非易失性存储器中,便于查看。这里以使用串口打印错误信息到PC显示屏为例,来说
链表宏在linux内核、鸿蒙内核、rtos和一些开源代码中用的非常多。链表宏是双向链表的经典实现方式,总代码不超过50行,相当精炼。宏的定义如下,其作用是将所传入指针N的两个指针域和都指向N。目的是完成单个节点的初始化工作,如下图示意了该过程。宏的定义如下,直接将宏展开,其意图很明显是定义一个新链表(H表示为传入宏的参数名),并且将H的两个指针域,都初始化为H地址本身,如下图示意了该过程。宏的定义








