直接操作數(shù)據(jù)?我們來(lái)舉個(gè)例子:取一個(gè)整型數(shù)的相反數(shù)。一般的實(shí)現(xiàn)方法是這樣的:
近日,“海關(guān)發(fā)布”官方微博發(fā)布了一段視頻,曝光了一起走私CPU進(jìn)境案。
近幾年,欠薪、拖欠供應(yīng)商貨款,以及被申請(qǐng)破產(chǎn)重整、被列為被執(zhí)行人或失信被執(zhí)行人等一系列的負(fù)面消息頻頻出現(xiàn)在奇點(diǎn)汽車(chē)的身畔。
近日,上海公安局普陀分局成功破獲一起案件,并在程序員圈內(nèi)引起了不小轟動(dòng)。因?yàn)樵摪讣婕暗慕痤~高達(dá)1.5億元,而這僅僅是在半年時(shí)間內(nèi)的非法獲利。要知道,這樣的賺錢(qián)速度放在整個(gè)互聯(lián)網(wǎng)界也都是相當(dāng)炸裂的!
指令集(ISA)是硬件和軟件之間的接口,是整個(gè)計(jì)算系統(tǒng)中最為重要的接口。而選擇開(kāi)放的指令集,也就意味著打開(kāi)了軟件和硬件之間的連接接口,打開(kāi)了一種新的商業(yè)模式。如果現(xiàn)在要從零開(kāi)始構(gòu)建一個(gè)應(yīng)用,要選擇一個(gè)全新運(yùn)算平臺(tái),那么選擇RISC-V會(huì)是最佳的選擇。
很多人不能很好的使用和處理浮點(diǎn),其主要根源在于對(duì)它的表達(dá)與存儲(chǔ)方式不是很理解。最典型的例子就是經(jīng)常有人問(wèn)我:“如何使用串口來(lái)發(fā)送一個(gè)浮點(diǎn)數(shù)?”
在實(shí)際項(xiàng)目中,我們經(jīng)常需要提取一個(gè)數(shù)值的某些位的數(shù)碼,比如用數(shù)碼管來(lái)顯示數(shù)值或?qū)⒁粋€(gè)數(shù)值轉(zhuǎn)成字符串,都會(huì)涉及到這一操作。
很多時(shí)候我們需要進(jìn)行長(zhǎng)字符串的拆分。在振南的研發(fā)經(jīng)歷中,使用到這種操作的最典型的應(yīng)用場(chǎng)合有三個(gè)。
C語(yǔ)言中要表達(dá)一個(gè)字節(jié)數(shù)據(jù)序列(內(nèi)存中連續(xù)存儲(chǔ)的若干個(gè)字節(jié)),我們可以使用字節(jié)數(shù)組,如unsigned char array[10]={0,1,2,3,4,5,6,7,8,9}。其實(shí)字符串,本質(zhì)上也是一個(gè)字節(jié)序列,但是通常情況下它所存儲(chǔ)的字節(jié)的值均為ASCII中可打印字符的碼值,如’A’、’ ‘、’|’等。那在字符串中是否也可以出現(xiàn)其它的值呢?這樣,我們就可以用字符串的形式來(lái)表達(dá)一個(gè)字節(jié)序列了。很多時(shí)候,它可能比字節(jié)數(shù)組要方便一些。字符串中的轉(zhuǎn)義符就是用來(lái)干這個(gè)的。請(qǐng)看如下程序:
字符串是C語(yǔ)言中最基礎(chǔ)的概念,也是最常被用到的。在嵌入式開(kāi)發(fā)中,我們經(jīng)常要將一些字符串通過(guò)串口顯示到串口助手或調(diào)試終端上,作為信息提示,以便讓我們了解程序的運(yùn)行情況;或者是將一些常量的值轉(zhuǎn)為字符串,來(lái)顯示到液晶等顯示設(shè)備上。
中斷機(jī)制在單片機(jī)及嵌入式系統(tǒng)中是重中之重,我們必須深入理解。首先我們要明白一點(diǎn):CPU執(zhí)行指令代碼,并非一直順序地逐條執(zhí)行,而是可能突然跳到某段代碼上去的。因?yàn)檫@段代碼的優(yōu)先級(jí)更高,或者說(shuō)它更加緊迫,CPU必須暫時(shí)放下手上的的工作,立即去執(zhí)行它,否則就可能導(dǎo)致不良的后果,甚至是嚴(yán)重的事故。這個(gè)“突然跳轉(zhuǎn)”有時(shí)是可以人為預(yù)見(jiàn)的,或者是設(shè)計(jì)人員故意使然,但有些時(shí)候卻是隨機(jī)的,無(wú)法事先斷定它發(fā)生的具體時(shí)間。這就是“中斷”最為通俗的表述,如圖1.22所示。
將“二進(jìn)制”單獨(dú)拿出來(lái)作為一節(jié)來(lái)講,是因?yàn)樗且粋€(gè)極為基礎(chǔ)的概念。但是很多人對(duì)二進(jìn)制并沒(méi)有形象的認(rèn)識(shí),甚至有一些已經(jīng)入門(mén)、稍有開(kāi)發(fā)經(jīng)驗(yàn)的人對(duì)它的理解仍然比較模糊。所以振南認(rèn)為有必要將它以一種更為形象、通俗而又深刻的方式著重來(lái)進(jìn)行闡述,以便給我們以后的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。
通用MCU的成功與否,產(chǎn)品本身PPA固然重要,但除此外很大程度上取決于開(kāi)發(fā)生態(tài)。生態(tài)的繁榮可以讓其中的每一位參與者受益,當(dāng)然也會(huì)反哺到MCU產(chǎn)品本身,影響到新的產(chǎn)品定義和走向。
好,有了CPU、存儲(chǔ)器、總線(xiàn)以及外設(shè),我們把它們有機(jī)地組合封裝在一起,再把各個(gè)外設(shè)、總線(xiàn)的信號(hào),以及供電和地通過(guò)引腳引出來(lái),這就是一片完整的單片機(jī)芯片。等等,要讓單片機(jī)跑起來(lái)似乎還少了些什么?對(duì),還有時(shí)鐘!
我們已經(jīng)知道了CPU如何通過(guò)總線(xiàn)進(jìn)行存儲(chǔ)器的讀寫(xiě),也知道地址總線(xiàn)的寬度決定了CPU的尋址空間,數(shù)據(jù)總線(xiàn)的寬度則決定了CPU的位數(shù)(單次能夠讀寫(xiě)的數(shù)據(jù)量),而控制總線(xiàn)在一定程度上影響了訪(fǎng)存的速度(WR與RD為0的時(shí)間越短,訪(fǎng)存速度越快,當(dāng)然也要存儲(chǔ)器速度跟得上才行)。有了CPU和存儲(chǔ)器,以及連接它們的總線(xiàn),這就足以構(gòu)成一個(gè)完整的、可正常運(yùn)行的計(jì)算機(jī)系統(tǒng)。