0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ASM要被時代淘汰了嗎

Q4MP_gh_c472c21 ? 來源:TopSemic嵌入式 ? 作者:Norman Guo ? 2021-11-16 15:38 ? 次閱讀

最近瀏覽一個挺流行的視頻——X天學(xué)會單片機(jī)。內(nèi)容確實(shí)通俗易懂,制作的比較用心。但其中的有個觀點(diǎn)筆者不敢茍同,就是現(xiàn)在 C 語言已經(jīng)強(qiáng)大到勝任所有任務(wù),大家沒有必要再去學(xué)習(xí)匯編語言了,直接從 C 學(xué)起就行了。

這種觀點(diǎn)似乎有一定道理,我甚至懷疑現(xiàn)在是不是真的有很多同學(xué)不再學(xué)習(xí)匯編了。特別是現(xiàn)在大多數(shù)廠商都提供了完備的驅(qū)動代碼的情況下,我們做項(xiàng)目基本上用不到寫 ASM 代碼了。

ASM 就要被時代淘汰了!可真的是這樣嗎?

下面我們結(jié)合兩個實(shí)際工程中碰到的例子談一下,掌握 ASM 語言對我們寫出穩(wěn)定高效代碼的必要性。

我們看代碼,主程序翻轉(zhuǎn) PORTA 的引腳 0,定時中斷服務(wù)程序翻轉(zhuǎn) PORTA 的引腳 1。乍一看很難看出有什么問題。有不少同學(xué)就是這么中招兒的。這要是控制一些 LED 指示燈或蜂鳴器之類的還好,最多就是偶爾看著有點(diǎn)亂,或出點(diǎn)兒噪音。要是控制設(shè)備沒準(zhǔn)兒就要出大問題了。

有什么問題呢?因?yàn)橹袛喟l(fā)生時,主程序?qū)⒃谏弦粭l正在執(zhí)行中的語句執(zhí)行完后中止運(yùn)行。這里一定要注意,這里說的語句,不是一條 C 語句,而是一條 ASM 語句。我們在調(diào)試環(huán)境看一下反匯編。一條 C 語句被編譯成了多條 ASM 語句。

