伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

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

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

3天內不再提示

表及其在固件層中的位置

劉高 ? 來源:ccly0208 ? 作者:ccly0208 ? 2022-07-28 14:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通常,需要有一種方法來更改參數值,而無需重新編譯源代碼。

由于人力短缺,我們最近決定分包一個簡單的電子設計,包括硬件和軟件。我寫了一個規范,但事實證明,我所期望的常識被設計師完全忽略了,因為他不知道我想要什么。他本可以問的,但那是另一回事了。“如果一個年輕的工程師沒有這方面的知識,也許還有其他人,”我想,此時我感覺博客要上線了(我應該去躺下)。

當您編寫一個軟件時,大多數時候您使用常量來確定諸如執行循環的次數、激活輸出之前等待的時間等等。在一個簡單的 C 程序中,這些常量是使用#define宏以如下形式建立的:

#define WAIT_TIME_BEFORE_ACTIVATING_SOLENOID 4000 //time in mS

可以有這些常量的完整列表。當您想修改某些內容時,您只需轉到宏定義,更改值,然后重新編譯。這一切都很好,但是很多時候用戶想要改變系統的性能并且沒有知識或資源來做到這一點,更不用說讓你的源代碼進入公共領域了。所需要的是一種無需重新編譯源代碼即可更改參數值的方法。

想想您可以在現代車輛中更改的參數——您可以對鎖車后燈保持亮起的時間進行編程您可以啟用/禁用接近傳感器并且——根據汽車的復雜程度——你可以改變幾十到幾百個。現代系統通常將允許使用用戶界面或通過通信通道進行某種下載來更改這些參數。顯然,這些參數必須駐留在可以重新配置的內存中——有時是 RAM,但主要是配置為像 EEPROM 一樣執行的 EEPROM 或閃存。

當您在 C 中聲明一個常量時,如下所示:

const uint16_t iVariable1 = 45;
const uint16_t iVariable2[4]= {45,46,47,48};

大多數編譯器會將這些組合在一起,并將結果數據放在閃存中的某個位置。我不相信有任何保證它們會相鄰。在沒有專用 EEPROM 的 micros 中,并不是所有的 flash 存儲器都可以當作 EEPROM 來處理,所以通常會有一條指令說服編譯器將一些內存空間當作 EEPROM 來處理。例如,在使用 Keil 編譯器的 Cypress PSoC4 上,指令如下所示:

const uint8_t EmEEPROM_em_EepromStorage[EmEEPROM_PHYSICAL_SIZE] __ALIGNED(CY_FLASH_SIZEOF_ROW) = {0u};

但是您的處理器和編譯器會有所不同。

為了確保 EEPROM 中的所有元素都是相鄰的(稍后我將解釋原因),我很想創建一個數組(或者可能是一個結構),就像我在 PSoC4 聲明中所做的那樣:

uint8_t eepromArray[48];

然后通過一個enum或一組#defines,確定數組的哪個元素與特定參數相關聯。

現在,讓我回到我們將微控制器嵌入恐龍跟蹤設備的時間。那時,還沒有 EEPROM。后來,EEPROM 以外部設備的形式提供。然而,客戶仍然希望在不重新編譯的情況下更改參數。

開發系統很笨重,獨立的(通常是便攜式的)PROM 編程器通常是必要設備的一部分。該技術是使用上述一些技術在 EPROM(外部或嵌入在微型計算機中)中創建一個表作為程序的一部分。客戶將能夠使用 EPROM 編程器從主 IC 甚至目標設備讀取二進制代碼,轉到表位置并修改存在的數字,然后將整個 shebang 編程回空白 EPROM。然后他/她將 EPROM 插回目標套接字——不需要程序匯編-鏈接-加載-編譯。

不同模塊的鏈接和位置是命令行的一部分(可以從批處理文件中輸入),并且有很多關于如何在不同位置定位內存的不同部分的文檔。如果您使用的是外部內存或內存分區設備,則可能會有很多這樣的分配。不管好壞,這個功能已經被升華了,并且作為現代用戶界面的一部分,細節并不容易獲得,盡管從我有時會在屏幕上看到閃爍的一閃而過的一瞥中,我認為那些命令行可能仍然存在。

