CH579的bootloader問題

請問一下,在eeworld上有2篇文章ch579的bootloader方式文章,我有2個疑問請教一下官方,

  1. 方式一,網(wǎng)址:http://bbs.eeworld.com.cn/thread-1154663-1-1.html,這個里面如果在ImageA里升級ImageB,然后把ImageB的中斷向量表拷貝到ImageA的前面,那么此時正在運行的ImageA還能正常運行嗎??按我的理解,沒拷貝之前應(yīng)該是ImageA的中斷向量表,一拷貝,變成了ImageB的中斷向量表,還怎么正常運行呢?


  2. 方式二,網(wǎng)址:http://bbs.eeworld.com.cn/thread-1155595-1-1.html,在這個代碼里,當(dāng)App跳轉(zhuǎn)到Bootloader的時候,沒有重設(shè)置中斷向量表,那Bootloader怎么能正常工作呢??

謝謝!


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

問題1,

在在ota結(jié)束,會根據(jù)固件的標(biāo)志位進(jìn)行來執(zhí)行關(guān)閉全局中斷

然后直接跳轉(zhuǎn)還是搬中斷向量表

這里如果當(dāng)前運行的是固件A,是直接跳轉(zhuǎn)到固件B的,?

		/*?編程結(jié)束?*/
		case?CMD_IAP_END:
		{
			PRINT("IAP_END?\r\n");
			
			/*?當(dāng)前的是ImageA?*/
			if(CurrImageFlag?==?IMAGE_A_FLAG)
			{
				/*?修改DataFlash,切換至ImageB?*/
				SwitchImageFlag(IMAGE_B_FLAG);

				/*?關(guān)閉當(dāng)前所有使用中斷,或者方便一點直接全部關(guān)閉?*/
				DisableAllIRQ();

				/*?保證打印結(jié)束?*/
				DelayMs(?10?);
????????
				/*?跳入ImageB運行?*/
				GotoResetVector(IMAGE_B_ENTRY_ADD);
			}
			/*?當(dāng)前的是ImageB?*/
			else
			{
				/*?修改DataFlash,切換至ImageA?*/
				SwitchImageFlag(IMAGE_A_FLAG);
				
				/*?關(guān)閉當(dāng)前所有使用中斷,或者方便一點直接全部關(guān)閉?*/
				DisableAllIRQ();

				/*?編程ImageA第一塊?*/
				FlashBlockErase(IMAGE_A_START_ADD);
				
				FlashWriteBuf(IMAGE_A_START_ADD,?(PUINT32)?vectors_block_buf,?FLASH_BLOCK_SIZE);
				
				/*?保證打印結(jié)束?*/
				DelayMs(?10?);????????
????????
				/*?跳入ImageA運行?*/
				GotoResetVector(IMAGE_A_ENTRY_ADD);
			}
			break;
		}

B的程序起始地址是在后面, 在程序一開始的時候會進(jìn)行判斷,然后拷貝中斷想向量表,這時候因為全局中斷關(guān)掉了,所以沒問題,

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("%s\n",VER_LIB);
	ReadImageFlag();
	ImageVectorsCopy();??//???<<-----------------------------------------------------
	CH57X_BLEInit(?);
	HAL_Init(?);
	GAPRole_PeripheralInit(?);
	Peripheral_Init(?);?
	while(1){

問題2,

WCH的ble 協(xié)議棧可以無中斷運行.


謝謝答復(fù),關(guān)于問題2,我測試下來,BLE還是需要一個LLE_IRQHandler的(該中斷猜測是為BLE協(xié)議棧服務(wù)),如果單程序(無OTA),把這個注釋了,藍(lán)牙無法運行,但是在方式2里,經(jīng)過測試,發(fā)現(xiàn)即使把OTA里的LLE_IRQHandler注釋依然可以正常運行(在跳轉(zhuǎn)到OTA后),此處我想可能是因為跳轉(zhuǎn)到OTA后,前面的中斷向量表依然指向APP的中斷向量表(尚未被擦除),所以依然能正確執(zhí)行LLE_IRQHandler,但是一旦執(zhí)行擦除,OTA首要任務(wù)是將自身的中斷向量表拷貝到0地址的前512字節(jié),才能保證OTA程序繼續(xù)正常運行。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频