- 博客(122)
- 资源 (24)
- 收藏
- 关注
转载 嵌入式C常用的几个宏定义
链表宏在linux内核、鸿蒙内核、rtos和一些开源代码中用的非常多。链表宏是双向链表的经典实现方式,总代码不超过50行,相当精炼。宏的定义如下,其作用是将所传入指针N的两个指针域和都指向N。目的是完成单个节点的初始化工作,如下图示意了该过程。宏的定义如下,直接将宏展开,其意图很明显是定义一个新链表(H表示为传入宏的参数名),并且将H的两个指针域,都初始化为H地址本身,如下图示意了该过程。宏的定义如下,其依赖于宏。宏功能描述为:为了更好的理解宏,下面按照宏的定义来进行拆解说明。由于该结构体
2023-03-14 22:14:00
313
1
原创 进程与线程
进程是计算机系统资源分配的最小单元,进程为线程提供资源。一个进程中可以有多个线程,同一个进程中的线程可以共享进程中的资源。线程是计算机可以被CPU调度的最小单元。
2023-03-05 21:26:27
365
原创 协程Protothread
Protothread在contiki os 的 process中有广泛的应用!contiki 的作者Adam Dunkels,同时也是uip,lwip的作者。
2023-03-05 21:23:27
321
原创 利用WSL2搭建Qemu仿真Vexpress-a9开发环境
利用WSL2搭建Qemu仿真Vexpress-a9开发环境,实现了制作根文件系统,u-boot引导linux运行。
2022-12-05 23:25:10
1019
原创 u-boot常用命令
uboot 的全称是 Universal Boot Loader, uboot可看作是一个逻辑软件,用来引导内核启动。板子相关信息环境变量操作环境变量的操作涉及到两个命令: setenv 和 saveenv,命令 setenv 用于设置或者修改环境变量的值。命令 saveenv 用于保存修改后的环境变量,一般环境变量是存放在外部 flash 中的,uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中。所以使用命令 setenv 修改的是 DRAM中的环境变量值
2022-12-04 02:30:24
782
原创 永磁同步电机(PMSM)
PMSM,英文全称为Permanent-magnet Synchronous Motor,直译为永磁同步电机。永磁同步电机的工作原理简单来说就是定子通交流电产生旋转磁场,转子为永磁体,定子产生的磁场带动永磁体旋转,转速为同步转速。同步电机的特点是无论是否带载,都以同步转速运行,只要在同步电机的带载范围以内,电机都将以同步转速旋转。而永磁同步电机的特点就是将转子的励磁绕组换成了永磁体。
2022-10-03 23:36:40
11528
2
转载 深入浅出讲解FOC控制与SVPWM技术
FOC(Field-Oriented Control),直译是磁场定向控制,也被称作矢量控制(VC,Vector Control),是目前**无刷直流电机(BLDC)和永磁同步电机(PMSM)**高效控制的最优方法之一。FOC旨在通过精确地控制磁场大小与方向,使得电机的运动转矩平稳、噪声小、效率高,并且具有高速的动态响应。
2022-10-03 18:27:35
2399
2
原创 开关磁阻电机
开关磁阻电机(switched Reluctance Motor)是80年代发展起来的一种新型电机驱动系统,结构简单、启动及低速时转矩大、电流小,高速时恒功率区范围宽,在宽广转速和功率范围内都具有高输出和高效率,而且有很好的容错能力,应用潜力巨大。电动车对电机驱动系统有如下要求:在整个运行区域高效率,高功率密度和转矩密度,工作转速范围宽,系统具有防水、抗震和耐冲击能力。目前,电动车主流电机驱动系统有感应电动机、无刷直流电动机和开关磁阻电动机。
2022-10-03 00:54:31
3815
原创 步进电机结构及原理
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。通过控制施加在电机线圈上的电脉冲顺序、 频率和数量, 可以实现对步进电机的转向、 速度和旋转角度的控制。在不借助带位置感应的闭环反馈控制系统的情况下、 使用步进电机与其配套的驱动器共同组成的控制简便、 低成本的开环控制系统, 就可以实现精确的位置和速度控制。如,配合以直线运动执行机构或齿轮箱装置,更可以实现更加复杂、精密的线性运动控制要求。步进电机一般由前后端盖、轴承、中心轴、转子铁芯、定子铁芯、定子组件、波纹垫圈、螺钉等部分构成,步进电机也叫步进
2022-10-02 13:54:11
5429
原创 电机分类与永磁电机
永磁电机采用永磁体生成电机的磁场,无需励磁线圈也无需励磁电流,效率高结构简单,是很好的节能电机。异步电机,转子转速与磁场转速不相等,同步电机是转子转速与磁场转速相等。直流电机是磁场不动,导体在磁场中运动;交流电机是磁场旋转运动,而导体不动。交流电机不需要换向器和电刷转换电流方向,与直流电机相比它的结构更简单,功率更大,在工业领域被广泛应用。一般直流电机比交流电机功率要小,特别是无刷电机,克服有刷电机的很多缺点,但是自身也有缺点,比如共振等问题。
2022-10-02 01:19:54
2416
原创 有刷电机及无刷直流电机(BLDC)
无刷直流电机(BLDC)是永磁式同步电机的一种,而并不是真正的直流电机,英文简称BLDC。区别于有刷直流电机,无刷直流电机不使用机械的电刷装置,采用方波控制的永磁同步电机,以霍尔传感器取代碳刷换向器,以钕铁硼作为转子的永磁材料,性能上相较一般的传统直流电机有很大优势。
2022-10-01 22:44:23
3024
原创 PFC(Power Factor Correction)功率因数校正电路
用电容器并连在感性负载,利用其电容上电流超前电压的特性用以补偿电感上电流滞后电压的特性来使总的特性接近于阻性,从而改善效率低下的方法叫功率因数补偿,功率因数较差的设备效率也低下,而且会为电网带来不必要的压力,并可能给其他连网设备带来问题。
2022-09-11 23:34:42
5312
2
转载 解决问题的方法
职场中不外乎分析问题、汇报解决问题的方案措施、按方案措施去解决问题,前面分享了沟通汇报中的逻辑和解决问题中的逻辑,掌握好这些方法并在日常工作中多加训练,你就会慢慢的成为逻辑清晰、有理有据的人,这里简单总结一下前面提到的3个思考方法。解决问题的第一步是明确问题,看似废话,很多人之所以被批“缺乏逻辑”就是没有抓住真正的问题,有时候一件事存有多个方面的问题,如果不能找出真正的、重要的问题,却花大力气解决那些鸡毛蒜皮的问题,结果可想而知。在麦肯锡所有的方法论中,明确问题都被作为最重要的一个环节。
2022-09-11 12:14:53
438
转载 Apache 架构师总结的 30 条架构原则
本文作者叫 Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。他是 Apache Axis2 项目的联合创始人,也是 Apache Software 基金会的成员。他是 WSO2 流处理器(wso2.com/analytics)的联席架构师。Srinath 撰写了两本关于 MapReduce 和许多技术文章的书。他获得了博士学位。来自美国印第安纳大学。Srinath 通过不懈的努力最终总结出了 30 条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团
2022-04-26 18:08:52
267
转载 基于RTOS的软件开发理论
基于RTOS的软件开发理论RTOS的特点任务设计任务的特性任务划分的方法设备依赖性任务关键任务紧迫任务数据处理任务触发条件相同的任务运行周期相同的任务顺序操作任务任务的可调度性分析任务类型单次执行的任务周期性执行的任务事件触发执行的任务任务优先级公共函数的设计互斥调用可重入设计运行效率中断服务程序的设计中断优先级中断优先级原则中断与关联任务的通信行为同步行为同步的通信方式二值信号置计数信号量事件标志组消息邮箱消息队列通信方式的选择行为同步ISR 与任务之间的同步两个任务之间的单向同步两个任务之间的双向同步多
2022-04-21 10:01:01
518
转载 C 语言高效编程与代码优化
C 语言高效编程与代码优化)整形数除法和取余数合并除法和取余数通过2的幂次进行除法和取余数取模的一种替代方法使用数组下标全局变量使用别名变量的生命周期分割变量类型局部变量指针指针链条件执行布尔表达式和范围检查布尔表达式和零值比较懒检测开发用switch()函数替代if…else…二分中断switch语句vs查找表循环函数设计使用查找表浮点运算其他技巧参考:程序优化最重要的就是找出待优化的地方,也就是找出程序的哪些部分或者哪些模块运行缓慢亦或消耗大量的内存。只有程序的各部分经过了优化,程序才能执行的更快。程
2022-04-19 21:25:38
254
原创 TCP与UDP
TCP与UDP协议TCP协议TCP原理确认应答机制超时重传机制连接管理机制滑动窗口流量控制拥塞控制延迟应答捎带应答粘包问题UDP协议参考协议协议(protocol)是不同的硬件、操作系统之间的通信,所需的一种规则。这种规则就是计算机与网络设备要相互通信,双方所使用的相同方法。比如:如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP
2022-04-18 22:44:07
966
转载 让程序员变厉害的7个底层思维
让程序员变厉害的7个底层思维刻意练习刻意练习是成为高手的捷径和方法,不断的加强练习,可以使其自我通化。刻意练习的要诀是:定义明确的具体目标,并进行步骤拆解,以此来引导练习。保持专注:完全把注意力集中在任务上。有效反馈:找到不足的地方,并进行思考(方法是自我总结、找高手指导、读书学习等等)。走出舒适区:始终在学习区不断挑战更高的难度。倒逼输出是一种强制吸收通化的一种方式,表达才可以更系统化的认知(费曼学习法)。扼住命运的咽喉,先从掌握刻意练习开始。聚焦思维不甘于平凡的人一般有这么个情
2022-03-19 14:35:30
374
转载 解析软件系统稳定性的三大秘密
解析软件系统稳定性的三大秘密何谓系统稳定性?如何保障稳定性?制度纪律思想之道实践之术小结何谓系统稳定性?控制系统理论认为:系统受到某种干扰而偏离正常状态,当干扰消除,如果系统的扰动能逐渐收敛并最终恢复正常状态,则系统是稳定的;反之,系统偏离越来越大,则是不稳定的,所以,稳定性是系统抗干扰和返回平衡状态的能力。对于经典的传递函数的软件系统,一般我们讲的稳定指的是BIBO稳定,即有界输入有界输出稳定。一个系统如果对任意有界输入得到有界输出,它就是BIBO稳定的。一句话,稳定的系统对于各种输入需要有符合预期
2022-03-05 11:33:39
776
原创 source insight4配置
配置下载网上大神的配置(source insight 仿 Sublime text 主题)https://github.com/LeonSUST/SourceInsightTheme个人设置的暗色背景配置:配置导入方法Source Insight -> Option -> Load Configuration默认配置函数名会加大的情况,可以使用快捷键 “Alt + F12”进行关闭,也可以再次“Alt + F12”打开“ 函数名显示的字体比其他字体要大显示效果”。
2022-02-21 09:24:07
778
2
原创 AUTOSAR和OSEK关系及网络管理比较
AUTOSAR与OSEK的关系AUTOSAR与OSEK二者都是汽车电子软件的标准。OSEK/VDX是基于ECU开发的操作系统标准,AUTOSAR基于整体汽车电子开发的功能标准。AUTOSAR中规定的操作系统标准就是基于OSEK/VDX,通信和网络管理虽然和OSEK有区别,但是是有继承性的。可以认为,AUTOSAR是基于OSEK/VDX发展出来的,OSEK/VDX被AUTOSAR标准软件架构所包含。
2022-02-09 18:27:21
4759
原创 C语言一些实用技巧
C语言一些实用技巧指定的初始化数组结构体与联合体宏的使用宏列表编译时断言静态断言获取偏移量获取容器地址获取数组元素数目头文件保护符符号转字符串符号拼接泛型编程掩码判断机器的字节顺序整数任意进制数转换统计整数中为1的位的个数静态表-4bit静态表-8bit平行算法完美法参考文档,不,抄袭文档指定的初始化C99标准实际上支持一种更为直观简单的方式来初始化各种不同的集合类数据(如:结构体,联合体和数组)。数组我们可以指定数组的元素来进行初始化。这非常有用,特别是当我们需要根据一组#define来保持某种映
2022-01-29 00:31:58
1667
转载 C语言常用转换函数实现原理
字符串转十六进制void StrToHex(char *pbDest, char *pbSrc, int nLen){ char h1,h2; char s1,s2; int i; for (i=0; i<nLen/2; i++) { h1 = pbSrc[2*i]; h2 = pbSrc[2*i+1]; s1 = toupper(h1) - 0x30; //toupper 转换为大写字母 if (s
2022-01-28 16:36:44
253
原创 常见嵌入式C问题
常见嵌入式C问题进程与线程的区别进程与线程的区别进程,是对操作系统正在运行程序的一个抽象。操作系统会把每个运行中的程序封装成独立的实体,分配各自所需要的资源,在根据调度算法切换执行,这个抽象的实体就是进程。因此进程是操作系统机型资源分配和调度的一个基本单位。进程是任务调度的最小单位,每个进程有自己的独立代码和数据空间,使得各个进程之间内存地址相互隔离。随着应用程序功能设计的越来越复杂,应用程序中的某种活动可能被阻塞,自然而然的想着能不能把这些应用程序分解成更细的粒度,能“并行”的执行多个执行实体,并
2022-01-28 13:13:49
1397
转载 架构思维:如何让写程序像搭积木一样
开发思维开发能力的提高,往往不在于你懂得几种语言、多少语法,因为这些都只是应用层面的东西。开发者真正值得增加杠杆的地方在哪呢?解决问题的思维。开发思维,就是利用编程来解决实际问题的思考方式。这需要多思考,写项目实践,再反思有效的方式,优化无效的方式,不断完善开发流程。那么设计模式算不算开发思维?大家看得到的设计模式的结构图、代码这些,都不算是。如何形成这种结构?为何要包含这些组件?为何同一问题存在多种相似的设计模式?为何要满足SOLID原则?这些背后的原理与依据,才是开发思维。本篇讲解的MVC,
2022-01-27 18:00:14
213
转载 嵌入式问题分析思路
问题分析思路BUG解决大致的思路:定位 - 缩小范围,关注最近的变化,相关人员分析讨论,核实细节。解决、 验证 - 修改不应引入其他问题,问题相关全面验证。建议:错误、异常及时处理。使用前检查有效性。注意结构、过程的使用场景。关键节点的进行输入输出单元测试。关注事件时序,事件以不同的顺序达到,连续多次同一个事件,没有事件,事件产生的条件等情况。问题复现稳定复现问题才能正确的对问题进行定位、解决以及验证。一般来说,越容易复现的问题越容易解决。模拟复现条件有的问题存在于特定
2022-01-27 15:24:11
387
原创 MPU与MMU
MPU MPU 有以下能力可以增加系统的健壮性可以阻止用户去破坏操作系统需要使用的数据可以防止一个任务去非法访问其他任务的数据,将任务完全隔离开可以把关键数据区设为只读,从而不被破坏检测其他意外访问,比如,堆栈溢出,数组越界等。原理通常MPU功能这个是由操作系统提供的服务。在嵌入式调试的时候,我们经常会遇到 hardfault,这个时候一般情况可能是某个指针指到未知的地方,然后对该地址进行修改赋值,会触发 hardfault。MPU的功能其实和这个功能基本类似。比如,RTOS中的一些特.
2022-01-24 17:42:32
1212
转载 优雅代码的设计原则
优雅代码的设计原则代码设计原则SRPOCPLSPISPLOD总结本文通过阐述优雅代码的设计原则来和大家聊聊怎么写好代码。代码设计原则好代码是设计出来的,也是重构出来的,更是不断迭代出来的。在我们接到需求,经过概要设计过后就要着手进行编码了。但是在实际编码之前,我们还需要进行领域分层设计以及代码结构设计。那么怎么样才能设计出来比较优雅的代码结构呢?有一些大神们总结出来的优雅代码的设计原则,我们分别来看下。SRP所谓SRP(Single Responsibility Principle)原则就是职责单
2022-01-21 14:28:25
352
原创 嵌入式C开发中编程模型——重点事件驱动和表驱动
嵌入式C开发中编程模型事件驱动消息驱动事件驱动vs消息驱动数据驱动1. 表驱动法(Table-Driven)用表驱动法来实现Unix设计原则中的“分离原则”和“表示原则”2. 基于数据模型编程**数据驱动思考**总结事件驱动事件驱动架构(Event-Driven Architecture)是一种用于设计应用的软件架构和模型,程序的执行流由外部事件来决定,它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。主要包括 4 个基本组件:事件队列(event queue):接收事件
2022-01-19 21:58:05
1780
原创 STAR原则及使用
STAR原则,即Situation、Task、Action、Result四个英文单词的首字母组合。STAR是一种重要的结构化思维方法。S(Situation)场景,也就是描述问题、事件发生时所处的背景状况,为什么要做这件事?T(Task)任务,描述某(类)人在背景环境中要执行的任务或担任的角色,要达成的目标,明确任务,如何明确你的目标?A(Action)行动,描述达成任务或执行任务的过程中采取的行动、所用的操作及使用的方法,为什么这么做,其他方案优劣?R(Result)结果,任务在执行行动后所达
2022-01-07 22:18:44
7876
转载 十分钟读完《坚持,一种可以养成的习惯》
作者简介古川武士毕业于日本关西大学,现为日本习惯培养顾问公司董事长,有多年培训指导企业经营者和职场人士的经验,其所开创的个人成长课程深受日本上班族欢迎。推荐语你知道要改变自己的人生,必须将好习惯坚持下去,因此,你打算每天阅读一个小时、每天锻炼四十分钟、每天写一篇日记……然而,大多数时候,你总是半途而废。你是否真正知道自己总是半途而废的原因?生活的惯性过于强大?太多不可预估的阻力和困难?自己缺乏意志力?而本书不是针对某项需要坚持的事情展开论述,而是聚焦更加普遍、更加核心的问题:为什么你总
2021-12-21 23:15:33
155
转载 C代码中的#、##用法
C代码中的#、##用法#和##基础#的用法##的用法#和##基础对于这两个语法的功能都比较简单,且都是在预处理阶段做一些工作 :#主要是将宏参数转化为字符串##主要是将两个标识符拼接成一个标识符#include <stdio.h>#include <stdlib.h>//#的简单使用 #define STR(str) #str//##的简单使用#define CMB(a,b) a##bint main(int argc, char *argv[]) {
2021-12-19 21:35:40
1341
转载 ADC常用的滤波算法
ADC常用的滤波算法限幅滤波中位值滤波算数平均滤波递推平均滤波中位值平均滤波限幅平均滤波一阶滞后滤波加权递推平均滤波消抖滤波限幅消抖滤波限幅滤波方法根据经验判断两次采样允许的最大偏差值A每次采新值时判断:若本次值与上次值之差<=A,则本次有效;若本次值与上次值之差>A,本次无效,用上次值代替本次。优缺点克服脉冲干扰,无法抑制周期性干扰,平滑度差。代码/* A值根据实际调,Value有效值,new_Value当前采样值,程序返回有效的实际值 */#define A 10c
2021-12-19 19:47:03
1024
1
转载 嵌入式 C语言上下文的快速切换
前言我们通常认为,在中断中,不能执行耗时的操作,否则会影响系统的稳定性,尤其对于嵌入式编程。对于带操作系统的程序而言,可以通过操作系统的调度,将中断处理分成两个部分,耗时的操作可以放到线程中去执行,但是对于没有操作系统的情况,又应该如何处理呢比较常见的,我们可能会定义一些全局变量,作为flag,然后在mainloop中不停的判断这些flag,再在中断中修改这些flag,最后在mainloop中执行具体的逻辑,但是这样,无疑会增加耦合,增加程序维护成本。cpostcpost链接:https://git
2021-12-19 19:23:24
206
转载 嵌入式Linux内存管理
嵌入式内存管理被欺骗的C进程每一个C语言的程序被执行起来的时候系统为了更方便开发人员操作,会给每一个进程分配一个虚拟的内存空间,它实际上是从处理内存映射出来的。虚拟内存的起始地址结束地址都是固定的,因此虚拟内存的布局都是一样。比如有三个进程 P1 P2 P3 ,他们虽然得到的物理内存是完全不一样,但是从进程的角度来看他们三个得到的内存确实一模一样的。假设你正在使用的计算机实际物理内存只有 1GB 大小,而当前系统运行了三个进程,Linux 会将 PM 中的某些内存映射为三个大小均为 4GB 的虚拟内
2021-12-19 18:33:03
725
SourceInsight4配色xml文件-深色
2022-02-19
A7121-codeForDirectMode(3Mbps).zip
2019-07-28
云端终端双场景的AI加速研究.pdf
2019-07-28
从零建立大数据&智能化体系.pdf
2019-07-28
BLE4.0低功耗蓝牙协议总结.pdf
2019-07-28
Q/GDW_375.2-2009《电力用户用电信息采集系统型式规范:集中器型式规范》及编制说明.pdf
2013-04-13
2011-2015年中国智能电表市场供需预测与投资前景评估报告.pdf
2013-04-13
程序员实用算法].Andrew.Binstock.等着.扫描版.pdf
2011-10-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人