RM新时代网站-首页

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

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

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

IAR Embedded Workbench中的一些相關(guān)特性

IAR愛亞系統(tǒng) ? 來源:IAR愛亞系統(tǒng) ? 2023-05-26 10:24 ? 次閱讀

隨著電子技術(shù)的發(fā)展,客戶對嵌入式產(chǎn)品的期望也越來越高,對應(yīng)的嵌入式產(chǎn)品功能越來越豐富,里面包含的代碼也越來越復(fù)雜。很多時(shí)候很難把所有功能都實(shí)現(xiàn)之后再進(jìn)行測試驗(yàn)證,而是階段性的開發(fā)對應(yīng)的功能,然后進(jìn)行測試驗(yàn)證。為了能夠升級對應(yīng)MCU里面包含的Application,越來越多的的嵌入式產(chǎn)品會(huì)包含Bootloader進(jìn)行Application升級:修改之前的Bug和添加新的功能實(shí)現(xiàn)。

本文主要介紹IAR Embedded Workbench中的一些相關(guān)特性,幫助開發(fā)人員進(jìn)行Bootloader和Application聯(lián)合開發(fā)和調(diào)試。

一個(gè)Workspace同時(shí)包含Bootloader和Application工程

通常來說,Bootloader和Application需要單獨(dú)建立工程,在IAR Embedded Workbench中,可以在一個(gè)Workspace里面同時(shí)包含Bootloader和Application的工程:

479cd19e-fb2f-11ed-90ce-dac502259ad0.png

將變量放置到指定的地址

在IAR Embedded Workbench中,開發(fā)人員可以很方便的將變量放置到指定的地址:

·#pragma location ·@

在Bootloader和Application中,需要通過共享變量進(jìn)行交互(比如Bootloader傳給Application的MCU復(fù)位原因,Application傳給Bootloader的升級請求等),這些共享變量需要放置到指定的位置。

下面通過一個(gè)簡單的例子來說明利用#pragma location和@將變量放置到指定的地址:

/* Shared variables between Bootloader and Application                        */
#pragma location = 0x2001FFF8
static uint32_t UpdateRequest;
//#pragma location = 0x2001FFFC
static uint32_t McuResetReason @0x2001FFFC;

Build之后在生成的map文件中查看,對應(yīng)的變量會(huì)被放置到指定的地址:

UpdateRequest           0x2001'fff8    0x4  Data  Lc  main.o [3]
McuResetReason          0x2001'fffc    0x4  Data  Lc  main.o [3]

聲明變量不初始化

在IAR Embedded Workbench中,開發(fā)人員可以很方便的使用關(guān)鍵字__no_init將變量聲明為不初始化。

在Bootloader和Application中,有些變量是不能進(jìn)行初始化的,比如Bootloader傳給Application的MCU復(fù)位原因變量不能在Application中初始化,而Application傳給Bootloader的升級請求變量不能在Bootloader中初始化。

下面是在Bootloader中聲明Application傳給Bootloader的升級請求變量UpdateRequest不初始化:

/* Shared variables between Bootloader and Application                        */
#pragma location = 0x2001FFF8
__no_init static uint32_t UpdateRequest;
//#pragma location = 0x2001FFFC
static uint32_t McuResetReason @0x2001FFFC;

Build之后在生成的map文件中查看,對應(yīng)的變量類型是uninit

Absolute sections, part 1 of 2:               0x4
  .noinit            uninit   0x2001'fff8     0x4  main.o [3]
                            - 0x2001'fffc     0x4
Absolute sections, part 2 of 2:               0x4
  .bss               zero     0x2001'fffc     0x4  main.o [3]
                            - 0x2002'0000     0x4
計(jì)算Application Checksum并在Bootloader中校驗(yàn)

在Bootloader跳轉(zhuǎn)到Application之前,需要計(jì)算Application對應(yīng)的校驗(yàn)碼并和之前存取在Application的校驗(yàn)碼進(jìn)行比較,確保Application是完整的。

