做嵌入式這行已經(jīng)8年了吧,也算是一個(gè)老工程師了,工作多年,做過(guò)MCU、DSP、ARM、ARM+DSP、ARM+FPGA等等芯片。現(xiàn)在想將嵌入式的東西整理一下,不能只看眼前路,不顧身后身。
嵌入式的東西很多,想要整理起來(lái),也是很花費(fèi)力氣的一件事情,稍后的一年時(shí)間,有時(shí)間我就會(huì)慢慢的整理,算是對(duì)自己做一個(gè)交代,當(dāng)然如果對(duì)別人有用的話,那就更好。
目前AI異常火爆,現(xiàn)階段大家都停留在功能實(shí)現(xiàn)上,至于端測(cè)的落地,個(gè)人感覺(jué)還有一小段距離要走。當(dāng)端測(cè)AI落地的時(shí)候,我相信市場(chǎng)上對(duì)嵌入式工程師、硬件工程師的需求會(huì)越來(lái)越大。尤其是涉及到性能優(yōu)化方面,我相信應(yīng)該會(huì)有很大的市場(chǎng)吧。
1. 嵌入式繞不開(kāi)各種接口
比如:uart 、spi、i2c、usb、eth、mipi、edp、can、i2s、hdmi等等。需要了解各接口的使用場(chǎng)景、帶寬、機(jī)制、時(shí)序、工作模式、缺點(diǎn),時(shí)序等等。我相信硬件接口這一塊兒就會(huì)讓很多新手摸不到頭腦吧。
2. 嵌入式繞不開(kāi)交叉編譯工具
嵌入式一般都需要自己搭建交叉編譯工具鏈,當(dāng)然MCU類的開(kāi)發(fā)也會(huì)有成熟的IDE可供使用。但是對(duì)于編譯器而言一般都是GCC。對(duì)于嵌入式開(kāi)發(fā)人員來(lái)說(shuō),搭建交叉編譯工具鏈。編譯過(guò)程分為 ——預(yù)編譯、編譯、匯編、鏈接。通過(guò)GCC提供的工具可以使程序完成任一階段的處理。要清楚各個(gè)階段主要完成了什么工作。鏈接分為靜態(tài)鏈接、動(dòng)態(tài)鏈接,各自的優(yōu)缺點(diǎn)及使用場(chǎng)景要知道。同時(shí)編譯生成ELF格式的文件,要理解ELF文件的格式、必要的時(shí)候需要通過(guò)objdump或readelf工具來(lái)解析ELF文件。
3. 嵌入式開(kāi)發(fā)繞不開(kāi)調(diào)試
嵌入式開(kāi)發(fā)的很大一部分時(shí)間都在調(diào)試,好的調(diào)試方法和工具可以更快速的定位問(wèn)題。
3.1 vargrind 的使用
3.2 gdb的使用
3.3 kdump
3.4 corddump
3.5 oops
4. 嵌入式開(kāi)發(fā)離不開(kāi)優(yōu)化
嵌入式的優(yōu)化分為兩部分,算法上的優(yōu)化,編程上的優(yōu)化。其中編程上的優(yōu)化分為以下技術(shù)。
4.1 內(nèi)存使用上的優(yōu)化-cacheline的使用
cache涉及到cache命中率、cache一致性,write-back,wrte-through等。全局變量問(wèn)題、常用變量位置問(wèn)題、互鎖問(wèn)題。
4.2 并行優(yōu)化
并行優(yōu)化主要是SIMT或SIMD技術(shù)的應(yīng)用,包括GPU的使用,NEON優(yōu)化、SSE優(yōu)化等。
其中并行分為任務(wù)并行和數(shù)據(jù)并行、任務(wù)并行是多核方面的優(yōu)勢(shì)。數(shù)據(jù)并行是GPU和NEON來(lái)解決。
同時(shí)需要
4.3 依賴性問(wèn)題
依賴性問(wèn)題主要是流水線問(wèn)題,避免數(shù)據(jù)的依賴性可以高效的使用流水線。至于這部分的優(yōu)化要借助反匯編,來(lái)對(duì)比不同寫(xiě)法造成的差異。
5. 嵌入式繞不開(kāi)驅(qū)動(dòng)
很多人對(duì)驅(qū)動(dòng)開(kāi)發(fā)有技術(shù)情節(jié),越是年輕的工程師越是這樣。驅(qū)動(dòng)的開(kāi)發(fā)本質(zhì)上就是給外設(shè)配置參數(shù),使其工作在期望的方式。linux下的 驅(qū)動(dòng)開(kāi)發(fā)需要遵從linux的驅(qū)動(dòng)框架,裸機(jī)的驅(qū)動(dòng)開(kāi)發(fā)就是直接配置寄存器就可以。
linux有一個(gè)很好的理念,就是萬(wàn)物皆文件。linux將外設(shè)也會(huì)抽象成文件,讀寫(xiě)外設(shè)和讀寫(xiě)文件在操作上沒(méi)有了區(qū)別。
linux下的設(shè)備,分為字符型設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備。
linux下注冊(cè)驅(qū)動(dòng)的時(shí)候,將設(shè)備號(hào)和文件名進(jìn)行了映射,并實(shí)現(xiàn)file_operation里的一些函數(shù),例如,write、read、ioctl。其中write、read主要用于讀寫(xiě)外設(shè)的有用數(shù)據(jù)。ioctl主要用于配置外設(shè)的一些參數(shù),使其工作在不同的模式或狀態(tài)。
6. 嵌入式離不開(kāi)操作系統(tǒng)
其實(shí)嵌入式指的就是嵌入式操作系統(tǒng),操作系統(tǒng)有很多種。vxworks、ucos、freertos、bios、linux、uclinux、nuttx等等。對(duì)于操作系統(tǒng)的選擇個(gè)人感覺(jué)要看實(shí)時(shí)性、以及生態(tài)。生態(tài)很重要,這樣出現(xiàn)問(wèn)題的時(shí)候,才不至于絕望,感覺(jué)不是孤軍奮斗。
其實(shí)操作系統(tǒng)的出現(xiàn),主要是為了解決任務(wù)調(diào)度、內(nèi)存管理。這兩方面是操作系統(tǒng)的精髓。感興趣可以閱讀源碼。ucos的源碼不多,可以從它看起。
-
嵌入式工程師
+關(guān)注
關(guān)注
1文章
39瀏覽量
16424
發(fā)布評(píng)論請(qǐng)先 登錄
老工程師分享的模電設(shè)計(jì)經(jīng)驗(yàn)
入行嵌入式難度大不大?
如何成為一名嵌入式軟件工程師?
電子發(fā)燒友榮獲飛凌嵌入式“2024年度最具價(jià)值媒體”獎(jiǎng)
嵌入式軟件工程師就業(yè)好不好?
如何成為嵌入式開(kāi)發(fā)工程師?
月薪 3 萬(wàn)的嵌入式工程師都在用,串口屏到底神在哪?

電子工程師的電源設(shè)計(jì)經(jīng)驗(yàn)分享
年薪30萬(wàn)的嵌入式工程師,究竟需要掌握哪些技能?

電子工程師的經(jīng)驗(yàn)分享
為什么嵌入式驅(qū)動(dòng)開(kāi)發(fā)工程師可以拿高薪?
嵌入式工程師常用的開(kāi)發(fā)工具有哪些?
KiCon 演講回顧(十三):嵌入工程師的硬件夢(mèng)之 KiCad 經(jīng)驗(yàn)和項(xiàng)目分享

評(píng)論