OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5061|回复: 10

IAP升级带freertos的系统卡死在HAL_Init();和SystemClock_Config();之间

[复制链接]

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2019-9-11
在线时间
37 小时
发表于 2020-3-14 20:40:21 | 显示全部楼层 |阅读模式
1金钱
IAP升级带freertos的系统卡死在HAL_Init();和SystemClock_Config();,有没有大佬晓得这是怎么回事,网上的方法都试过都不行,中断向量地址配对了的,但是跳转过去就是不行,IAP:
在这里加了关闭中断
MSR_MSP(*(vu32*)appxaddr);                                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
                __set_CONTROL(0);
                for(i = 0; i < 8; i++)
                {
                        NVIC->ICER[i] = 0xFFFFFFFF; /* 关闭中断*/
                        NVIC->ICPR[i] = 0xFFFFFFFF; /* 清除中断标志位 */
                }
                jump2app();                                                                        //跳转到APP.


APP1+freertos:
int main(void)
{
  /* USER CODE BEGIN 1 */
        __disable_irq();
       
        for(i = 0; i < 8; i++)
                {
                        NVIC->ICER[i] = 0xFFFFFFFF; /* 关闭中断*/
                        NVIC->ICPR[i] = 0xFFFFFFFF; /* 清除中断标志位 */
                }
  /* USER CODE END 1 */

主函数第一句就关闭中断但是还是不行,也在后面加了SCB->VTOR = FLASH_BASE | 0x10000;//设置偏移量   
但是APP还是执行不进去,求大佬指导一下

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2019-9-11
在线时间
37 小时
 楼主| 发表于 2020-3-14 20:41:21 | 显示全部楼层
@正点原子 原子哥,我看你前面说的配置中断向量,我应该配置成功了的,求指导一下
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-3-15 00:41:11 | 显示全部楼层
你的app改对了吗? 另外,app单独运行是可以的吧?
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2019-9-11
在线时间
37 小时
 楼主| 发表于 2020-3-20 11:43:46 | 显示全部楼层
正点原子 发表于 2020-3-15 00:41
你的app改对了吗? 另外,app单独运行是可以的吧?

APP没有加os正常的,加了就不正常,调试卡死在RCC系统时钟这部分,只需要在跳转前初始化时钟就行了,谢谢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-3-21 01:31:22 | 显示全部楼层
tjy1092639052 发表于 2020-3-20 11:43
APP没有加os正常的,加了就不正常,调试卡死在RCC系统时钟这部分,只需要在跳转前初始化时钟就行了,谢谢

很可能是开启了中断,回到APP又没开中断。
看下你总共用了哪些中断,在IAP里面。
然后再看看你的APP是否开启了这些中断,或者说是否有对应的中断服务函数,如果没有,看下是不是没有关闭这些在IAP里面开启的中断。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

25

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1762
金钱
1762
注册时间
2019-8-4
在线时间
275 小时
发表于 2020-3-28 17:06:58 | 显示全部楼层
原子哥,我用的咱们历程中的iap,然后升级任何程序都可以,但是加上ucos后,进不去创建任务里边,然后系统直接卡死,这是哪个地方的偏移量没有设置好呀?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-3-29 00:50:26 | 显示全部楼层
zhb2421762879 发表于 2020-3-28 17:06
原子哥,我用的咱们历程中的iap,然后升级任何程序都可以,但是加上ucos后,进不去创建任务里边,然后系统 ...

只能仿真找问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

25

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1762
金钱
1762
注册时间
2019-8-4
在线时间
275 小时
发表于 2020-3-30 10:42:34 | 显示全部楼层

原子哥,我通过仿真,发现我的程序死在了Cache_Enable这个地方,我的程序是这样的
  1. int main(void)
  2. {
  3.         char *s_M="M";
  4.        
  5.         SCB->VTOR = FLASH_BASE|0x10000;//设置偏移量
  6.        
  7.        
  8.         Cache_Enable();                 //打开L1-Cache
  9.         HAL_Init();                                        //初始化HAL库
  10.         Stm32_Clock_Init(160,5,2,4);    //设置时钟,400Mhz
  11.         delay_init(400);                                //延时初始化
  12.         uart_init(115200);                                //串口初始化
  13.         LED_Init();                                                //初始化LED
  14.        
  15.     usmart_dev.init(200);                     //初始化USMART
  16.     OSInit();                       //UCOS初始化
  17.   //任务创建(省略...)
  18. }
复制代码
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-3-31 01:12:58 | 显示全部楼层
zhb2421762879 发表于 2020-3-30 10:42
原子哥,我通过仿真,发现我的程序死在了Cache_Enable这个地方,我的程序是这样的

执行不过这个函数?
看看汇编代码
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

25

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1762
金钱
1762
注册时间
2019-8-4
在线时间
275 小时
发表于 2020-3-31 11:30:56 | 显示全部楼层
正点原子 发表于 2020-3-31 01:12
执行不过这个函数?
看看汇编代码

汇编代码我是采用咱们官方的历程进行测试的,都没有变,也看不懂汇编,
  1. //使能CPU的L1-Cache
  2. void Cache_Enable(void)
  3. {
  4.     SCB_EnableICache();//使能I-Cache
  5.     SCB_EnableDCache();//使能D-Cache   
  6.         SCB->CACR|=1<<2;   //强制D-Cache透写,如不开启,实际使用中可能遇到各种问题       
  7. }
复制代码

  1. __STATIC_INLINE void SCB_EnableICache (void)
  2. {
  3.   #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
  4.     __DSB();
  5.     __ISB();
  6.     SCB->ICIALLU = 0UL;                     /* invalidate I-Cache */
  7.     __DSB();
  8.     __ISB();
  9.     SCB->CCR |=  (uint32_t)SCB_CCR_IC_Msk;  /* enable I-Cache */
  10.     __DSB();
  11.     __ISB();
  12.   #endif
  13. }
复制代码

  1. __STATIC_INLINE void SCB_EnableDCache (void)
  2. {
  3.   #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  4.     uint32_t ccsidr;
  5.     uint32_t sets;
  6.     uint32_t ways;

  7.     SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/  /* Level 1 data cache */
  8.     __DSB();

  9.     ccsidr = SCB->CCSIDR;

  10.                                             /* invalidate D-Cache */
  11.     sets = (uint32_t)(CCSIDR_SETS(ccsidr));
  12.     do {
  13.       ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
  14.       do {
  15.         SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  16.                       ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk)  );
  17.         #if defined ( __CC_ARM )
  18.           __schedule_barrier();
  19.         #endif
  20.       } while (ways-- != 0U);
  21.     } while(sets-- != 0U);
  22.     __DSB();

  23.     SCB->CCR |=  (uint32_t)SCB_CCR_DC_Msk;  /* enable D-Cache */

  24.     __DSB();
  25.     __ISB();
  26.   #endif
  27. }
复制代码


是不是中断向量表啥的没有配置好呀,还是那个地方出错了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-4-1 01:13:03 | 显示全部楼层
zhb2421762879 发表于 2020-3-31 11:30
汇编代码我是采用咱们官方的历程进行测试的,都没有变,也看不懂汇编,

看下死在那里。。。不要看函数, 死机了,按X, 然后看停在那里。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-3 04:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表