在小型系統上,這種舊技術可能仍然是實現客戶可配置性的唯一方法。在引發此博客的項目中,我們的客戶要求重新配置表格,而我們的分包商將“表格”解釋為一堆#defines重新編譯。

使用const聲明很容易;問題在于桌子的位置。可以從編譯報告中提取內存中的確切位置(同樣,每個處理器/編譯器可能不同),但該位置可能因每次編譯迭代而異。使用固定位置的想法有很多值得推薦的地方。我對如何使用 PSoC 微控制器解決這個問題有一個相當好的想法,但上述項目中的處理器是 Microchip Atmega328,這意味著我有一個大問題——我根本不知道。

有一些關于在 Atmega 上實現此功能的在線討論。該設備實際上具有 EEPROM,因此將表格放在那里可能同樣容易,但這僅在開發工具允許您更改 EEPROM 值甚至程序存儲器時才有用。時間會證明一切。

兩個分開的想法:一些關鍵任務設備具有檢查內存校驗和以確保程序內存正常的例程。在這種情況下,校驗和計算應排除任何要調整的表。

調整影響軟件性能的參數實際上可能會突出或掩蓋程序中的缺陷。但不能保證僅僅因為您可以更改性能,您的軟件就沒有錯誤。我曾經有一個上司受此錯覺困擾——我在那份工作上只干了三個月。

后記


在重新設計之后,我們的分包商選擇將表格放置在 EEPROM 中。看來 Atmel Studio 7 確實允許您訪問 EEPROM,但它不會將內容顯示為屏幕上的表格。分包商采用的流程是使用 Atmel Studio 7(在 PC 上運行)將 EEPROM 內容讀入 hex 文件,編輯 hex 文件的內容,為已更改的每一行創建一個新的校驗和,重新保存文件,然后將文件寫回 EEPROM。您還必須來回更改一些微型的內部“開關”以訪問 EEPROM,然后返回標準操作。這似乎有點令人費解——我確實希望找到一種更優雅的方式。

后記


我剛剛嘗試了 PSoC Programmer,看看是否可以直接從用戶界面 (UI) 修改一個字節。雖然不需要切換微控制器的編程設置,但不幸的是,它仍然需要與上述相同的技術來編輯 hex 文件。

由于缺乏一個像樣的程序員界面,也許這個整個表格的概念在未來不會起作用。或者也許我們應該投資一個具有合適用戶界面的第三方程序員(如果這樣的野獸仍然存在的話)。

