ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RT-Thread Studio 实现IAP OTA的问题和解决方法

2022-01-12 14:31:12  阅读:184  来源: 互联网

标签:RT __ Thread 中断 OTA void 地址 跳转 uint32


RT-Thread Studio 实现IAP OTA的问题和解决方法

注意点:

  • 1.使用RTT Studio来写升级的APP要注意修改中断向量表的地址,不能直接在main函数里改SCB那个方法,因为RTT在进入main之前就初始化了。image-20220112141005583
  • 2.记得改APP的ROM的地址和大小,这里上次忘记改,就遇到了问题,浪费了点时间。image-20220112142416163
  • 3.滴答定时器要关掉。
static void JumpToApplication(void)
{
    uint32_t i=0;
    register rt_ubase_t temp;
    __IO uint32_t ApplicationAddr = 0x08120000; /* APP的地址 */
    void (*SysMemBootJump)(void);        /* 声明一个函数指针 */
    /* 关闭全局中断 */
    temp = rt_hw_interrupt_disable();
    /* 关闭滴答定时器,复位到默认值 */
    SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;
    /* 设置所有时钟到默认状态,使用HSI时钟 */
    HAL_RCC_DeInit();

    /* 关闭所有中断,清除所有中断挂起标志 */
    for (i = 0; i < 8; i++)
    {
        NVIC->ICER[i]=0xFFFFFFFF;
        NVIC->ICPR[i]=0xFFFFFFFF;
    }
    /* 使能全局中断 */
    rt_hw_interrupt_enable(temp);

    /* 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址 */
    SysMemBootJump = (void (*)(void)) (*((uint32_t *) (ApplicationAddr + 4)));

    /* 设置朱堆栈指针 */
    __set_MSP(*(uint32_t *)ApplicationAddr);

    /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */
    __set_CONTROL(0);

    /* 跳转到系统BootLoader */
    SysMemBootJump();

    /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
    while (1);
}

标签:RT,__,Thread,中断,OTA,void,地址,跳转,uint32
来源: https://blog.csdn.net/a200327/article/details/122452870

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有