程序如果要被CPU執(zhí)行,就得編譯成CPU可以執(zhí)行的指令,一大堆的程序就變成了一堆的指令。一個(gè)操作系統(tǒng)它也是一堆程序組成的,可以想象CPU的指令是很多的,但是這么多的指令中,有些指令涉及到系統(tǒng)底層的東西,如果有些指令錯(cuò)用或者使用不當(dāng)是非常危險(xiǎn)的,比如清內(nèi)存、設(shè)置時(shí)鐘、修改用戶訪問權(quán)限、分配系統(tǒng)資源等等,可能導(dǎo)致系統(tǒng)崩潰。CPU將這些指令進(jìn)行了分類,分為特權(quán)指令和非特權(quán)指令,不讓所有程序都能使用所有指令,如果所有程序都能使用,那系統(tǒng)崩潰就會(huì)變得非常常見了。
我們常常說到的操作系統(tǒng)有Linux、Windows、mac OS等等,手機(jī)的安卓系統(tǒng)就是基于Linux操作系統(tǒng),這些操作系統(tǒng)從內(nèi)核的角度分為宏內(nèi)核和微內(nèi)核,Linux是典型的宏內(nèi)核的操作系統(tǒng),Windows是典型的微內(nèi)核操作系統(tǒng)。
指針使得 C 語言能夠更高效地實(shí)現(xiàn)對計(jì)算機(jī)底層硬件的操作,而計(jì)算機(jī)硬件的操作很大程度上依賴地址,指針便提供了一種對地址操作的方法,在一定意義上,指針是c語言的精髓,所以一定要耐心看完。指針對于很多c語言初學(xué)者來說可能難以理解,一不小心可能被指針的指向關(guān)系繞進(jìn)去,在這里就對指針做一些總結(jié),寫一下自己的理解。
半個(gè)月前這位同學(xué)找到我,他當(dāng)時(shí)準(zhǔn)備參加面試,就和我聊了很多,總體感覺這位同學(xué)基礎(chǔ)還是不錯(cuò)。我那時(shí)候也就順便給他找了一些C語言、Linux等等筆試題,后面也教他稍微修改過幾次簡歷??傮w來說,這位同學(xué)能有現(xiàn)在的三個(gè)比較好的offer很大原因在于他自身的基礎(chǔ)不錯(cuò),肯付出、肯努力的結(jié)果。前幾天和我分享了他參加面試遇到的一道c語言筆試題,他說當(dāng)時(shí)有點(diǎn)整不會(huì)了,竟然做錯(cuò)了,然后面試官也讓他自己回去想想。因?yàn)榇蟛糠诸}做的還可以,最后也通過了面試。題目是這樣的:
I2C(IIC)屬于兩線式串行總線,由飛利浦公司開發(fā)用于微控制器(MCU)和外圍設(shè)備(從設(shè)備)進(jìn)行通信的一種總線,屬于一主多從(一個(gè)主設(shè)備(Master),多個(gè)從設(shè)備(Slave))的總線結(jié)構(gòu),總線上的每個(gè)設(shè)備都有一個(gè)特定的設(shè)備地址,以區(qū)分同一I2C總線上的其他設(shè)備。
如果有一天你們公司很重要的一臺(tái)Linux服務(wù)器突然啟動(dòng)不了了,重裝系統(tǒng)又浪費(fèi)時(shí)間,如果是啟動(dòng)過程有問題,那么你知道啟動(dòng)過程可以快速定位系統(tǒng)問題,很快就可以解決。
由上圖中可以知道進(jìn)程地址空間中最頂部的段是棧,代碼中調(diào)用函數(shù)、定義局部變量(但不包含static修飾的變量)或聲明的類的實(shí)例等等都要使用??臻g,當(dāng)函數(shù)執(zhí)行完(也就是程序執(zhí)行超過了這個(gè)函數(shù)的作用范圍的時(shí)候),操作系統(tǒng)會(huì)把該函數(shù)在棧中存放的數(shù)據(jù)出棧,也就是函數(shù)執(zhí)行完需要return的時(shí)候系統(tǒng)會(huì)自己釋放內(nèi)存。但是如果不斷的向棧中壓入數(shù)據(jù),達(dá)到最大的??臻g大小的話就會(huì)棧溢出(stack overflow),這時(shí)候程序運(yùn)行就會(huì)出現(xiàn)段錯(cuò)誤(Segmentation Fault)。
最近一個(gè)項(xiàng)目又用到鋰電池了,從業(yè)5年來這已經(jīng)是第三個(gè)項(xiàng)目需要電池供電了。以前做遙控鑰匙的時(shí)候沒什么概念,都是按照原來的項(xiàng)目評(píng)估,指定紐扣電池,2年以上的使用時(shí)間。后來第二個(gè)項(xiàng)目,我主要負(fù)責(zé)射頻單板,對于供電部分也就沒這么關(guān)心,直到最近開始了我的新設(shè)計(jì),把新了解到的內(nèi)容做個(gè)總結(jié),方便以后查閱!
今天同事找到我,告訴我加上這個(gè)二極管有點(diǎn)意思,然后問了我還知道關(guān)于信號(hào)采集加二極管的其他案例嗎?我表示疑惑,這個(gè)問題挺突然的,但是隱約能猜到里面有文章,估計(jì)對他來說也是一段難忘的經(jīng)歷,哈哈。接著他給我講了一下事情的前因后果,不由得感嘆硬件設(shè)計(jì)果然到處是坑?。?/p>
ESD靜電放電分為接觸放電和空氣放電,空氣放電的等級(jí)相對較高。下圖是ISO 10605-2008標(biāo)準(zhǔn)靜電放電測試設(shè)置圖。針對電子產(chǎn)品ESD問題,個(gè)人總結(jié)了以下幾種防護(hù)方法,以便設(shè)計(jì)時(shí)參考。
近幾年由于芯片廠商元器件物料緊缺,幾乎涉及到晶圓的芯片價(jià)格都翻了好幾倍。像去年買車的朋友,好多車型加價(jià)買都不一定買的到,產(chǎn)能幾乎都被各大主機(jī)廠放到高價(jià)位車型,暢銷車?yán)麧櫛》炊鴽]有多少產(chǎn)能。去年3月份,過完年剛來一個(gè)月左右,有一款BCM客戶下了400套訂單,老板立馬下任務(wù)了,但是我統(tǒng)計(jì)BOM的時(shí)候發(fā)現(xiàn),英飛凌的高驅(qū)芯片價(jià)格貴到離譜!要1000一片,單板就需要4片,價(jià)格直接起飛!我要是之前囤個(gè)10000片,賣完直接回家蓋小樓躺平了,哈哈!客戶的訂單在這邊,小公司又不能漲價(jià),量小還沒有話語權(quán),更換其他芯片又要來一遍DVP,時(shí)間肯定來不及,只能虧本處理了。這件事之后,老板說這次虧大了,趕緊把這個(gè)芯片換掉,沒有替代的就用分立器件搭一個(gè),功能滿足就行。其實(shí)完全替換高邊驅(qū)動(dòng)還是挺難的,我就先找了個(gè)低邊驅(qū)動(dòng)芯片嘗試了一下。以BTS3124D為例,看看能不能滿足需求?
昨天有個(gè)概念搞錯(cuò)了,低邊驅(qū)動(dòng)并不是單片機(jī)輸出低電平驅(qū)動(dòng),而是驅(qū)動(dòng)負(fù)載時(shí),通過閉合地線來實(shí)現(xiàn)使能。這個(gè)和單片機(jī)輸出電平無關(guān),不過不影響文章整體的閱讀體驗(yàn)。
由于以前用過線性充電芯片BQ24040,初次使用對鋰電池充電芯片的特性不是很了解,這種LDO架構(gòu)式的充電對散熱要求高,輸入輸出電流相等,壓差大,功耗就大。
根據(jù)靜電放電電流波形可知,其電流具有較寬的頻率范圍。如此高頻率電流通過參考地平面時(shí),理想情況下參考地平面阻抗處處相等,地電平抬升或者降落對系統(tǒng)信號(hào)以及電源無明顯影響。但是由于參考地電位受靜電電流沖擊產(chǎn)生的現(xiàn)象,即所謂的〝?shù)貜棬暚F(xiàn)象。
2 層 PCB 的制造成本將低于 4 層 PCB,但是PCB 厚度不應(yīng)超過 0.8mm - 1.00mm,而傳輸線沒有足夠的參考距離,寬度會(huì)變得相當(dāng)大。像好多羅杰斯的射頻PCB板都非常薄,一般分腔體設(shè)計(jì),不適合大尺寸。4 層PCB通常厚度為1.6mm,如果不在表面走RF Signal,可在中間層走射頻線,特性阻抗為50Ω。