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