硬汉嵌入式论坛

 找回密码
 立即注册
楼主: eric2013
收起左侧

[BOOT/IAP] 实战技能分享,一劳永逸的解决BOOT跳转APP失败问题,含MDK AC5,AC6和IAR,同时制作了一个视频操作说明

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-31 10:25:36 | 显示全部楼层
dugong84 发表于 2022-8-31 00:26
在Segger Studio下测试,运行到SysMemBootJump()后即触发HardFault_Handler,程序跳转不成功,还未找到原 ...

SES这个,后面得专门做个Demo。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-10-11 21:23:44 | 显示全部楼层
分散加载文件没有勾选内部的RAM,程序运行起来是可以使用的吗 我看AC5的例子里面是没有勾上的
图片.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-12 00:32:19 | 显示全部楼层
G-ray 发表于 2022-10-11 21:23
分散加载文件没有勾选内部的RAM,程序运行起来是可以使用的吗 我看AC5的例子里面是没有勾上的

使用了自定义分散加载后,这里的RAM配置就不起作用了。
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
发表于 2022-10-14 17:59:21 | 显示全部楼层
偶尔也很菜 发表于 2021-11-17 10:45
Segger Embedder Studio实现方法如下。注意AXI_RAM区域不行,数值一上电就直接复位了。DTCM区域可以实现:
...

你好,请问下DTCM区域复位时数据不会丢失是在哪个文档有说明啊,我找了STM32H7编程手册及参考手册都没有看到,麻烦告知下出处,谢谢了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-15 10:34:03 | 显示全部楼层
snibelyh 发表于 2022-10-14 17:59
你好,请问下DTCM区域复位时数据不会丢失是在哪个文档有说明啊,我找了STM32H7编程手册及参考手册都没有 ...

这个要设置。

STM32H7软件复位NVIC_SystemReset后,各个RAM继续保持原有数据的问题总结(2019-10-03)
https://www.armbbs.cn/forum.php? ... 5217&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

8

主题

155

回帖

179

积分

初级会员

H7 TOOL 大法好!

积分
179
发表于 2022-10-18 08:48:48 | 显示全部楼层
硬汉老师说真的一语中的,我就是USB有时没反应, 需要重新上电才能正常使用 , 现在用了老师的方法,目前没出现USB无法连接的情况 , 老师太强了!!!
回复

使用道具 举报

8

主题

155

回帖

179

积分

初级会员

H7 TOOL 大法好!

积分
179
发表于 2022-10-18 09:58:03 | 显示全部楼层
硬汉老师好! 我一直搞不懂 Keil MDK 魔术棒里的 IROM1 跟 IROM2有啥区分 , BOOT跟APP 跟这有关系吗 ? 我附上自己的BOOT和APP分配 , 有劳老师指点一二,感谢感谢
Boot :
image.png
APP:
image.png
回复

使用道具 举报

8

主题

155

回帖

179

积分

初级会员

H7 TOOL 大法好!

积分
179
发表于 2022-10-18 10:03:00 | 显示全部楼层
补充一点 , 上面的设置 跟 这个是否要一致?
image.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-18 13:01:38 | 显示全部楼层
312456990 发表于 2022-10-18 09:58
硬汉老师好! 我一直搞不懂 Keil MDK 魔术棒里的 IROM1 跟 IROM2有啥区分 , BOOT跟APP 跟这有关系吗 ? 我附 ...

ROM没问题,RAM不用,APP的RAM直接整个区域即可。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-18 13:02:01 | 显示全部楼层
312456990 发表于 2022-10-18 10:03
补充一点 , 上面的设置 跟 这个是否要一致?

不用,一般MDK可以正常识别。
回复

使用道具 举报

8

主题

155

回帖

179

积分

初级会员

H7 TOOL 大法好!

积分
179
发表于 2022-10-18 13:51:03 | 显示全部楼层
eric2013 发表于 2022-10-18 13:02
不用,一般MDK可以正常识别。

老师,就是保持默认下载算法即可是吗?  感谢老师!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-19 09:43:31 | 显示全部楼层
312456990 发表于 2022-10-18 13:51
老师,就是保持默认下载算法即可是吗?  感谢老师!

