Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
CH579
沁恒WCH
沁恒CH579 IAP跳转NANO后切换几次就hard fault
发布于 2021-10-24 13:35:54 浏览:1738
订阅该版
[tocm] ## 问题背景: 项目使用的芯片是沁恒的CH579,芯片内核是cortex m0,因为芯片不支持中断向量表重定向。所以,要做IAP采用的方法是先做一个中断跳转程序(简称vector-remap),vector-remap里面实现了所有的中断服务函数,每个函数里面根据一个标志来决定跳转到IAP的中断或是APP的中断。所以完整的程序实际上是有3个工程,vector-remap、IAP和APP.vector-remap跳转到IAP,IAP再跳转到APP。 现在IAP工程仅实现跳转到APP的测试功能,没有添加bootloader功能。 ```c typedef void (*app_t)(void); void iap_load_app(uint32_t appxaddr) { app_t jump2app; uint8_t temp; //disable all interrupt NVIC->ICER[0] = 0xffffffff; NVIC->ICPR[0] = 0xffffffff; //for ch579 interrupt vector remap flag //R8_GLOB_RESET_KEEP bit701 for user app interrupt R8_GLOB_RESET_KEEP &= ~0x80; jump2app=(app_t)*(__IO uint32_t*)(appxaddr+4); __set_MSP(*(__IO uint32_t*)appxaddr); jump2app(); } ``` APP是rt-thread nano v3.1.5,仅运行了2个任务,任务仅控制LED和打印信息。 遇到的问题: 跳转到APP后任务只能切换3次就会触发hartfault中断。 ``` \ | / - RT - Thread Operating System / | \ 3.1.5 build Oct 24 2021 2006 - 2020 Copyright by rt-thread team task1,0 task2,0 task1,1 task2,1 task1,2 task2,2 task1,3 task2,3 psr: 0x01000000 pc: 0x2323232c lr: 0x00006b19 r12: 0x00000000 r03: 0x00000000 r02: 0x20000464 r01: 0x000103ac r00: 0x23232323 hard fault on thread: tidle ``` ## 补充 - 1、单独测试这个APP是没问题的,2个任务正常运行切换。 - 2、APP如果不用操作系统,IAP跳转APP后APP也能正常运行。 问题困扰了很长时间,一直无法解决,请各位大佬帮忙分析一下,万分感谢!
查看更多
2
个回答
默认排序
按发布时间排序
aozima
2021-10-24
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
可能要重点调一下你的`vector-remap`代码,最好接上SWD。 这些贴子可以看看,有没参考价值。 - [CH579 IAP时中断向量表如何重定向?使用自己的BOOT+APP方式](http://www.wch.cn/bbs/thread-71320-1.html) - [能否提供一个 CH579 完整的 BOOT + APP 的源码 谢谢](http://www.wch.cn/bbs/thread-73378-1.html) - [CH579 InfoFlash layout and BootLoader 。 32KB boot](http://www.wch.cn/bbs/thread-73012-1.html) - [EnterCodeUpgrade 免按键,进入USB和UART下载模式。boot=PB22](http://www.wch.cn/bbs/thread-73200-1.html) - [CH579(Cortex-M0)网络IAP升级介绍及问题解答--(持续更新) 网络升级](https://www.cnblogs.com/mj19971221/p/14499121.html)
cafj
2021-10-25
这家伙很懒,什么也没写!
感谢您的回复! vector-remap主要功能是实现所有的中断服务函数的跳转。根据标识跳转到boot程序中的中断服务函数或者是跳转到APP程序中的中断服务函数。比如vector-remap中实现TIMER0中断服务函数: ```c void TMR0_IRQHandler(void) { if(R8_GLOB_RESET_KEEP & 0x80) { ((void (*)(void))(*((volatile uint32_t *)(0x400+(__get_IPSR()<<2)))))();//BOOT起始地址0X400 }else { ((void (*)(void))(*((volatile uint32_t *)(0x4000+(__get_IPSR()<<2)))))();//APP起始地址0X4000 } } ``` vector-remap运行后直接跳转到IAP中,IAP要实现的是升级功能(目前IAP仅直接跳转),再从IAP跳转到APP中。 vector_remap的main函数: ```c typedef void (*app_t)(void); void load_iap(uint32_t appxaddr) { app_t jump2iap; //disable all interrupt NVIC->ICER[0] = 0xffffffff; NVIC->ICPR[0] = 0xffffffff; jump2iap=(app_t)*(__IO uint32_t*)(appxaddr+4); __set_MSP(*(__IO uint32_t*)appxaddr); jump2iap(); } int main() { load_iap(0x400);//跳转到boot while(1); } ``` 经测试在IAP程序和APP程序中触发的中断都能正常跳转到实际的中断服务函数中。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.7k
关于作者
cafj
这家伙很懒,什么也没写!
提问
1
回答
1
被采纳
0
关注TA
发私信
相关问题
1
Linux下通过USBTinyISP为Arduino开发板烧?写Bootloader
2
请教修改NVIC后RTT调度函数失效的问题[已解决 bootloader中打开了不必要的中断]
3
进入bootloader的方式探讨
4
求助:IAP里的APP使用的RTT,跳转后出错。[已解决]
5
有没有人在STM32F103上用UART IAP跑过RT-Thread?
6
想做网口的IAP远程升级,不知可不可行
7
IAP问题
8
[已解决]请教基于RTT的IAP程序切换到应用程序不成功的问题(基于STM32F4)?
9
stm32f4xx-----IAP移植APP程序需要注意的地方
10
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
4
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部