chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個跟地址對齊有關的應用異常案例

茶話MCU ? 來源:lq ? 2019-02-04 15:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

曾有STM32用戶反饋,他發(fā)現(xiàn)同樣代碼在STM32F1系列芯片上運行好好的,而且代碼跟STM32外設關聯(lián)性也不大。而當代碼運行在stm32L071VB單片機時,在做數(shù)據(jù)的內存拷貝時會進入硬件錯誤【Hard Fault】,覺得不可理解。

它定義了類似下面的數(shù)據(jù)結構,并用到預編譯命令安排結構體數(shù)據(jù)成員的存放對齊原則:

#pragma pack? (1)

Struct Comm_Frame {

uint8_t Head;

uint16_t Data[3];

uint8_t Class;

uint16_t Tail [2];

} Stream;

#pragma pack ()

他使用到基于上面結構體定義的數(shù)據(jù)變量進行數(shù)據(jù)通信,為了讓數(shù)據(jù)成員在內存中緊湊連續(xù)存放,將數(shù)據(jù)結構體的地址對齊規(guī)則指定為字節(jié)對齊,即使用#pragma pack (1)。數(shù)據(jù)在內存中像下面樣子擺放:

他這樣設計的話,數(shù)據(jù)結構體中的Data[]和Tail[]雙字節(jié)數(shù)據(jù)會出現(xiàn)在奇數(shù)地址的地方。那么,當將上述Stream.Data[]數(shù)據(jù)拷貝出去的時候,在基于雙字節(jié)數(shù)據(jù)類型的指針尋址訪問時,會出現(xiàn)被訪問數(shù)據(jù)的地址不遵循2倍數(shù)的原則,即出現(xiàn)訪問地址不對齊的問題,可能導致運行出錯。一般來講,對于ARM內核的芯片,基于雙字節(jié)數(shù)據(jù)寬度的尋址訪問時,被訪問數(shù)據(jù)的地址要求是2的倍數(shù);基于4字節(jié)數(shù)據(jù)寬度的尋址訪問時,地址要求是4的倍數(shù)。

比如:這里定義了一個數(shù)組uint16_t forcomp[3]和下面兩個指針:

uint16_t *pointer1 = &forcomp[0];

uint16_t *pointer2 = &Stream.Data[0];

現(xiàn)將上面結構體成員Stream.Data[]的內容通過指針尋址按如下方式拷貝進?forcomp[]?。

上面的代碼如果運行在基于M0或M0+內核的STM32芯片的話,就會出現(xiàn)Hard Fault錯誤. 客戶使用的芯片stm32L071VBT6正是基于M0+內核的STM32芯片。

為什么會這樣呢?這可以從Cortex M0/M0+的內核技術手冊上看到相關描述:

顯然,基于M0、M0+內核的芯片,它是不支持非對齊尋址訪問的。

客戶又說過,相同代碼在STM32F1芯片上運行又沒有問題,那怎么解釋呢?

STM32F1系列MCU是基于ARMCortex M3內核的芯片,關于地址對齊方面跟M0/M0+有所不同。M3內核支持部分指令的非對齊地址訪問,相關描述如下:

也就是說,基于CortexM3內核的芯片,它支持部分指令的非對齊訪問,但非對齊訪問要慢于對齊訪問。即非對齊訪問是需要代價的,訪問效率會受到影響。所以,我們在應用中要盡量遵循地址對齊的尋址訪問方式。關于地址對齊話題,在各個ARM內核技術參考手冊里略有介紹。

結合本案的實際情況,碰巧用戶代碼先是可以正常運行于基于M3內核的STM32F1芯片,而在基于M0+內核的芯片上出現(xiàn)了異常。導致他覺得不好理解。

這里,指針所指數(shù)據(jù)類型為雙字節(jié)類型,為了避免在M0/M0+內核芯片里尋址訪問時發(fā)生非對齊而導致的異常,可以將結構體變量的內存地址對齊方式改為雙字節(jié)對齊,即使用#pragma pack (2)。數(shù)據(jù)在內存中像下面這樣擺放。