对,MDK可以识别出来。
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2022-10-21 14:13:35 | 显示全部楼层
硬汉哥你好,今天在gd32单片机上实现这个功能,见附件图片,按照1234的顺序,也就是图中的顺序,当执行到第四步的时候发现SysMemBootJump的值和第二步赋值时的值已经不一样了,是个非法地址,所以跳转失败,之后我修改了一下顺序,改为2314,就可以跳转,但是再后来我又改为1234的顺序,又可以跳转了,之前我以为是使能了主栈,导致了一些局部变量的变化,现在看来也不是这样,请教下大哥
IMG_20221021_140329.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-21 14:50:05 | 显示全部楼层
yelu 发表于 2022-10-21 14:13
硬汉哥你好,今天在gd32单片机上实现这个功能,见附件图片,按照1234的顺序,也就是图中的顺序,当执行到第 ...

这问题太诡异了,估计你的程序有其它隐含bug吧,

可以试试程序里面什么都不干,上电后直接调用这个函数跳转试试。
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2022-10-21 15:44:24 来自手机 | 显示全部楼层
从psp切换到msp的时候,跳转地址变化了变化了,所以跳转失败了,执行跳转的时候如果我手动将pc的值改为复位向量的地址就可以跳转,所以我是哪里出错了
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2022-10-21 18:19:45 来自手机 | 显示全部楼层
eric2013 发表于 2022-10-21 14:50
这问题太诡异了,估计你的程序有其它隐含bug吧,

可以试试程序里面什么都不干,上电后直接调用这个函 ...

我是这样想的,SysMembootjump是个局部变量,当你从psp切换到msp的时候,Sysmembootjump这个局部变量的值已经变了,最后一句函数调用去访问Sysmembootjump的时候,得到的值应该是不对的,psp和msp不想等的,我改成全局变量就OK,这也说的通,应该是这个原因,大哥这样对吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-22 11:49:42 | 显示全部楼层
yelu 发表于 2022-10-21 18:19
我是这样想的,SysMembootjump是个局部变量,当你从psp切换到msp的时候,Sysmembootjump这个局部变量的值 ...

PSP和MSP切换,这个阶段还仅仅是SP寄存器的更新,你前面设置的SysMembootjump地址对应的值还不会更新,除非进行到这个阶段,你程序程序被抢占了。
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2022-10-22 19:04:45 | 显示全部楼层
eric2013 发表于 2022-10-22 11:49
PSP和MSP切换,这个阶段还仅仅是SP寄存器的更新,你前面设置的SysMembootjump地址对应的值还不会更新,除 ...

