国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

boot跳入APP,APP使用RTX5,導致程序卡死無法進入main函數(shù)的問題

這篇具有很好參考價值的文章主要介紹了boot跳入APP,APP使用RTX5,導致程序卡死無法進入main函數(shù)的問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

RTX5的內核初始化osKernelInitialize()其實會在main函數(shù)之前調用一次,加了boot程序之后,在調用main函數(shù)之前在這會報錯,導致無法進入main函數(shù)。

// ?==== Public API ====

/// Initialize the RTOS Kernel.
osStatus_t osKernelInitialize (void) {
? osStatus_t status;

? osRtxKernelPreInit();
? EvrRtxKernelInitialize();
? if (IsIrqMode() || IsIrqMasked()) {
? ? EvrRtxKernelError((int32_t)osErrorISR);
? ? status = osErrorISR;
? } else {
? ? status = __svcKernelInitialize();
? }
? return status;
}

函數(shù)原型就是上面的代碼,狀態(tài)被置為status = osErrorISR;

當去掉boot后第一次會運行else的代碼程序正常,加上boot后,當app代碼量比較少的時候第一次內核初始化雖然會報錯,但是程序還可以跑起來,當程序量比較大的時候,app就跑不起來了。

最后找到原因,定位在中斷向量表和總中斷的開啟。

int main(void)
{
    SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; 
    __enable_irq();
}

之前有問題的寫法就是在main函數(shù)的開頭開啟總中斷和修改中斷向量表。因為RTX5第一次內核的初始化會在main函數(shù)之前調用,這就導致了RTX5的堆棧初始化失敗從而導致app無法正常運行。

向量表修改

/**
  * @brief  Setup the microcontroller system
  *         Initialize the FPU setting and  vector table location
  *         configuration.
  * @param  None
  * @retval None
  */
void SystemInit (void)
{
#if defined (DATA_IN_D2_SRAM)
 __IO uint32_t tmpreg;
#endif /* DATA_IN_D2_SRAM */

  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2)));  /* set CP10 and CP11 Full Access */
  #endif
  /* Reset the RCC clock configuration to the default reset state ------------*/

   /* Increasing the CPU frequency */
  if(FLASH_LATENCY_DEFAULT  > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  {
    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
    MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  }

  /* Set HSION bit */
  RCC->CR |= RCC_CR_HSION;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */
  RCC->CR &= 0xEAF6ED7FU;

   /* Decreasing the number of wait states because of lower CPU frequency */
  if(FLASH_LATENCY_DEFAULT  < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  {
    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
    MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  }

#if defined(D3_SRAM_BASE)
  /* Reset D1CFGR register */
  RCC->D1CFGR = 0x00000000;

  /* Reset D2CFGR register */
  RCC->D2CFGR = 0x00000000;

  /* Reset D3CFGR register */
  RCC->D3CFGR = 0x00000000;
#else
  /* Reset CDCFGR1 register */
  RCC->CDCFGR1 = 0x00000000;

  /* Reset CDCFGR2 register */
  RCC->CDCFGR2 = 0x00000000;

  /* Reset SRDCFGR register */
  RCC->SRDCFGR = 0x00000000;
#endif
  /* Reset PLLCKSELR register */
  RCC->PLLCKSELR = 0x02020200;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x01FF0000;
  /* Reset PLL1DIVR register */
  RCC->PLL1DIVR = 0x01010280;
  /* Reset PLL1FRACR register */
  RCC->PLL1FRACR = 0x00000000;

  /* Reset PLL2DIVR register */
  RCC->PLL2DIVR = 0x01010280;

  /* Reset PLL2FRACR register */

  RCC->PLL2FRACR = 0x00000000;
  /* Reset PLL3DIVR register */
  RCC->PLL3DIVR = 0x01010280;

  /* Reset PLL3FRACR register */
  RCC->PLL3FRACR = 0x00000000;

  /* Reset HSEBYP bit */
  RCC->CR &= 0xFFFBFFFFU;

  /* Disable all interrupts */
  RCC->CIER = 0x00000000;

#if (STM32H7_DEV_ID == 0x450UL)
  /* dual core CM7 or single core line */
  if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U)
  {
    /* if stm32h7 revY*/
    /* Change  the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
    *((__IO uint32_t*)0x51008108) = 0x000000001U;
  }
#endif /* STM32H7_DEV_ID */

#if defined(DATA_IN_D2_SRAM)
  /* in case of initialized data in D2 SRAM (AHB SRAM), enable the D2 SRAM clock (AHB SRAM clock) */
#if defined(RCC_AHB2ENR_D2SRAM3EN)
  RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN);
#elif defined(RCC_AHB2ENR_D2SRAM2EN)
  RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN);