這樣修改后,經過測試的確沒有問題。結合到客戶的具體情況,客戶希望數(shù)據(jù)連續(xù)、緊湊存放,不希望數(shù)據(jù)間有空隙,即結構體數(shù)據(jù)成員的內存地址對齊規(guī)則不變,仍然采用pack(1)。那么,數(shù)據(jù)拷貝操作時可以將雙字節(jié)數(shù)據(jù)類型的指針強轉為單字節(jié)數(shù)據(jù)類型的指針,將雙字節(jié)數(shù)據(jù)按字節(jié)對齊尋址方式分作兩次連續(xù)讀取完成。此時,用戶只需將應用程序稍作調整即可。

所以,在STM32開發(fā)過程中,有些代碼或許跟MCU外設沒什么關系,但可能跟內核有關。STM32系列眾多,涉及多個ARM內核,不同的內核在諸多方面存在些差異,這點需要注意。其實,從MCU軟件開發(fā)層面來看,地址對齊問題、中斷優(yōu)先級安排問題、堆棧安排問題,都是些比較隱蔽的問題,出錯了后果往往也很嚴重,我們平時可以多留意下。

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

    關注

    2293

    文章

    11032

    瀏覽量

    365029
  • 代碼
    +關注

    關注

    30

    文章

    4900

    瀏覽量

    70756
  • 數(shù)據(jù)結構

    關注

    3

    文章

    573

    瀏覽量

    40755