在IAR Embedded Workbench中內(nèi)嵌了ielftool,可以在Link的時(shí)候生成對應(yīng)代碼區(qū)域的校驗(yàn)碼并存儲(chǔ)在指定的地址:

47c226c4-fb2f-11ed-90ce-dac502259ad0.png

在Application ICF中把計(jì)算出的checksum放到對應(yīng)的地址:

place at address mem: 0x080FFFFC { section .checksum };

在Bootloader ICF中定義(define)并導(dǎo)出(exported)Application Checksum計(jì)算相關(guān)的信息:開始地址,結(jié)束地址以及存放對應(yīng)checksum的地址:

define symbol __ICFEDIT_region_FLASH_start__  = 0x08000000;
define symbol __ICFEDIT_region_FLASH_end__    = 0x08003FFF;
define exported symbol APPROM_start           = 0x08004000;
define exported symbol CHECKSUM_start         = 0x08004000;
define exported symbol CHECKSUM_end           = 0x080FFFFB;
define exported symbol CHECKSUM_address       = 0x080FFFFC;
define symbol APPROM_end                      = 0x080FFFFF;

在Bootloader 程序中計(jì)算對應(yīng)Application的checksum并和之前存放的checksum進(jìn)行比較:

extern uint32_t CHECKSUM_start;
extern uint32_t CHECKSUM_end;
extern uint32_t CHECKSUM_address;
/* Resets the CRC calculation unit */
CRC->CR = 0x01;
/* Calculate the code flash checksum using CRC calculation unit */
CrcValue = HAL_CRC_Accumulate(&hcrc, (uint32_t *)&CHECKSUM_start,
           (((uint32_t)&CHECKSUM_end - (uint32_t)&CHECKSUM_start + 1u)/4u));  
  
/* Compare the calculated checksum with the previously stored checksum */
/* Only jump to Applicstion when the checksum is the same              */
if(*((uint32_t *)&CHECKSUM_address) == CrcValue)

單獨(dú)調(diào)試Application

在IAR Embedded Workbench中調(diào)試時(shí),下載完成之后調(diào)試器會(huì)把PC設(shè)置為對應(yīng)應(yīng)用程序的起始地址(軟復(fù)位),這樣可以在沒有Bootloader的情況下,單獨(dú)調(diào)試Application。

注意:需要在Application初始化的時(shí)候把中斷向量重定向到Application的中斷向量表。

47ef37b8-fb2f-11ed-90ce-dac502259ad0.png 聯(lián)合調(diào)試Bootloader和Application

在開發(fā)Bootloader和Application時(shí),最后需要聯(lián)合調(diào)試,確保程序可以在Bootloader和Application正常跳轉(zhuǎn)。

IAR Embedded Workbench提供非常方便的功能幫助開發(fā)人員聯(lián)合調(diào)試Bootloader和Application。

通常來說Bootloader和Application的代碼放置到不同的Flash區(qū)域,可以單獨(dú)下載(下載Bootloader的時(shí)候不會(huì)影響Application,同理,下載Application的時(shí)候不會(huì)影響B(tài)ootloader)。當(dāng)然,也可以一起下載??梢宰孡inker在Bootloader中包含Application,或者Application中包含Bootloader(注意,不能同時(shí),否則會(huì)重復(fù)包含)。

下面以Application中包含Bootloader為例。在Project > Options > Linker > Input中輸入BOOT,并選擇對應(yīng)的Bootloader.bin文件:

48345cbc-fb2f-11ed-90ce-dac502259ad0.png 在Application的ICF文件中,把Bootloader放到對應(yīng)的Flash區(qū)域:

define exported symbol boot_vector = 0x08000000;
place at address mem: boot_vector { readonly section .BOOT };

這樣Bootloader就會(huì)包含在Application中:

  Section            Kind         Address    Size  Object
  -------            ----         -------    ----  ------
