- 博客(995)
- 资源 (12)
- 收藏
- 关注

原创 嵌入式工程师值得一看的网站及工具总结(2023)
1.基础学习(C/C++,QT上位机等)★★★★★。//硬石电子,我之前做电机控制参考过他家的例程。//这个就不用多说了,国内的同学应该都用过。//安富莱,很推荐的stm32学习资源。//杜洋,我很喜欢的一位单片机前辈。//正点原子家也出了Linux教程。//B站是一个有很多好资料的网站。//韦东山老师的教程,非常推荐。//前辈经常说的不会就谷歌一下。//学习c++不错的参考网站。//正点原子,老牌stm32。3.嵌入式Linux学习。//下载Linux源码。//非常不错的拆解网站。//嵌入式Linux。
2021-10-31 09:43:06
44772

原创 高级嵌入式工程师练级之路 - 2022更新
从大二开始就一直使用AD,从proteus一直更新到现在,工作由于要考虑大家软件的统一性就一直用的16版本,不过目前工作基本已经和底层PCB没什么关系了,就可以一直追着最新版本用了,装了AD20,的确如官网所说,速度提升明显。过阵子做个板子试下具体效果。下载地址:链接:https://pan.baidu.com/s/14fv2EYAzxSqRGbNBTOyUiA提取码:3iwu学习交流可以...
2020-03-28 16:16:40
35190
5

原创 我的工程师进阶之路 - 2022更新
我补充了时间轴,从进入大学,不知不觉8年就这样匆匆而过,与其感叹我更想抓紧之后的时间,不知道接下来能经历些什么。
2019-10-11 21:51:23
82991
29