原文標題:一個跟地址對齊有關的應用異常案例

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    CYPD5235的CC Pin功能異常,還可能會什么有關?

    /VSYS/VDDD/V5V_P1的電都是正常的。 請教問題: 1。CYPD5235的CC Pin功能異常,還可能會什么有關? 2。去掉的MP8859,會影響CYPD5235的軟件代碼執(zhí)行嗎?如果會
    發(fā)表于 05-30 07:04

    PCB布局太亂? Altium Designer這個快捷鍵幫你對齊全場

    在做PCB設計的時候,你是否也遇到過這種情況: 器件擺好但總感覺歪歪扭扭? 有些元件間距不致,看著難受? 想對齊一個個拖動,累得不行? 別急!今天教你招? Altium Desi
    的頭像 發(fā)表于 04-14 09:09 ?2463次閱讀
    PCB布局太亂? Altium Designer這個快捷鍵幫你<b class='flag-5'>一</b>秒<b class='flag-5'>對齊</b>全場

    ADS1282的數(shù)據(jù)采樣率那些量有關?

    哪位能告訴我ADS1282的數(shù)據(jù)采樣率那些量有關嗎?怎么設置?是不是CLK、SCLK有關
    發(fā)表于 02-08 08:50

    Orcad繪制原理圖的元器件對齊方法

    在使用Orcad軟件繪制原理圖的時候,為了使原理圖繪制的美觀些,有時候也希望像PCB設計樣,將所有的器件都進行對齊,這里我們給大家介紹下,原理圖器件對齊的方法,方便大家在原理圖設計
    的頭像 發(fā)表于 02-07 10:33 ?1470次閱讀
    Orcad繪制原理圖的元器件<b class='flag-5'>對齊</b>方法

    MAC地址的作用范圍,MAC地址怎么申請?

    物理地址(PhysicalAddress),用于在網(wǎng)絡中唯標示網(wǎng)卡。以下是英利檢測針對其作用范圍及申請方式的詳細解答:MAC地址的作用
    的頭像 發(fā)表于 12-19 17:44 ?1608次閱讀
    MAC<b class='flag-5'>地址</b>的作用范圍,MAC<b class='flag-5'>地址</b>怎么申請?

    文分清IP地址、子網(wǎng)和子網(wǎng)掩碼的關系

    大家在進行IPv4地址配置時都看到過“子網(wǎng)掩碼”這樣的參數(shù)名,許多小伙伴都會疑惑這是啥?有什么用呢? 下面帶領大家認識認識子網(wǎng)掩碼以及其密不可分的子網(wǎng)! 1 IP地址、子網(wǎng)和子網(wǎng)掩
    的頭像 發(fā)表于 12-07 10:20 ?3211次閱讀
    <b class='flag-5'>一</b>文分清IP<b class='flag-5'>地址</b>、子網(wǎng)和子網(wǎng)掩碼的關系

    KiCad的對齊工具不好用?

    “ ?不存在的。唯的原因是您還沒有學會怎么用。 ? ” 對齊命令在哪里? KiCad的對齊命令(Align)藏得比較隱蔽,既不在菜單欄,也不在工具欄。右鍵的菜單中默認也不存在。只有當您 選中兩
    的頭像 發(fā)表于 12-04 18:15 ?1252次閱讀
    KiCad的<b class='flag-5'>對齊</b>工具不好用?

    I2S有左對齊,右對齊標準的I2S三種格式,那么這三種格式各有什么優(yōu)點呢?

    大家好,關于I2S格式,有兩疑問請教下 我們知道I2S有左對齊,右對齊標準的I2S三種格式,那么這三種格式各有什么優(yōu)點呢? 而且對于
    發(fā)表于 10-21 08:23

    IP地址會被黑?

    IP地址會被黑?是的,你的IP地址如果不幸被惡意分子盯上,就會被惡意利用,這會引發(fā)系列明顯的異常表現(xiàn)。就像網(wǎng)絡會突然變得異常緩慢,下載速度
    的頭像 發(fā)表于 09-12 14:24 ?755次閱讀

    如何獲取MAC地址?MAC地址的三申請條件

    在產品設備都規(guī)范化管理的當今社會,如果您的產品設備想要投入市場,設備物理地址碼MAC地址則是唯能識別設備的識別碼。那么MAC地址的申請條件有哪些?接下來請看英利檢測的分享。提交必要信
    的頭像 發(fā)表于 09-06 17:14 ?1041次閱讀
    如何獲取MAC<b class='flag-5'>地址</b>?MAC<b class='flag-5'>地址</b>的三<b class='flag-5'>個</b>申請條件

    IP地址與子網(wǎng)劃分

    子網(wǎng)的劃分,實際上就是設計子網(wǎng)掩碼的過程,它指的是指將給定的IP網(wǎng)絡地址空間劃分為更小的子網(wǎng)絡。 在子網(wǎng)掩碼中用1和0來分別網(wǎng)絡號和主機號,其中是1的表示是網(wǎng)絡部分,0表示的是主機部分,所有
    的頭像 發(fā)表于 09-06 09:46 ?819次閱讀

    文帶你了解IP地址別名

    、什么是IP地址別名 IP地址別名是將多個IP地址網(wǎng)絡接口關聯(lián)起來的
    的頭像 發(fā)表于 09-05 14:11 ?550次閱讀

    DHCP服務異常與IP地址管理挑戰(zhàn)

    DHCP是種計算機網(wǎng)絡協(xié)議,主要用于自動分配IP地址、子網(wǎng)掩碼、網(wǎng)關、DNS等網(wǎng)絡參數(shù)給客戶端設備。它是局域網(wǎng)中實現(xiàn)自動IP地址分配的重要協(xié)議,極大地簡化了網(wǎng)絡管理員對IP地址的管理
    的頭像 發(fā)表于 08-30 14:35 ?2771次閱讀

    谷景科普電感的感值什么有關

    感值也就是我們常說的電感量,它是電感的非常重要的性能參數(shù),衡量的是電感在電路中對電流變化的抵抗能力的物理量。那么,你知道電感值與哪些因素有關嗎? 有人說電感越大它的電感值就越大的,分裝尺寸大小
    的頭像 發(fā)表于 08-19 10:31 ?843次閱讀

    IP地址追蹤與網(wǎng)絡犯罪調查

    如今,網(wǎng)絡犯罪已經成為維護網(wǎng)絡安全中不可忽視的話題。IP 地址追蹤是執(zhí)法機構打擊網(wǎng)絡犯罪的重要手段之。通過 IP 地址追蹤,執(zhí)法機構能夠獲取有關犯罪嫌疑人的位置以及運動軌跡等,來推動
    的頭像 發(fā)表于 08-02 11:42 ?853次閱讀