(1)我的程序被抢占了这里指?
(2)今天花了时间看了下,是因为编译器的优化选项(Arm clang  编译器V6.18),如下图所示是优化选项-O0的汇编代码        图中的局部变量都是以sp的偏移在栈上访问,所以从 psp 切换到 msp 之后,sp的值已经发生了变化,(图中蓝色圈起来的地方)    LDR   r1, [sp, #0x04]   ,     这里的 (sp+0x04)里面的内容已经不再是 AppJumpAddr 的内容,这里跳转肯定是失败的,之后我将优化选项改为-O1,经过优化之后不再使用 sp 的访问变量,全部使用寄存器来操作,应该是为了优化速度,这样的话就可以跳转,因为调整sp也不会产生影响(就没有再用sp),后来我又测试了一下,用 volatile 来修饰 AppJumpAddr ,果然,又使用了栈,跳转失败。
(3)所以我还是坚持我的看法,局部变量在你切换了栈指针之后再去访问栈上的变量肯定是不对的。
目前我对这个问题的看法就是这样

20221022184137.jpg
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2022-10-22 19:11:01 | 显示全部楼层
eric2013 发表于 2022-10-22 11:49
PSP和MSP切换,这个阶段还仅仅是SP寄存器的更新,你前面设置的SysMembootjump地址对应的值还不会更新,除 ...

你前面设置的SysMembootjump地址对应的值还不会更新

这个变量在栈上,他的值确实没有更新,但是 sp 的值更新了,之后再用 sp 来访问栈上的变量就不对了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-23 12:08:58 | 显示全部楼层
yelu 发表于 2022-10-22 19:04
(1)我的程序被抢占了这里指?
(2)今天花了时间看了下,是因为编译器的优化选项(Arm clang  编译器V ...



我也测试了下,确实是这样的,实践出真知,不能想当然。

实际测试发现只有AC6的0级优化有这个问题,其它的所有优化都正常(是直接寄存器记录,包括AC5),都会不会重新操作栈地址去读取。AC6这个0级优化竟然不是直接变量地址访问,而是继续通过栈去访问。。。

AC6这个零级优化慎用,太容易入坑。又增加一条:

初步确诊MDK AC6的0级优化是个大坑,玩不顺手的话,慎用
https://www.armbbs.cn/forum.php?mod=viewthread&tid=99584
记录下完整过程。

image.png

回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2022-10-23 17:14:39 | 显示全部楼层
eric2013 发表于 2022-10-23 12:08
我也测试了下,确实是这样的,实践出真知,不能想当然。

实际测试发现只有AC6的0级优化有这 ...

-O0只有一个好处,程序无优化调试方便,https://www.armbbs.cn/forum.php?mod=viewthread&tid=99584,这个帖子里面的问题我全部都遇到过,大哥总结的太好了,我觉得其实AC6 的 -O0不优化的操作应该是正常的啊,首先局部变量在栈上,每次访问使用 sp 到栈上访问,只要不切换栈,都是没问题的,直接使用寄存器才是优化过后的操作,我觉得这样也说的通,不过搞清楚问题就好了,谢谢大哥
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-23 19:04:07 | 显示全部楼层
yelu 发表于 2022-10-23 17:14
-O0只有一个好处,程序无优化调试方便,https://www.armbbs.cn/forum.php?mod=viewthread&tid=99584,这 ...

非常赞的问题,周报给大家也分享下。
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2022-10-23 19:20:30 | 显示全部楼层
eric2013 发表于 2022-10-23 19:04
非常赞的问题,周报给大家也分享下。

谢谢,以后要在论坛里面多学习
回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
发表于 2022-10-25 18:19:31 | 显示全部楼层
AC5 3级优化
BOOT里面没操作DWT 然后跳转到APP DWT初始化的时候进入HardFault_Handler了
这行就进去了
CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk;         // ~0x01000000;
[C] 纯文本查看 复制代码
/**
 * @brief  Initializes DWT_Clock_Cycle_Count for DWT_Delay_us function
 * @return Error DWT counter
 *         1: clock cycle counter not started
 *         0: clock cycle counter works
 */
uint32_t DWT_Delay_Init(void) 
{
  /* Disable TRC */
  CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; 	// ~0x01000000;
  /* Enable TRC */
  CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; 	// 0x01000000;

  /* Disable clock cycle counter */
  DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk; 	// ~0x00000001;
  /* Enable  clock cycle counter */
  DWT->CTRL |=  DWT_CTRL_CYCCNTENA_Msk; 	// 0x00000001;

  /* Reset the clock cycle counter value */
  DWT->CYCCNT = 0;

  /* 3 NO OPERATION instructions */
  __ASM volatile ("NOP");
  __ASM volatile ("NOP");
  __ASM volatile ("NOP");

  /* Check if clock cycle counter has started */
  if (DWT->CYCCNT)
  {
    return 0; /*clock cycle counter started*/
  }
  else
  {
    return 1; /*clock cycle counter not started*/
  }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-26 06:11:08 | 显示全部楼层
LinY 发表于 2022-10-25 18:19
AC5 3级优化
BOOT里面没操作DWT 然后跳转到APP DWT初始化的时候进入HardFault_Handler了
这行就进去了

这个是哪家芯片,这个API也是他们家设计的吗,另外MDK AC5调节下,APP下载到首地址能正常运行吗,不下载到APP地址。
回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
发表于 2022-10-26 08:39:36 | 显示全部楼层
eric2013 发表于 2022-10-26 06:11
这个是哪家芯片,这个API也是他们家设计的吗,另外MDK AC5调节下,APP下载到首地址能正常运行吗,不下载 ...

boot和app分别刷到0x8000000和0x8020000,刷进去都运行正常的。
但是OTA刷入APP的bin之后跳转到APP旧不正常了
芯片是STM32F407VET6
回复

使用道具 举报

11

主题

36

回帖

69

积分

初级会员

积分
69
发表于 2022-10-26 10:12:11 | 显示全部楼层
eric2013 发表于 2022-10-26 06:11
这个是哪家芯片,这个API也是他们家设计的吗,另外MDK AC5调节下,APP下载到首地址能正常运行吗,不下载 ...

我这边的是这样的:
分区:
1.boot 起始地址 0x8000000 大小 0x2000
2.app1 起始地址 0x8020000 大小 0x2000
3.app2 起始地址 0x8040000 大小 0x2000

逻辑:
boot只做app更新以及跳转,没有业务逻辑。
boot里面判断app1的最后一个uint32_t的值,如果不是更新状态就直接跳转到app1.
如果是更新状态是的话就擦除app1,然后复制app2到app1,再擦除app1,最后再跳转到app1.

app1里面有根据业务判断通过lwip将bin下载到app2。下载完成会在app1的最后位置写入一个uint_32的更新状态值,然后重启。
重启通过下面这个代码
[C] 纯文本查看 复制代码
/**
 * @brief 复位重启
 * @note 
 */
void mcu_restart(void)
{
  __disable_irq() ;
  __set_FAULTMASK(1); //关闭所有中断
  NVIC_SystemReset(); //复位  
}


boot和app的RAM都是起始地址0x20000000,大小0x10000,这个共用有没有影响的?我没用那个分享加载。
boot里面只开了一个usart2用来打印调试信息。
app 没用os的,开了一些usart和定时器 搞了lwip,然后用了DWT做延迟。
就是在这个DWT初始化的时候出问题了 进HardFault_Handler。

这是boot里面的跳转函数,App_Addr就是app1的起始地址 0x8020000
[C] 纯文本查看 复制代码
/** @bieaf 	程序跳转函数
	* @return none	返回值
	*/
void IAP_ExecuteApp (uint32_t App_Addr)
{
  if (((*(__IO uint32_t *)App_Addr) & 0x2FFE0000) == 0x20000000)	//检查栈顶地址是否合法.
  {
    uint32_t i=0;
    void (*SysMemBootJump)(void);        /* 声明一个函数指针 */   

    /* 关闭全局中断 */
    DISABLE_INT(); 

    /* 关闭滴答定时器,复位到默认值 */
    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;
    }	

    /* 使能全局中断 */
    ENABLE_INT();

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

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

    /* 跳转到系统APP */
    SysMemBootJump(); 
  }
  else
  {
    printf("There is None APP to jump,ERROR!!!\r\n");
  }
	/* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
}


app1里面就是在main方法开始加了中断向量表地址 偏移
[C] 纯文本查看 复制代码
SCB->VTOR = FLASH_BASE | Application_1_Addr;/* 更改中断向量表地址 偏移到APP1 地址 	*/    






image.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-26 12:21:57 | 显示全部楼层
LinY 发表于 2022-10-26 10:12
我这边的是这样的:
分区:
1.boot 起始地址 0x8000000 大小 0x2000

1、这个函数放在这里试试。

image.png

2、然后我们楼主位分享的APP和BOOT工程都有使用DWT,我将两个工程的AC5优化都设置为3级优化,测试正常。

image.png

测试正常运行。

具体你自己再查查你那边的问题吧。



回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2022-12-17 14:08:39 | 显示全部楼层
硬汉哥,按照您的方法,MDK AC5设置会报如下错误。

BOOT.png



回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2022-12-17 14:18:32 | 显示全部楼层
硬汉哥,还有一个疑问,看您的H7-TOOL的Bootloader是把内存首地址用宏定义出来用,我试了下,内存还是被清掉了,请问是我哪里设置不对吗? BOOT1.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-12-18 09:55:56 | 显示全部楼层
putin 发表于 2022-12-17 14:08
硬汉哥,按照您的方法,MDK AC5设置会报如下错误。

你的MDK Option选项里面配置使用这个空间了,你要腾出来个地方给这个变量用。
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2022-12-25 18:11:49 | 显示全部楼层
eric2013 发表于 2022-12-18 09:55
你的MDK Option选项里面配置使用这个空间了,你要腾出来个地方给这个变量用。

谢谢硬汉哥,在MDK Option选项卡和sct文件两种方式都实现了。之前的跳转方式升级之后有卡死的现象,换成您这个方式就没遇到这个问题了。最近把您做的AES加密方式也用到项目中了。后面我再把MD5加密方式也弄一下。
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2022-12-26 17:46:16 | 显示全部楼层
putin 发表于 2022-12-25 18:11
谢谢硬汉哥,在MDK Option选项卡和sct文件两种方式都实现了。之前的跳转方式升级之后有卡死的现象,换成 ...

说错了,是MD5校验。
回复

使用道具 举报

9

主题

50

回帖

77

积分

初级会员

积分
77
发表于 2022-12-30 11:02:35 | 显示全部楼层
   /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */         __set_CONTROL(0);    这里说的RTOS工程说的使用了RTOS的APP?
回复

使用道具 举报

9

主题

50

回帖

77

积分

初级会员

积分
77
发表于 2022-12-30 11:10:23 | 显示全部楼层
  • /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */
  •         __set_CONTROL(0);
  • 这里说的RTOS工程说的是使用了RTOS的APP工程么?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-12-30 13:47:39 | 显示全部楼层
EmbeddedXGJ 发表于 2022-12-30 11:02
/* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */         __set_CONTROL(0);    这里 ...

是你的boot使用了RTOS
回复

使用道具 举报

9

主题

50

回帖

77

积分

初级会员

积分
77
发表于 2022-12-30 17:33:40 | 显示全部楼层
eric2013 发表于 2022-12-30 13:47
是你的boot使用了RTOS

回复

使用道具 举报

10

主题

35

回帖

65

积分

初级会员

积分
65
发表于 2023-3-3 11:07:29 | 显示全部楼层
硬汉哥,想请教个问题,我遇到了BOOT程序跳转APP失败的情况,  上电启动时,BOOT跳转失败,卡死,但是当我重新烧写boot程序后,第一次跳转可以成功,但是再次关机、上电,又无法跳转,而且debug仿真是软件复位,每次也都能正常跳转,这大概是什么原因呢
回复

使用道具 举报

10

主题

35

回帖

65

积分

初级会员

积分
65
发表于 2023-3-3 11:11:11 | 显示全部楼层
本帖最后由 Ghanfu 于 2023-3-3 11:40 编辑

void Boot_Jump_To_App(void)
{
    UINT32 JumpAddress;

    __set_MSP(*( __IO uint32_t* )APP_CODE_START_ADDR);
      (*(void(*)(void))(*(volatile  UINT32*) (JumpAddress)))();


跳转函数做的比较简单  稍微加个rcc复位函数,boot空间就超了

回复

使用道具 举报

10

主题

35

回帖

65

积分

初级会员

积分
65
发表于 2023-3-3 15:38:47 | 显示全部楼层
Ghanfu 发表于 2023-3-3 11:07
硬汉哥,想请教个问题,我遇到了BOOT程序跳转APP失败的情况,  上电启动时,BOOT跳转失败,卡死,但是当我 ...

找到问题原因了,跟BOOT跳转无关,程序跑飞原因是近期修改USB业务,把MCU外设初始化过程中的USB_host_init屏蔽掉了,但是FATFS文件系统初始化依然在上电复位过程中...  FATFS_LinkDriver函数往U盘路径挂载文件系统失败,导致卡死

但奇怪的是看门狗复位、KEIL debug复位后,即使没有初始化USB host,FATFS文件系统初始化也不会卡死,直接运行下去,类似于之前描述的情况
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 13:32 , Processed in 0.319079 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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