18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

3天內不再提示

極海MCU的ISP和IAP中程序跳轉運行問題分析

Geehy極海半導體 ? 來源:21ic論壇極海半導體專區(qū) ? 2025-10-10 14:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

《APM32芯得》系列內容為用戶使用APM32系列產品的經驗總結,均轉載自21ic論壇極海半導體專區(qū),全文未作任何修改,未經原文作者授權禁止轉載。

1、前言

最近在調試程序的程序升級方式,遇到了不少的問題,本篇筆記記錄一下遇到的一些問題及在這個過程中的一些問題及思考。

首先什么是ISP和IAP?

我這里簡單總結一下,簡單來說MCU程序更新的方式一般有3種:

1. IAP,在應用中編程,通過一些串行接口對應用程序進行更新的一種方式,其模式是BootLoader+APP的方式,且這兩部分的代碼一般均保存在MCU的Flash區(qū)域。

2. ISP,在系統(tǒng)中進行編程,一般是通過MCU廠商提供的一段保存在系統(tǒng)存儲區(qū)的程序,通過串行接口對Flash進行編程。

3. ICP,在電路中進行編程,一般是通過SWD/JTAG的方式對Flash進行編程。

程序跳轉運行

我這里使用的MCU是極海的APM32F103C8T6,由于其是基于ArmCortex-M3內核的一款芯片,其程序的跳轉運行非常簡單。

Cortex-M內核的芯片一般而言僅需在程序中改變PC、MSP寄存器至指定位置即可使得我們的程序跳轉至某處運行。

比如極海官方提供的例程:

/* Jump to user application */

JumpAddress = *(__IO uint32_t *) (address + 4);

Jump_To_Application = (pFunction) JumpAddress;

/* Initialize user application's Stack Pointer */

__set_MSP(*(__IO uint32_t *) address);

/* Jump to application */

Jump_To_Application();

2、跳轉運行遇到的一些問題

在實踐中,我發(fā)現(xiàn)若是在一個程序跳轉至另外一個程序的時候(如BootLoader跳轉至APP),若前段程序開啟了一些中斷,而后段程序未開啟相關中斷的情況下會導致程序無法正常運行。

如設計一個IAP程序:

BootLoader無任何中斷打開,而APP開啟的滴答中斷,若此時我們在APP中使用的是程序跳轉運行的方式回到BootLoader,此時會造成BootLoader程序無法正常響應滴答中斷(因為BootLoader程序沒有滴答中斷服務函數(shù))。從而導致我們的BootLoader程序異常卡死。

e7f39c34-99ef-11f0-8c8f-92fbcf53809c.png

3、解決問題

理論上,若BootLoader或者APP單獨保存在flash中,并以復位運行的操作下,我們的程序都是可以正常運行的,而問題在于我們跳轉運行會導致異常。

從上面的理論,我們總結一下:

1. 跳轉運行會導致程序異常。

2. 復位運行不會導致程序異常。

從上面兩點,我們引申思考得到:我們只要在程序跳轉前將芯片的各個狀態(tài)保持回到復位狀態(tài),我們就可以保證程序跳轉后能夠正常運行。

那么問題來了,復位狀態(tài)是一個什么樣的狀態(tài)?

復位時芯片剛剛上電,此時的MCU

1. 各個外設時鐘均未打開。

2. 對中斷的設置均未進行。

那么我們根據(jù)這個思路,來編寫我們重新跳轉前的程序:

1. 關閉中斷響應,保證我們的后續(xù)“還原至復位狀態(tài)的”操作不會被中斷。

2. 關閉所有的中斷使能及還原芯片中斷寄存器狀態(tài)。

3. 關閉所有外設的時鐘并對外設進行復位。

4. 設置主時鐘為HSI。

5. 開啟中斷響應。

最后跳轉至目標程序區(qū)域

e8578a64-99ef-11f0-8c8f-92fbcf53809c.png

那完成以上操作后就可以保證一定程度上保證我們的程序能夠回到“復位狀態(tài)”在去執(zhí)行我們的目標程序啦。

這里我也貼一段代碼提供給大家參考。

void ResetSystem(void)

{

/* Set the interrupt shielding position and prohibit all interruptions. */

__set_PRIMASK(1);

/* Disable all peripheral clocks */

RCM->APB2CLKEN = 0;

RCM->APB1CLKEN = 0;

RCM->AHBCLKEN = 0;

/* Reset all peripherals */

RCM->APB2RST = 0xFFFFFFFF;

RCM->APB1RST = 0xFFFFFFFF;

RCM->AHBRST = 0xFFFFFFFF;

RCM->APB2RST = 0;

RCM->APB1RST = 0;

RCM->AHBRST = 0;

/* Disable all interruptions */

for (uint8_t i; i < 8; i++)

{

NVIC->ICER[i] = 0xFFFFFFFF;

NVIC->ICPR[i] = 0xFFFFFFFF;

}

/* Configure the external interrupt controller and set all the interrupt

mask and trigger method to 0. */

EINT->IMASK = 0x0;

EINT->EMASK = 0x0;

EINT->RTEN = 0x0;

EINT->FTEN = 0x0;

EINT->IPEND = 0x0;

/* Set HSIEN bit */

RCM->CTRL_B.HSIEN = BIT_SET;

/* Reset SCLKSEL, AHBPSC, APB1PSC, APB2PSC, ADCPSC and MCOSEL bits */

RCM->CFG &= (uint32_t) 0xF8FF0000;

__set_PRIMASK(0);

}