#else
  RCC->AHB2ENR |= (RCC_AHB2ENR_AHBSRAM1EN | RCC_AHB2ENR_AHBSRAM2EN);
#endif /* RCC_AHB2ENR_D2SRAM3EN */

  tmpreg = RCC->AHB2ENR;
  (void) tmpreg;
#endif /* DATA_IN_D2_SRAM */

#if defined(DUAL_CORE) && defined(CORE_CM4)
  /* Configure the Vector Table location add offset address for cortex-M4 ------------------*/
#if defined(USER_VECT_TAB_ADDRESS)
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D2 AXI-RAM or in Internal FLASH */
#endif /* USER_VECT_TAB_ADDRESS */

#else
  /*
   * Disable the FMC bank1 (enabled after reset).
   * This, prevents CPU speculation access on this bank which blocks the use of FMC during
   * 24us. During this time the others FMC master (such as LTDC) cannot use it!
   */
  FMC_Bank1_R->BTCR[0] = 0x000030D2;

  /* Configure the Vector Table location -------------------------------------*/
#if defined(USER_VECT_TAB_ADDRESS)
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */
  __enable_irq();
#endif /* USER_VECT_TAB_ADDRESS */
	
#endif /*DUAL_CORE && CORE_CM4*/
}

在這個文件里面定義宏USER_VECT_TAB_ADDRESS,然后修改VECT_TAB_BASE_ADDRESS 和 VECT_TAB_OFFSET宏的值為自己想要的值即可。

總中斷打開修改

#ifndef __MICROLIB
//lint -esym(714,_platform_post_stackheap_init) "Referenced by C library"
//lint -esym(765,_platform_post_stackheap_init) "Global scope"
extern void _platform_post_stackheap_init (void);
__WEAK void _platform_post_stackheap_init (void) {
    __enable_irq();
  (void)osKernelInitialize();
}
#endif

然后在這開啟總中斷,就解決RTX5內核初始化第一次調用出錯的問題了。

如果使用了微庫,也就是勾選了下圖中的Use MicroLIB,就不會出現(xiàn)這個問題,也就不用進行上述的修改。

boot跳入APP,APP使用RTX5,導致程序卡死無法進入main函數(shù)的問題文章來源地址http://www.zghlxwxcb.cn/news/detail-468502.html