原创 书籍推荐总结 C/C++/Java/Python/Linux/算法
大家好,我是CodeAllen(康哥),我自己从事嵌入式开发已经很多年了,这部分的学习经历也是比较曲折的,有兴趣的同学可以看看我的一篇文章对于学习嵌入式或者其他编程技术,跳不过去的路线还是得自己看书实践,看好书可以省去不少功夫。所以我利用业余时间总结了从初学到深入的一些优秀技术书籍。
2018-09-05 21:30:35
85776
1
转载 C语言中的__attribute__宏定义之section属性
section先事先将所有的初始化函数加入到我们自己定义的输入段中,然后再在main函数中将这个输入段中初始化函数依次取出,这样就可在不修改main函数的前提下完成对系统的初始化了。的编译器, 都支持 __attribute__所指定的编译属性,这里着重讲解一下在KEIL 环境下__attribute__中的section的使用方法。那么section是怎么将这些初始化函数放入输入段中,并且系统还可以获取这些初始化函数的地址呢?这句话的意思是把整形变量test放到一个名为show的输入段中。
2023-09-16 17:53:46
17
原创 这份进入车载电器件的嵌入式软件开发的自学路径是否可行?
考虑到工资收入和未来发展,后续想要做车载电器件的嵌入式软件开发工作。个人目前在做汽车零件的结构设计工作,工作的技术难度相对较低。2. 完成哪部分的学习,可以进入公司进行独立工作?2. 完成哪部分的学习,可以进入公司进行独立工作?3. Autosar的学习需要在何时进行?3. Autosar的学习需要在何时进行?PS:啥时候需要买万用表和示波器?1. 上面的学习路径有问题吗;1. 上面的学习路径有问题吗;2. 微机原理与接口技术。6. C的缺陷和陷阱。
2023-09-15 17:11:15
46
原创 25岁自学转行嵌入式找工作可行吗?
一旦开始找工作,压力瞬间就铺面而来,破局的方法主要是两个,一个是学完基础之后找个方向具体研究下。至于嵌入式做什么方向,我实话说,很多女生都去做硬件设计是有原因的,对于很多小公司,硬件设计其实是比较简单的,就举我上边说的实习单位的例子,软件研发全是男生(最多的时候8个人),硬件和机械设计各两人,硬件的两人都是女生,水平呢只能说是一般,会用AD(都是毕业的时候参加的培训),懂基本模数电,比一般的电子类毕业的人强,但是我和当时的经理都是很懂硬件的,我们就觉得水平一般,所以经常需要帮他们审核电路图设计等等。
2023-09-14 10:28:32
63
原创 提升C语言的方法?
这个是在校同学分化的开始,也是我一直鼓励大家去参加电子类比赛的原因,C语言是一门实践性很强的语言,大家都这么说,但是怎么实践?这是真正能学好C语言的开始,很多实际问题,甚至是客户的不合理操作或者需求,你会发现很多看书是学不到的用法,在开发和阅读项目代码的过程里,C语言水平才是真正的提升了。很实际的一个原因,现在即使嵌入式这种比较在意软硬结合的方向也开始刷算法题了,牛客LeetCode上都有很多,这个刷题的过程其实也是一个不错的提升的方法。这个最简单的方法就是刷题库,比如未来教育这种。4.找工作,刷算法题。
2023-09-04 05:17:48
164
原创 编译问题:error: ‘printf’ was not declared in this scope
解决方法是在程序中添加 #include 这一行代码。这个头文件中包含了 printf 函数的声明,告诉编译器如何处理该函数。这个错误提示意味着编译器在当前作用域内无法找到 printf 函数的声明。这通常是因为没有包含 头文件导致的。
2023-09-03 18:26:01
378
原创 Vim快捷键及使用技巧
● 替换模式:在普通模式下通过光标选中一个字符,然后按r键,再输入一个字符,你会发现你输入的字符就替换掉了原来那个被选中的字符。● 命令行模式:普通模式下输入冒号(:)后会进入该模式,在该模式下输入命令,如输入:set number或:set nu可以显示行号。● 插入模式:按i/o/a键进入该模式,进行文本编辑操作,不同之处在于插入字符的位置在光标之前还是之后。● 普通模式:打开文件时的默认模式,在其他模式下按下ESC键都可返回到该模式。● k:在普通模式下,敲击k键,光标向上移动一个字符。
2023-08-30 23:04:18
356
原创 Bootload U-Boot分析
在include/cmd_confdefs.h中定义了所有U-Boot命令的标志位。如果有更多的命令,也要在这里添加定义。
2023-08-07 22:49:25
221
原创 Bootload启动代码功能模块分解
(1)伪操作GET伪操作类似于C语言里面的include,是将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。IMPORT伪操作相当于C语言中的extern声明,它告诉编译器当前的符号不在本源文件中定义,而是在其他源文件中定义,在本源文件中可能引用该符号。AERA伪操作用于定义一个代码或者数据段。ASSERT,在汇编编译器对汇编程序的扫描中,如果ASSERT中条件不成立,ASSERT伪操作将报告错误信息。(2)汇编指令LDR伪指令将一个32位的常数或者一个地址值读取到寄存器中。
2023-08-06 22:19:08
169
原创 在汇编语言中调用C语言的函数
在汇编语言中调用C语言的函数,需要在汇编语言中IMPORT对应的C语言函数名,然后将C语言的代码放在一个独立的C语言文件中进行编译,剩下的工作由连接器来处理。
2023-08-05 23:51:56
295
原创 应届生求职计划表/投递渠道/招聘流程大总结
这里尤其适合学校背景比较好的同学,因为很多名企都会在这些学校开设招聘专场进行线下宣讲和宣传,这里同学只要做到第一步里边的信息搜集,找到自己心仪的单位宣讲去听去试就好,但是记得务必先做好第一步的准备工作。这个概念是相对秋招来说的,因为有些好公司想提前一步吸收人才,所以把常规的9月开始的秋招时间提前了,整体难度大,但是资质待遇也好,提前准备就可以冲冲这一波,但是很多同学因为信息差都错过了。另外大家一定要有意识,求职是一个漫长且艰辛的过程,需要极大的努力和付出,只有充分的准备才有机会获得满意的工作机会!
2023-08-05 22:46:16
129
原创 在C语言中调用汇编语言的函数
在这里,C语言和汇编语言之间的参数传递是通过ATPCS(ARM Thumb Procedure Call Standard)的规定来进行的。简单地说,就是如果函数有不多于4个参数,对应的用R0~R3来进行传递,多于4个时借助栈,函数的返回值通过R0来返回。二是在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识,最后用mov pc, lr返回。然后,就可以在C语言中使用该函数了。一是在C语言中声明函数原型,并加extern关键字;建立strcpy.s代码,并加入工程中。
2023-08-03 21:50:16
383
原创 在C语言中内嵌汇编语言
② 内嵌汇编指令中不要将R12~R14,R0~R3指定为指令中的物理寄存器,因为这些寄存器可能会存放中间结果或用于子程序调用;通常,内嵌汇编指令中不要指定物理寄存器。(3)R12和R13可能被编译器用来存放中间编译结果,计算表达式值时可能将R0~R3、R12及R14用于子程序调用,因此要避免直接使用这些物理寄存器;④ C语言程序中的标号可以被内嵌汇编指令使用,但指令BL不能使用C语言的标号(B指令则可以);(2)在使用物理寄存器时,不要使用过于复杂的C语言表达式,避免物理寄存器冲突;
2023-08-02 18:46:57
311
转载 中国有哪些头部无人机企业?
10、优艾维智能:专注于工业无人机、智能机器人的控制、导航、通信、图像处理等技术,自主研制工业级旋翼无人机、固定翼无人机和其相关配套系统。大疆:绝对的全球无人机的王者,年营收几百亿量级,主要无人机产品为消费级航拍无人机和工业级航拍、农业植保无人机,海外市场做得很有特色。亿航:国内首个纳斯达克上市无人机公司,主要产品为eVTOL(载人版、货运版):亿航184、亿航216,也有其他无人机产品。3、航空工业成飞(132厂):翼龙-10无人机(曾用名“无侦-10”、“云影”)的研制生产单位(后转给中航无人机)。
2023-08-01 21:28:18
149
原创 汇编语言子程序调用
(1)将子程序的返回地址存放在连接寄存器LR中,同时将程序计数器PC指向子程序的入口点。(2)当子程序执行完毕需要返回调用处时,只需要将存放在LR中的返回地址重新复制给程序计数器PC即可。在ARM汇编语言程序中,子程序的调用一般是通过BL指令来实现的。在程序中,使用指令:BL+子程序名,即可完成子程序的调用。(3)在调用子程序的同时,也可以完成参数的传递和从子程序返回运算的结果,通常可以使用寄存器R0~R3完成。不同编译器编译的代码间的相互调用,要遵循AAPCS(ARM Architecture)。
2023-07-31 15:19:12
247
原创 汇编语言的程序结构
段可以分为代码段(Code Section)和数据段(Data Section),代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。在汇编语言程序中,用AREA伪操作定义一个段,并说明所定义段的相关属性,本例定义一个名为Init的代码段,属性为只读。ENTRY伪操作标识程序的入口点,接下来为指令序列,程序的末尾为END伪指令,该伪操作告诉编译器源文件的结束,每一个汇编程序段都必须有一条END伪操作,指示代码段的结束。(2)零个或多个数据段,数据段的属性为可读写。
2023-07-31 15:13:11
219
原创 汇编语言预定义寄存器和协处理器
下面列出了被ARM汇编器预定义的寄存器名。r0~r15和R0~R15(15个通用寄存器)。a1~a4(参数、结果或临时寄存器,同r0~r3)。v1~v8(变量寄存器,同r4~r11)。sb和SB(静态基址寄存器,同r9)。sl和SL(栈顶指针寄存器,同r10)。fp和FP(帧指针寄存器,同r11)。ip和IP(过程调用中间临时寄存器,同r12)。sp和SP(栈指针寄存器,同r13)。lr和LR(连接寄存器,同r14)。pc和PC(程序计数器,同r15)。
2023-07-30 22:22:14
196
原创 汇编语言程序中的表达式和运算符
十六进制数(hexadecimal-digits)可以是数字“0”到“9”和字母“A”到“F”的任意组合;整数表达式一般被计算为32位的整数,当此整数被定义为无符号数时,其取值范围为0~232-1,当被定义为有符号数时,其取值范围为-231~231-1。与逻辑表达式相关的运算符有“=”、“>”、“=”、“
2023-07-17 23:08:21
265
原创 引用与转载的规范样式
人写东西,很多时候都是需要依赖前人已有的经验与知识的。这是很自然的。很少有人写文章是完全从零开始创作的——当然,这不是说没有。既然需要依赖于前人的经验与知识,那就是说,会部分或者成段落乃至大篇幅地“借用”他人的文章或者书信或者语音中的内容。于是,这就涉及到一个如何规范引用与转载他人文章的问题了。
2023-07-09 21:58:24
367
转载 什么是5G前传 Fronthaul、中传 Middlehaul、回传 Backhaul?
而是被重构为以下3个功能实体:CU(Centralized Unit,集中单元),DU(Distribute Unit,分布单元),AAU(Active Antenna Unit,4G只有前传和回传两部分,在5G网络中则演变为三个部分,AAU连接DU部分称为5G前传(Fronthaul),中传(Middlehaul)指DU连接CU部分,而回传(Backhaul)是CU和核心网之间的通信承载。原来4G的RRU和天线合并成AAU,把BBU分离成CU和DU,DU下沉到AAU处,一个CU可以连接多个DU。
2023-07-09 21:29:26
212
原创 ARM汇编语言中的符号
如果在数字变量前面有一个代换操作符“$”,编译器会将该数字变量的值转换为十六进制的字符串,并将该十六进制的字符串代换“$”后的数字变量。字符串变量用于在程序的运行中保存一个字符串,但注意字符串的长度不应超出字符串变量所能表示的范围。在ARM汇编中,标号代表一个地址,段内标号的地址在汇编时确定,而段外标号地址值在链接时确定。数字变量用于在程序的运行中保存数字值,但注意数字值的大小不应超出数字变量所能表示的范围。如果在字符串变量前面有一个代换操作符“$”,编译器会将该字符串变量的值代换“$”后的字符串变量。
2023-07-02 23:09:22
249
原创 ARM汇编语言语句格式
在书写中,符号必须从一行的行头开始,前面不能包含空格或制表符tab。(5)comment:语句注释。)开头,注释的结尾即为一行的结尾。同时,如果一条语句太长,可将该长语句分为若干行来书写,在行的末尾用“\”表示下一行与本行为同一条语句。在汇编语言程序设计中,每一条指令的助记符可以全部用大写或全部用小写,但不允许在一条指令中大小写混用。(4)pseudo-instruction:ARM伪指令。(2)instruction:ARM或Thumb指令。ARM(Thumb)汇编语言语句格式如下所示。
2023-07-02 23:06:22
253
原创 ARM汇编器所支持的伪指令
ARM汇编器支持ARM伪指令,这些伪指令在汇编阶段被翻译成ARM或者Thumb(或Thumb-2)指令(或指令序列)。ARM伪指令不是ARM指令集中的指令,只是为了编程方便编译器定义了伪指令,使用时可以像其他ARM指令一样使用,但在编译时这些指令将被等效的ARM指令代替。ARM伪指令包含ADR、ADRL、MOV32和LDR。
2023-06-29 00:02:09
369
原创 计算机网络该怎么学?
计算机网络该怎么学?- 玩转Linux内核的回答 - 知乎 https://www.zhihu.com/question/60932935/answer/3054902250。
2023-06-11 17:42:00
208
转载 Linux操作寄存器前为什么要ioremap?
在Linux内核中,IO设备通常被映射到CPU的地址空间中,以便CPU能够直接访问IO设备的寄存器和内存。在x86架构中,IO设备通常被映射到物理地址空间中的一个特殊区域,称为IO空间(IO space)。另外,ioremap函数还会将映射的虚拟地址与对应的物理地址进行关联,并在内核的页表中添加对应的映射信息,以便内核能够正确地将IO地址转换为物理地址。链接:https://www.zhihu.com/question/586839632/answer/2917114240。作者:coolboy。
2023-06-11 16:58:41
433
原创 ARM汇编器所支持的伪操作 - 指令集选择伪操作
若在汇编源程序中同时包含ARM指令和Thumb指令时,可用CODE16伪指令通知编译器其后的指令序列为16位的Thumb指令,CODE32伪指令通知编译器其后的指令序列为32位的ARM指令。因此,在使用ARM指令和Thumb指令混合编程的代码里,可用这两条伪指令进行切换,但要注意它们只通知编译器其后指令的类型,并不能对处理器进行状态的切换。THUMB伪操作告诉汇编器下面的指令是32位Thumb-2指令或使用新语法的16位Thumb指令。ARM伪操作指示汇编器后面的指令为32位的ARM指令。
2023-06-11 10:00:55
486
原创 ARM汇编器所支持的伪操作 - 信息报告伪操作
如果numeric-expression的值为0,则通过第一遍汇编,并在第二遍汇编时报告“string-expression”的内容;如果numeric-expression的值不等于0,则在第一遍汇编过程中报告“string-expression”的内容,并中止汇编。ASSERT伪操作用于确保源程序在汇编时满足一定的条件。汇编诊断信息显示伪操作INFO用于在汇编器处理过程中的第一遍扫描或第二遍扫描时报告诊断信息。其中,logical-expression用于断言的逻辑表达式,其值为“真”或“假”。
2023-06-10 22:21:01
795
原创 ARM汇编器所支持的伪操作 - 汇编控制伪操作
在MACRO伪操作之后的第一行声明宏的原型,其中包含该宏定义的名称及需要的参数。包含在MACRO和MEND之间的指令序列称为宏定义体,在宏定义体的第一行应声明宏的原型(包含宏名、所需的参数),然后就可以在汇编程序中通过宏名来调用该指令序列。在源程序被编译时,汇编器将宏调用展开,用宏定义中的指令序列代替程序中的宏调用,并将实际参数的值传递给宏定义中的形式参数。当WHILE后面的逻辑表达式为“真”,则执行指令序列,该指令序列执行完毕后,再判断逻辑表达式的值,若为“真”则继续执行,一直到逻辑表达式的值为“假”。
2023-06-03 11:31:12
568
原创 STM32最小系统的组成部分
最小系统是指将STM32微控制器与必要的外部元件组合在一起,以实现基本的运行功能。编程/调试接口:通常使用SWD(Serial Wire Debug)接口或JTAG(Joint Test Action Group)接口进行编程和调试。这些接口允许你使用专用的编程器/调试器与STM32微控制器进行通信。复位电路:包括复位电路芯片(reset circuitry)和复位按键(reset button)。引脚连接:将STM32微控制器的引脚与外部元件(例如传感器、显示器、按钮等)进行连接,以实现特定的应用功能。
2023-05-31 20:51:32
527
原创 ARM汇编器所支持的伪操作 - 数据定义伪操作
MAP伪操作用于定义一个结构化的内存表的首地址。MAP也可用“^”代替。表达式可以为程序中的标号或数学表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。语法格式如下。其中,expr:如果基地址寄存器(base-register)没有指定,expr表达式存储到结构化内存表首地址。如果表达式expr是“程序相关的(program-relative)”,则程序标号在使用前必须先定义。
2023-05-30 21:52:02
1043
原创 ARM汇编器所支持的伪操作 - 符号定义伪操作
符号定义伪操作用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。用于定义全局变量的GBLA、GBLL和GBLS。用于定义局部变量的LCLA、LCLL和LCLS。用于对变量赋值的SETA、SETL、SETS。为通用寄存器列表定义名称的RLIST。(1)语法格式GBLA、GBLL和GBLS伪操作用于定义一个ARM程序中的全局变量,并将其初始化。GBLA伪操作用于定义一个全局的数字变量,并初始化为0;GBLL伪操作用于定义一个全局的逻辑变量,并初始化为F(假);
2023-05-19 22:16:35
663
原创 ARM Thumb指令及应用
与ARM指令集相比较,Thumb指令集中的数据处理指令的操作数仍然是32位,指令地址也为32位,但Thumb指令集为实现16位的指令长度,舍弃了ARM指令集的一些特性,如大多数的Thumb指令是无条件执行的,而几乎所有的ARM指令都是有条件执行的;与等价的32位代码相比较,Thumb指令集在保留32代码优势的同时,大大节省了系统的存储空间。由于Thumb指令的长度为16位,即只用ARM指令一半的位数来实现同样的功能,所以,要实现特定的程序功能,所需的Thumb指令的条数较ARM指令多。
2023-05-08 21:38:11
287
原创 ARM指令的寻址方式
ARM微处理器所支持的批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。在第二条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。在第三条指令中,以寄存器R1的内容作为操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。
2023-05-03 23:21:01
901
原创 ARM协处理器指令
ARM微处理器可支持多达16个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略ARM处理器和其他协处理器的指令。ARM的协处理器指令主要用于ARM处理器初始化ARM协处理器的数据处理操作,以及在ARM处理器的寄存器和协处理器的寄存器之间传送数据,和在ARM协处理器的寄存器和存储器之间传送数据。ARM协处理器指令包括以下5条。
2023-05-03 22:21:06
870
原创 ARM跳转指令
通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令。
2023-05-02 15:36:29
1281
原创 ARM批量数据加载/存储指令
ARM微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。LDM(或STM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈出栈。{∶}为可选后缀,若迭用该后缀,则当数据传递完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不变。将寄存器列表的寄存器(RO,R4到R12,LR) 存入堆栈。
2023-05-02 15:32:18
1269
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人