以上便是一份我本次的思考與總結,歡迎大家斧正。

原文地址:https://bbs.21ic.com/icview-3311062-1-1.html

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

    關注

    147

    文章

    18420

    瀏覽量

    380721
  • 接口
    +關注

    關注

    33

    文章

    9307

    瀏覽量

    155713
  • 程序
    +關注

    關注

    117

    文章

    3832

    瀏覽量

    84561

原文標題:APM32芯得 EP.63 | APM32F103C8T6_關于ISP_IAP中程序跳轉運行的思考

文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32 MCU IAP例程分析

    STM32 MCU IAP例程跳轉到APP代碼簡要分析
    發(fā)表于 05-15 14:30

    IAP程序跳轉到APP只能運行大約2秒

    );} 問題:如果設置了" __MSR_MSP (AppSpInitVal);//設置SP.,則跳轉過去大約2秒就又回到IAP程序了;而不操作這個SP,則可以正常運行,實際上就是在
    發(fā)表于 03-14 08:05

    淺析STM32的IAP與APP互相跳轉

    很多問題?,F(xiàn)將IAP學習過程和實際遇到問題總結一下。首先說一下什么是IAP。IAP(In Application Programming)即在應用編程,IAP是用戶自己的
    發(fā)表于 08-05 07:24

    MCU bootload IAP程序是如何跳轉

    MCU bootloadIAP程序是如何跳轉的?需要注意哪些事項呢?
    發(fā)表于 11-29 07:48

    ISPIAP的區(qū)別

    ISPIAP的區(qū)別       IAP: in applicatin progr
    發(fā)表于 12-28 11:28 ?1885次閱讀

    STC-USER-IAP-ISP-DEMO程序

    STC-USER-IAP-ISP-DEMO
    發(fā)表于 11-16 19:12 ?14次下載

    關于如何利用STM8S做IAP的步驟

    ,個人感覺叫IAP更合適。IAP程序燒寫到flash中程序最開始運行的地方,這個程序負責升級更新
    發(fā)表于 09-20 20:29 ?14次下載
    關于如何利用STM8S做<b class='flag-5'>IAP</b>的步驟

    STM32 IAP - Boot跳轉到APP

    簡單IAP設計思路:單片機上電首先運行BootLoader程序; Bootloader如果檢測到需要更新APP,則首先進行更新,更新完成后跳轉到APP并
    發(fā)表于 12-03 14:21 ?13次下載
    STM32 <b class='flag-5'>IAP</b> - Boot<b class='flag-5'>跳轉</b>到APP

    單片機的燒錄方式:ISP、ICP、IAP的區(qū)別

    單片機的燒錄方式:單片機三種燒錄方式ISP、IAP和ICP有什么不同?單片機三種燒錄方式ICP、IAPISP詳解單片機程序燒錄的3種方式(
    發(fā)表于 12-03 18:21 ?27次下載
    單片機的燒錄方式:<b class='flag-5'>ISP</b>、ICP、<b class='flag-5'>IAP</b>的區(qū)別

    STM32+IAP+uCOS-iii升級跳轉至APP程序跑飛問題

    最近項目中MCU使用的是STM32F103,APP程序操作系統(tǒng)使用的是uCOS-iii,在進行IAP升級時發(fā)現(xiàn),從Bootloader跳轉至APP
    發(fā)表于 12-09 09:51 ?16次下載
    STM32+<b class='flag-5'>IAP</b>+uCOS-iii升級<b class='flag-5'>跳轉</b>至APP<b class='flag-5'>程序</b>跑飛問題

    關于STM32 BOOT和IAP跳轉的流程梳理

    前言首先先簡要的介紹一下boot和iap。boot( Bootlader)引導裝載程序。單片機上電程序開始運行的時候就是運行的該部分的代碼,
    發(fā)表于 12-23 19:03 ?29次下載
    關于STM32 BOOT和<b class='flag-5'>IAP</b><b class='flag-5'>跳轉</b>的流程梳理

    MCU ISP Tools安裝程序

    MCU ISP Tools安裝程序
    發(fā)表于 07-08 10:22 ?25次下載

    MCU型號表

    MCU型號表
    發(fā)表于 11-09 21:03 ?0次下載
    <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>MCU</b>型號表

    AN040 IAP程序跳轉說明

    AN040 IAP程序跳轉說明
    發(fā)表于 02-23 19:11 ?0次下載
    AN040 <b class='flag-5'>IAP</b><b class='flag-5'>程序</b><b class='flag-5'>跳轉</b>說明

    什么ISP?什么是IAP

    做單片機開發(fā)的工程師經常會聽到兩個詞:ISPIAP,但新手往往對這兩個概念不是很清楚,今天就來和大家聊聊什么是ISP,什么是IAP?
    的頭像 發(fā)表于 01-28 09:26 ?5639次閱讀
    什么<b class='flag-5'>ISP</b>?什么是<b class='flag-5'>IAP</b>?