完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
请问一下,在eeworld上有2篇文章ch579的bootloader方式文章,我有2个疑问请教一下官方,
|
|
相关推荐
1个回答
|
|
|
问题1,
在在ota结束,会根据固件的标志位进行来执行关闭全局中断 然后直接跳转还是搬中断向量表 这里如果当前运行的是固件A,是直接跳转到固件B的, /* 编程结束 */ case CMD_IAP_END: { PRINT("IAP_END rn"); /* 当前的是ImageA */ if(CurrImageFlag == IMAGE_A_FLAG) { /* 修改DataFlash,切换至ImageB */ SwitchImageFlag(IMAGE_B_FLAG); /* 关闭当前所有使用中断,或者方便一点直接全部关闭 */ DisableAllIRQ(); /* 保证打印结束 */ DelayMs( 10 ); /* 跳入ImageB运行 */ GotoResetVector(IMAGE_B_ENTRY_ADD); } /* 当前的是ImageB */ else { /* 修改DataFlash,切换至ImageA */ SwitchImageFlag(IMAGE_A_FLAG); /* 关闭当前所有使用中断,或者方便一点直接全部关闭 */ DisableAllIRQ(); /* 编程ImageA第一块 */ FlashBlockErase(IMAGE_A_START_ADD); FlashWriteBuf(IMAGE_A_START_ADD, (PUINT32) vectors_block_buf, FLASH_BLOCK_SIZE); /* 保证打印结束 */ DelayMs( 10 ); /* 跳入ImageA运行 */ GotoResetVector(IMAGE_A_ENTRY_ADD); } break; } B的程序起始地址是在后面, 在程序一开始的时候会进行判断,然后拷贝中断想向量表,这时候因为全局中断关掉了,所以没问题, int main( void ) { GPIOA_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU ); GPIOB_ModeCfg( GPIO_Pin_All&(~(GPIO_Pin_11|GPIO_Pin_10)), GPIO_ModeIN_PU ); #ifdef DEBUG GPIOA_SetBits(bTXD1); GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA); UART1_DefInit( ); #endif PRINT("%sn",VER_LIB); ReadImageFlag(); ImageVectorsCopy(); // <<----------------------------------------------------- CH57X_BLEInit( ); HAL_Init( ); GAPRole_PeripheralInit( ); Peripheral_Init( ); while(1){ 问题2, WCH的ble 协议栈可以无中断运行. |
|
|
|
|
只有小组成员才能发言,加入小组>>
326 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
848 浏览 0 评论
1452 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3413 浏览 2 评论
2820 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1808浏览 1评论
1459浏览 1评论
343浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
860浏览 0评论
467浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 19:22 , Processed in 0.581698 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
598