到了這里,關于boot跳入APP,APP使用RTX5,導致程序卡死無法進入main函數(shù)的問題的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • uni微信小程序跳入外鏈(以高德地圖為例)

    uni微信小程序跳入外鏈(以高德地圖為例)

    前瞻:vue項目在跳轉外部鏈接時一般使用:window.open 或者 href 都離不開window這一屬性,但總所周知 微信小程序并不存在 window這一屬性,所以在這個時候我們需要加以變通 方法1: 1:跳入外部鏈接,此鏈接應該是 https加域名的鏈接,如果不是https的 那不可以 2:配置 將你所需

    2024年02月20日
    瀏覽(87)
  • uni-app:vue3 + uni-app 在微信小程序中無法使用app.component全局注冊組件

    按上文中的代碼執(zhí)行后,會發(fā)現(xiàn)在微信小程序開發(fā)中全局注冊的組件是無法顯示的,這是uniapp的一個未解決bug, 在uniapp中出了可以通過vue實例的component方法注冊全局組件外,uniapp支持另一種全局注冊的方式,就是通過 easycom 掃描注冊,步驟如下 easycom 的掃描流程是:通過代碼

    2024年02月16日
    瀏覽(105)
  • Unity Android 長時間運行導致卡死的BUG

    Unity Android 長時間運行導致卡死的BUG

    ????????最近項目中遇到一個問題,Unity 項目打包成 Android 長時間運行會導致 App 卡死。該問題出現(xiàn)在Unity 2021.3.19其他版本不詳,由于項目中引入了arr庫所以查找問題比較難受。 好在搞安卓的同事幫忙研究了一下,發(fā)現(xiàn)App在運行期間吃滿單核CPU的算力。 ????????明確原

    2024年02月11日
    瀏覽(38)
  • 服務器卡死,ssh連接不上-finalshell導致

    問題:客戶反饋服務器ssh連接不上 設備信息:Asianux Server release 7.3.1512(Lotus) 定位:通過虛擬機控制臺重啟服務器,發(fā)現(xiàn)能登錄虛擬機,查看服務器各種狀態(tài)都正常。 客戶使用一段時間后又卡死,ssh連接不上,登錄發(fā)現(xiàn)進程數(shù)有一萬多個,導致內存不足,服務器卡斷 查看進

    2024年02月03日
    瀏覽(20)
  • uni-app開發(fā)小程序使用uni.chooseMedia選擇圖片,安卓手機無法選擇圖片

    uni-app開發(fā)小程序使用uni.chooseMedia選擇圖片,安卓手機無法選擇圖片

    一、在小程序中,選擇圖片并上傳,是一個很常見的功能; 二、最近在開發(fā)中,使用 uni.chooseMedia 來做選擇圖片功能時,蘋果手機是正常的,安卓手機打不開!??!代碼如下: 就這點屁代碼,蘋果手機可以正常打開選擇圖片的功能,安卓手機沒法打開?。?! ?。。?! 我百思

    2024年02月16日
    瀏覽(34)
  • Digital.ocx文件丟失導致程序無法運行問題

    Digital.ocx文件丟失導致程序無法運行問題

    其實很多用戶玩單機游戲或者安裝軟件的時候就出現(xiàn)過這種問題,如果是新手第一時間會認為是軟件或游戲出錯了,其實并不是這樣,其主要原因就是你電腦系統(tǒng)的該dll文件丟失了或沒有安裝一些系統(tǒng)軟件平臺所需要的動態(tài)鏈接庫,這時你可以下載這個Digital.ocx文件(挑選合適

    2024年03月18日
    瀏覽(49)
  • tapiui.dll文件丟失導致程序無法運行問題

    其實很多用戶玩單機游戲或者安裝軟件的時候就出現(xiàn)過這種問題,如果是新手第一時間會認為是軟件或游戲出錯了,其實并不是這樣,其主要原因就是你電腦系統(tǒng)的該dll文件丟失了或沒有安裝一些系統(tǒng)軟件平臺所需要的動態(tài)鏈接庫,這時你可以下載這個tapiui.dll文件(挑選合適

    2024年03月14日
    瀏覽(25)
  • wiadefui.dll文件丟失導致程序無法運行問題

    wiadefui.dll文件丟失導致程序無法運行問題

    其實很多用戶玩單機游戲或者安裝軟件的時候就出現(xiàn)過這種問題,如果是新手第一時間會認為是軟件或游戲出錯了,其實并不是這樣,其主要原因就是你電腦系統(tǒng)的該dll文件丟失了或沒有安裝一些系統(tǒng)軟件平臺所需要的動態(tài)鏈接庫,這時你可以下載這個wiadefui.dll文件(挑選合適

    2024年02月04日
    瀏覽(25)
  • wlanui.dll文件丟失導致程序無法運行問題

    wlanui.dll文件丟失導致程序無法運行問題

    其實很多用戶玩單機游戲或者安裝軟件的時候就出現(xiàn)過這種問題,如果是新手第一時間會認為是軟件或游戲出錯了,其實并不是這樣,其主要原因就是你電腦系統(tǒng)的該dll文件丟失了或沒有安裝一些系統(tǒng)軟件平臺所需要的動態(tài)鏈接庫,這時你可以下載這個wlanui.dll文件(挑選合適

    2024年02月02日
    瀏覽(30)
  • element table數(shù)據量太大導致網頁卡死崩潰

    element table數(shù)據量太大導致網頁卡死崩潰

    做后臺項目時,一次性在表格中加載幾百上千條數(shù)據,發(fā)現(xiàn)有時頁面會崩潰。究其原因,發(fā)現(xiàn)是一次渲染dom太多導致卡頓。 在此嘗試了多種解決方法,發(fā)現(xiàn)最優(yōu)的就是替換組件,elementUI中的表格組件el-table性能不優(yōu),數(shù)據量大的時候,尤其是可操作表格,及其容易卡頓。在這

    2023年04月26日
    瀏覽(88)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包