LDRH r1, [r5,#0x14] (1)

EORS r1,r1,r4 (2)

STRH r1,[r5,#0x14] (3)

我們看到一條 C 語句實(shí)際上編譯為 3 句 ASM,(1)把 PORTA 當(dāng)前內(nèi)容讀進(jìn) r1,(2)最低位通過異或取反,(3)把取反后的值輸出至 PORTA。如果中斷恰好發(fā)生在 (1)或 (2)的執(zhí)行期間,那么中斷服務(wù)程序?qū)?PORTA 引腳 1 的操作,會被主程序中語句(3)覆蓋掉。

要避免這種情況,可以在操作 IO 端口(或其它類似的操作)前禁止中斷,操作完之后再允許中斷。在一些有位帶(Bit Map)的單片機(jī)里,對單個引腳的操作可以通過位帶區(qū)操作,避免各引腳之間互相影響。

匯編語言的使用,還可以大幅度的提高代碼的效率。即使現(xiàn)在編譯器的效率已經(jīng)挺高了,但畢竟機(jī)器還是要比人笨一點(diǎn)兒。

舉個例子,有不少工程里面需要用到浮點(diǎn)運(yùn)算。如果直接調(diào)用浮點(diǎn)運(yùn)算庫,可以輕松的完成任務(wù)。但這樣有一個限制,就是運(yùn)算過程一直以最大的精度來運(yùn)算,相當(dāng)浪費(fèi) MCU 的時間。

我們的應(yīng)用可能并不需要這么高的精度,而是需要盡快的完成運(yùn)算并保留一定精度即可。在此情況下,如果我們用嵌入 ASM 做運(yùn)算,可以通過減少迭代運(yùn)算次數(shù) (精度和迭代運(yùn)算次數(shù)成正比)達(dá)到快速完成運(yùn)算。在發(fā)動機(jī)控制等分秒必爭的領(lǐng)域,有時候這樣做是很有必要的。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628383
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134082
  • ASM
    ASM
    +關(guān)注

    關(guān)注

    1

    文章

    66

    瀏覽量

    18936

原文標(biāo)題:ASM真要被掃進(jìn)歷史的垃圾堆了嗎?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    換電要被超快充淘汰了?

    當(dāng)超快充已經(jīng)可以實(shí)現(xiàn)「充電5分鐘,續(xù)航增加200多公里」時,就會出現(xiàn)一種聲音: 超快充技術(shù)發(fā)展這么快 換電馬上就要被淘汰了? —— 錯! 蔚來「可充也可換」,給你多一種選擇 最好的服務(wù)體系不應(yīng)只提供
    的頭像 發(fā)表于 09-13 11:20 ?139次閱讀

    電感很燙是短路了嗎

    電子發(fā)燒友網(wǎng)站提供《電感很燙是短路了嗎.docx》資料免費(fèi)下載
    發(fā)表于 09-04 11:31 ?0次下載

    ASM330LHH使用FIFO閾值中斷輸出時工作異常的原因?

    GPIO_Pin){ if(GPIO_Pin == IMU_INT1_Pin) {asm330lhh_fifo_read(); }}void asm
    發(fā)表于 07-22 06:06

    車路云協(xié)同,這次它真的來了嗎?

    隨著科技的快速發(fā)展,“車路云協(xié)同”正在悄然發(fā)生變化。我們離科幻電影《機(jī)械公敵》中威爾?史密斯駕駛的汽車能準(zhǔn)確甄別交通狀況并調(diào)整行駛狀態(tài)的時代就要來了嗎?背景說明“車路協(xié)同”已經(jīng)不是什么新鮮名詞
    的頭像 發(fā)表于 06-13 08:25 ?355次閱讀
    車路云協(xié)同,這次它真的來<b class='flag-5'>了嗎</b>?

    如何將ASM集成到PSoC5LP項(xiàng)目中?

    : CPU_PSoC_5_Asm
    發(fā)表于 05-24 06:26

    采用ASM330LHH慣導(dǎo)模塊輸出異常的原因?

    硬件設(shè)備:單相機(jī)+IMU 融合算法:open_vins ASM330LHH設(shè)置ASM330LHH_XL_ODR_104Hz,ASM330LHH_2g,ASM330LHH_125dps
    發(fā)表于 03-25 06:06

    不會用AI的人被淘汰?訊飛AI鼠標(biāo)AM30助你迎接AI時代

    不會用AI的人被淘汰?訊飛智能鼠標(biāo)助你迎接AI時代 隨著AI時代的到來,人們對于智能助手的需求也日益增長。 想在這個競爭激烈的時代中不被淘汰
    的頭像 發(fā)表于 03-23 13:44 ?615次閱讀
    不會用AI的人被<b class='flag-5'>淘汰</b>?訊飛AI鼠標(biāo)AM30助你迎接AI<b class='flag-5'>時代</b>

    AI時代怎么樣不被淘汰?訊飛AI鼠標(biāo)助力你在AI時代成長

    AI時代怎么樣不被淘汰?訊飛AI鼠標(biāo)助力你在AI時代成長 隨著人工智能的發(fā)展,AI時代已經(jīng)悄然而至。在這個時代,不會使用AI技術(shù)的人將面臨被
    的頭像 發(fā)表于 03-23 11:41 ?592次閱讀
    AI<b class='flag-5'>時代</b>怎么樣不被<b class='flag-5'>淘汰</b>?訊飛AI鼠標(biāo)助力你在AI<b class='flag-5'>時代</b>成長

    鉛框架-ASM C7025 RoHS/鹵化物測試報告

    電子發(fā)燒友網(wǎng)站提供《鉛框架-ASM C7025 RoHS/鹵化物測試報告.pdf》資料免費(fèi)下載
    發(fā)表于 02-05 09:55 ?0次下載
    鉛框架-<b class='flag-5'>ASM</b> C7025 RoHS/鹵化物測試報告

    鉛框架-ASM TECH A194 RoHS/鹵化物測試報告

    電子發(fā)燒友網(wǎng)站提供《鉛框架-ASM TECH A194 RoHS/鹵化物測試報告.pdf》資料免費(fèi)下載
    發(fā)表于 02-05 09:54 ?0次下載
    鉛框架-<b class='flag-5'>ASM</b> TECH A194 RoHS/鹵化物測試報告

    【數(shù)據(jù)庫數(shù)據(jù)恢復(fù)】Oracle數(shù)據(jù)庫ASM實(shí)例無法掛載的數(shù)據(jù)恢復(fù)案例

    oracle數(shù)據(jù)庫ASM磁盤組掉線,ASM實(shí)例不能掛載。數(shù)據(jù)庫管理員嘗試修復(fù)數(shù)據(jù)庫,但是沒有成功。
    的頭像 發(fā)表于 02-01 17:39 ?371次閱讀
    【數(shù)據(jù)庫數(shù)據(jù)恢復(fù)】Oracle數(shù)據(jù)庫<b class='flag-5'>ASM</b>實(shí)例無法掛載的數(shù)據(jù)恢復(fù)案例

    鉛框架-ASM A 板塊RoHS/鹵化物測試報告

    電子發(fā)燒友網(wǎng)站提供《鉛框架-ASM A 板塊RoHS/鹵化物測試報告.pdf》資料免費(fèi)下載
    發(fā)表于 01-31 10:16 ?0次下載
    鉛框架-<b class='flag-5'>ASM</b> A 板塊RoHS/鹵化物測試報告

    redis的淘汰策略

    Redis是一種基于內(nèi)存的鍵值存儲系統(tǒng),為了充分利用內(nèi)存,Redis采用了一些淘汰策略來管理內(nèi)存空間。淘汰策略的作用是當(dāng)內(nèi)存空間不足時,選擇合適的數(shù)據(jù)對象進(jìn)行淘汰,釋放出更多的內(nèi)存空間,以供后續(xù)
    的頭像 發(fā)表于 12-04 16:23 ?457次閱讀

    要被電壓基準(zhǔn)長期漂移和遲滯所蒙蔽

    電子發(fā)燒友網(wǎng)站提供《不要被電壓基準(zhǔn)長期漂移和遲滯所蒙蔽.pdf》資料免費(fèi)下載
    發(fā)表于 11-22 11:00 ?0次下載
    不<b class='flag-5'>要被</b>電壓基準(zhǔn)長期漂移和遲滯所蒙蔽

    荷蘭半導(dǎo)體設(shè)備制造商ASM上調(diào)2025年?duì)I收目標(biāo)

    asm預(yù)計(jì)兩年內(nèi)銷售額將從28億至34億歐元增加到30億至36億歐元。asm還重申了2023至2025年的總利潤率為46%至50%,營業(yè)利潤率為26至31%的目標(biāo)。他還表示,將2026年至2027年設(shè)定了同樣的目標(biāo),此后營業(yè)利潤率將呈現(xiàn)上升趨勢。
    的頭像 發(fā)表于 09-27 09:45 ?820次閱讀