[已解决] 在bootloader中如何使用定时器和串口
Re: 在bootloader中如何使用定时器和串口
Hi
非常感谢,根据你的建议我知道该怎么做了
boot运行完,我会把使能了的都关掉的~
非常感谢,根据你的建议我知道该怎么做了
boot运行完,我会把使能了的都关掉的~
Re: 在bootloader中如何使用定时器和串口
Hi
我尝试重新写了一遍调用hal接口层的timer使用流程,我在app测试了一遍,可以看到打印出回调中的timer_callback_cnt值是有递增的。
但当我在bootloader_start.c的call_start_cpu0函数末尾调用时,无法看到我希望得到的结果,也就是递增cnt值大于2之后退出while,程序跳转到app,那这是怎么回事呢?是否在boot中不能这样用?
感谢答复
我尝试重新写了一遍调用hal接口层的timer使用流程,我在app测试了一遍,可以看到打印出回调中的timer_callback_cnt值是有递增的。
但当我在bootloader_start.c的call_start_cpu0函数末尾调用时,无法看到我希望得到的结果,也就是递增cnt值大于2之后退出while,程序跳转到app,那这是怎么回事呢?是否在boot中不能这样用?
感谢答复
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: 在bootloader中如何使用定时器和串口
boot 里面这个 timer 的中断是否进入了?中断是否配置正确?
Re: 在bootloader中如何使用定时器和串口
Hi
boot中没有进入该中断,看不到cnt值递增带来的while条件满足后退出进入app的现象。
我修改的timer文件已经上传附件,可以直接放到app中调用abup_tg_timer_init运行,看得到进入回调函数,boot却不行。
麻烦检查一下是否我修改的中断配置有问题。
非常感谢
boot中没有进入该中断,看不到cnt值递增带来的while条件满足后退出进入app的现象。
我修改的timer文件已经上传附件,可以直接放到app中调用abup_tg_timer_init运行,看得到进入回调函数,boot却不行。
麻烦检查一下是否我修改的中断配置有问题。
非常感谢
- Attachments
-
- custom_timer.zip
- (3.8 KiB) Downloaded 703 times
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: 在bootloader中如何使用定时器和串口
你的代码,中断正常触发是没有问题的。这里主要的原因是:
编译完被优化成了:
从汇编上看,abup_timer_callback_cnt > 2 的逻辑只正常判断了一次,后面直接都在 403ce092 死循环了,没有去再获取 abup_timer_callback_cnt 的值。
所以这里代码可以改成:
你的代码放到 bootloader 在编译上会有一点问题,要略做修改。
Code: Select all
while (1)
{
if (abup_timer_callback_cnt > 2) {
break;
}
}
Code: Select all
if (abup_timer_callback_cnt > 2) {
403ce088: 3fcd67b7 lui a5,0x3fcd6
403ce08c: 0007a703 lw a4,0(a5) # 3fcd6000 <abup_timer_callback_cnt>
403ce090: 4789 li a5,2
403ce092: 00e7d063 bge a5,a4,403ce092 <call_start_cpu0+0x92>
所以这里代码可以改成:
Code: Select all
while (1)
{
if (abup_timer_callback_cnt > 2) {
break;
} else {
ets_delay_us(1);
}
}
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: 在bootloader中如何使用定时器和串口
或者把变量 abup_timer_callback_cnt 加个 volatile 也行,因为这个变量是在 isr 里面被改写的,这个属于 volatile 的常规用法和注意点之一。优先推荐这个改法。
Re: 在bootloader中如何使用定时器和串口
Hi
感谢解答,根据你的建议,我分别尝试了cnt值增加volatile修饰,在while中加入了ets_delay_us,但运行出来log都显示停在while中没有进行跳转app,如下图:
如果定时器配置都没问题,那这里面,还有啥原因呢?
感谢回复
感谢解答,根据你的建议,我分别尝试了cnt值增加volatile修饰,在while中加入了ets_delay_us,但运行出来log都显示停在while中没有进行跳转app,如下图:
如果定时器配置都没问题,那这里面,还有啥原因呢?
感谢回复
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: 在bootloader中如何使用定时器和串口
你用的哪个版本的 idf?具体 tag 或者 commit,对齐一下。
Re: 在bootloader中如何使用定时器和串口
Hi
我只知道是idf-4.0的,具体的commit也比较久远了,我不清楚。IDF中是否有方法可以查询到?
感谢回复
我只知道是idf-4.0的,具体的commit也比较久远了,我不清楚。IDF中是否有方法可以查询到?
感谢回复
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: 在bootloader中如何使用定时器和串口
idf 4.0 还没支持 C3 呢。
你可以用 git describe --tags 或者用 git log -1 看下。
或者系统启动 log 里面有类似:I (24) boot: ESP-IDF v4.4.1-dirty 2nd stage bootloader。
你可以用 git describe --tags 或者用 git log -1 看下。
或者系统启动 log 里面有类似:I (24) boot: ESP-IDF v4.4.1-dirty 2nd stage bootloader。
Who is online
Users browsing this forum: No registered users and 76 guests