"A2":                                      0x18b8
  .BOOT              const     0x800'0000  0x18b8  Bootloader.bin [1]
                             - 0x800'18b8  0x18b8
"A0":                                       0x188
  .intvec            ro code   0x800'4000   0x188  startup_stm32f405xx.o [3]
                             - 0x800'4188   0x188
"P1":                                      0x78fc
  .text              ro code   0x800'4188   0xf12  xprintffull_nomb.o [7]
  .text              ro code   0x800'509a    0x2a  copy_init3.o [9]
  .text              ro code   0x800'50c4    0x16  strchr.o [9]
  .text              ro code   0x800'50dc    0x40  xfail_s.o [7]
  .text              ro code   0x800'511c    0x36  strlen.o [9]
  .text              ro code   0x800'5154    0x58  memchr.o [9]

調(diào)試時(shí),可以在Bootloader工程中加載Application的調(diào)試信息,也可以在Application工程中加載Bootloader的調(diào)試信息,從而實(shí)現(xiàn)Bootloader和Application聯(lián)合調(diào)試。

下面以Application工程師中包含Bootloader調(diào)試為例。在Project > Options > Debugger > Images中勾選“Download extra image”和“Debug info only”,并選擇對應(yīng)的Bootloader.out文件:

485cb3ec-fb2f-11ed-90ce-dac502259ad0.png

同時(shí)由于Bootloader和Application都包含__vector_table,需要在Project > Options > Debugger > Extra Option中輸入對應(yīng)的命令:--drv_vector_table_base=0x08000000(0x08000000是Bootloader的__vector_table地址)。這樣調(diào)試時(shí)調(diào)試器會(huì)使用Bootloader的__vector_table:

48b67800-fb2f-11ed-90ce-dac502259ad0.png

注意:不要勾選Project > Options > Debugger > Setup中的Run to main選項(xiàng),這樣調(diào)試的時(shí)候,下載完成之后調(diào)試器會(huì)讓程序停在對應(yīng)的入口地址,而不是main函數(shù):

48ec64d8-fb2f-11ed-90ce-dac502259ad0.png

這樣調(diào)試的時(shí)候,調(diào)試器會(huì)指向Bootloader的入口地址,通過View > Images打開對應(yīng)的Images窗口,里面會(huì)顯示Bootloader和Application的調(diào)試信息:

492ceb5c-fb2f-11ed-90ce-dac502259ad0.png

總結(jié)

本文主要介紹了IAR Embedded Workbench中的一些相關(guān)特性,幫助開發(fā)人員進(jìn)行Bootloader和Application聯(lián)合開發(fā)和調(diào)試。

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

    關(guān)注

    5082

    文章

    19104

    瀏覽量

    304793
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    350

    瀏覽量

    36664
  • 工程
    +關(guān)注

    關(guān)注

    0

    文章

    165

    瀏覽量

    27858

原文標(biāo)題:在IAR Embedded Workbench中進(jìn)行Bootloader和Application聯(lián)合開發(fā)和調(diào)試