審核編輯:湯梓紅

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

    關注

    1

    文章

    1672

    瀏覽量

    51858
  • C程序
    +關注

    關注

    4

    文章

    255

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    電壓放大器主動約束阻尼板研究測試的應用

    主動約束阻尼結構采用壓電或其他智能材料取代經典約束阻尼結構的約束,并通過引入主動控制系統,進一步增強約束阻尼對振動能量的耗散能力。
    的頭像 發表于 03-09 14:33 ?156次閱讀
    電壓放大器<b class='flag-5'>在</b>主動約束<b class='flag-5'>層</b>阻尼板研究測試<b class='flag-5'>中</b>的應用

    倍加福電感式距離傳感器開關閥位置反饋的應用

    在過程工業的復雜體系里,閥門開關宛如“流量指揮官”,掌控著液體與氣體物質的流動走向。當這些閥門為開關閥時,開啟和關閉過程,它們會被移動到既定的終點位置
    的頭像 發表于 02-10 13:34 ?422次閱讀

    固件版本錯配:一個讓老工程師都栽過跟頭的“低級錯誤”

    的硬件版本號是否一致,并簽字確認。自動校驗:通過燒錄腳本或中間件軟件,燒錄啟動前自動計算所選固件文件的MD5或SHA256校驗值,與“版本對應預存的基準值進行比對。校驗失敗則立
    發表于 12-18 10:31

    Bootloader固件升級的步驟

    ,也可以不更新,項目中,我們通常會對 FW 版本號進行對比,會將 MCU 的 App 程序更新最新的版本,起到固件升級的效果。更新的話,BootLoader 更新完程序后,跳轉到新程序運行;不更新
    發表于 11-19 07:41

    AMIAptio V UEFI固件成功部署后量子密碼學

    AMI實現行業首創:Aptio V UEFI固件成功部署后量子密碼學 亞特蘭大2025年11月13日 /美通社/ -- 動態固件領域的全球領導者AMI?欣然宣布,其旗艦產品Apti
    的頭像 發表于 11-13 21:08 ?417次閱讀

    AES加解密算法邏輯實現及其蜂鳥E203SoC上的應用介紹

    ,算法的循環輪數就要增加2輪。 AES密碼算法的內部結構由多個構成,每一都是對整個處理塊16字節進行操作,并且循環多輪進行處理。加密運算,每一輪運算包含四種不同類型的
    發表于 10-29 07:29

    激光焊接技術焊接緊固件工藝的應用

    激光焊接技術作為現代制造業的重要工藝方法,已在多個工業領域展現出顯著的技術優勢。固件焊接應用,激光焊接憑借其高能量密度、精確可控及高效靈活的特點,逐漸替代了部分傳統焊接方式,成
    的頭像 發表于 09-15 16:58 ?865次閱讀
    激光焊接技術<b class='flag-5'>在</b>焊接緊<b class='flag-5'>固件</b>工藝<b class='flag-5'>中</b>的應用

    業內分享熱敏電阻智能電能中常用的型號及相關特性

    電能不同環境溫度下的正常運行,提高電能的穩定性和可靠性。 不同型號的PTC和NTC熱敏電阻,其阻值范圍、工作溫度范圍等參數不同,決定了它們電能
    發表于 09-10 10:50

    如何保障遠程運維過程的數據安全和隱私?

    LZ-DZ100背面 分布式光伏集群的遠程運維,數據安全和隱私保護面臨多重風險,包括 傳輸過程的竊聽 / 篡改、未授權訪問控制指令、設備固件被惡意植入、敏感數據(如站點
    的頭像 發表于 08-22 10:26 ?1148次閱讀
    如何保障遠程運維過程<b class='flag-5'>中</b>的數據安全和隱私?

    IDE運行固件內自帶的AI程序,約2分鐘左右就死機了,為什么?

    1、IDE運行固件內自帶的AI程序,約2分鐘左右就死機,點擊停止報 繁忙,點連接也報 忙碌。從資源管理器中點擊CanMV可以訪問下一級文件夾。 2、過幾分鐘后
    發表于 06-06 07:28

    氧化制備芯片制造的重要作用

    本文簡單介紹了氧化制備芯片制造的重要作用。
    的頭像 發表于 05-27 09:58 ?1802次閱讀
    氧化<b class='flag-5'>層</b>制備<b class='flag-5'>在</b>芯片制造<b class='flag-5'>中</b>的重要作用

    SLIP協議及其直流電能的應用

    SLIP協議憑借其簡潔性,直流電能等嵌入式設備仍占一席之地。
    的頭像 發表于 05-20 14:34 ?819次閱讀
    SLIP協議<b class='flag-5'>及其</b><b class='flag-5'>在</b>直流電能<b class='flag-5'>表</b><b class='flag-5'>中</b>的應用

    fx3 sdk的usb control centerwin10以上系統燒寫固件失敗怎么解決?

    fx3 sdk1.3的usb control centerwin10和以上系統燒寫固件失敗,狀態欄提示failed,win7系統
    發表于 05-08 06:00

    為什么無法USB控制中心選擇固件映像文件?

    開發 CYUSB3KIT-003 固件并將固件映像文件下載到 FX3 時遇到了一個問題。 我通過將 PMODE[2:0] 配置為 F11 來設置 USB 啟動模式,并像往常一樣將新開發的
    發表于 05-07 06:14

    芯片制造的阻擋沉積技術介紹

    本文介紹了芯片銅互連工藝需要阻擋的原因以及關鍵工藝流程。
    的頭像 發表于 05-03 12:56 ?3848次閱讀
    芯片制造<b class='flag-5'>中</b>的阻擋<b class='flag-5'>層</b>沉積技術介紹