文章出處:【微信號:IAR愛亞系統(tǒng),微信公眾號:IAR愛亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在IAR Embedded Workbench配置生成對應(yīng)代碼區(qū)域的CRC校驗(yàn)碼

    在“使用IAR Embedded Workbench和MCU的CRC模塊來檢查代碼的完整性”,介紹了如何在
    的頭像 發(fā)表于 10-27 11:49 ?1635次閱讀
    如何在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b><b class='flag-5'>中</b>配置生成對應(yīng)代碼區(qū)域的CRC校驗(yàn)碼

    IAR Embedded Workbench中計(jì)算多個(gè)地址區(qū)間的Checksum

    在前面的文章“使用IAR Embedded Workbench和MCU的CRC模塊來檢查代碼的完整性”中介紹了如何在IAR Embedded
    的頭像 發(fā)表于 01-05 12:33 ?1520次閱讀
    在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中計(jì)算多個(gè)地址區(qū)間的Checksum

    IAR版本為Embedded Workbench 6.5 Kickstart 1.4 編繹報(bào)錯(cuò)怎么解決?

    請教 IAR 這個(gè)錯(cuò)誤是什么問題 在IAR版本為Embedded Workbench 6.0 Kickstart 1.30 編繹正常沒出錯(cuò) 在I
    發(fā)表于 05-09 06:36

    IAR Embedded Workbench for RL78版本2.21.2

    大家好,請問誰有IAR Embedded Workbench for RL78版本 2.21.2這個(gè)軟件,可以發(fā)下嗎,郵箱1733517686@qq.com,謝謝了。
    發(fā)表于 10-11 17:06

    IAR Embedded Workbench中進(jìn)行ARM+RISC-V多核調(diào)試

    for RISC-V V3.20.1安裝在Embedded Workbench 9.1,需要在IAR Embedded
    發(fā)表于 06-14 16:55

    IAR Systems發(fā)布 IAR Embedded Wor

    IAR Systems發(fā)布 IAR Embedded Workbench for ARM新版本  IAR Systems發(fā)布
    發(fā)表于 02-11 09:14 ?1365次閱讀

    AVR IAR Embedded Workbench IDE用戶手冊

    嵌入式IAR Embedded Workbench個(gè)非常有效的集成開發(fā)環(huán)境(IDE),它使用戶充分有效地開發(fā)并管理嵌入式應(yīng)用工程。作為
    發(fā)表于 04-19 20:38 ?337次下載

    IAR_embedded_Workbench用戶指南介紹

    IAR embedded Workbench for ARM 是 IAR Systems 公司為 ARM 微處理器開發(fā)的 個(gè)集成開發(fā)環(huán)境
    發(fā)表于 11-09 18:08 ?90次下載

    IAR Embedded Workbench?集成開發(fā)環(huán)境已全面支持航順芯片HK32MCU系列

    IAR Systems?日前宣布:其最新發(fā)布的IAR Embedded Workbench for Arm? version 9.20已全面支持航順芯片HK32MCU系列,以保障基于H
    發(fā)表于 12-23 14:08 ?1763次閱讀

    IAR embedded Workbench激活工具下載

    IAR embedded Workbench的激活工具下載
    發(fā)表于 06-20 10:08 ?18次下載

    YRDKRX62N 快速入門指南(IAR Embedded Workbench)

    YRDKRX62N 快速入門指南 (IAR Embedded Workbench)
    發(fā)表于 04-12 19:14 ?0次下載
    YRDKRX62N 快速入門指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>)

    YRDKRL78G13 快速入門指南(IAR Embedded Workbench) Rev.1.01

    YRDKRL78G13 快速入門指南 (IAR Embedded Workbench) Rev.1.01
    發(fā)表于 04-13 18:49 ?0次下載
    YRDKRL78G13 快速入門指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>) Rev.1.01

    YRDKRX62N 快速入門指南(IAR Embedded Workbench)

    YRDKRX62N 快速入門指南 (IAR Embedded Workbench)
    發(fā)表于 08-04 18:30 ?1次下載
    YRDKRX62N 快速入門指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>)

    YRDKRL78G13 快速入門指南(IAR Embedded Workbench) Rev.1.01

    YRDKRL78G13 快速入門指南 (IAR Embedded Workbench) Rev.1.01
    發(fā)表于 08-10 18:31 ?0次下載
    YRDKRL78G13 快速入門指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>) Rev.1.01

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    全球知名的嵌入式系統(tǒng)開發(fā)軟件解決方案供應(yīng)商IAR Systems近日宣布,其旗艦產(chǎn)品IAR Embedded Workbench for Arm功能安全版已更新至最新版本9.50.3。
    的頭像 發(fā)表于 02-22 17:29 ?1388次閱讀
    RM新时代网站-首页