新手上路
- 积分
- 46
- 金钱
- 46
- 注册时间
- 2020-12-17
- 在线时间
- 14 小时
|
本帖最后由 15104684669 于 2021-1-14 08:13 编辑
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)
{
iap_write_appbin(FLASH_APP1_ADDR+fwaddr,FramesDataArray,DataLength);
DataLength = 0;
FramesArrayData();
}
这个是BootLoader中的一段代码,程序到了if这就进不去了,不知道是什么原因,但是程序还不死机,只是进不去if
这个数组是串口接收数组
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));
这个是串口接收函数,这个数据都是可以正常过来的没有问题
void UART5_IRQHandler()
{
//RX
if(USART_GetITStatus(UART5, USART_IT_RXNE) == SET)
{
u8 Rxd;
Rxd = USART_ReceiveData(UART5);
if(USART_RX_CNT<USART_REC_LEN)
{
USART_RX_BUF[USART_RX_CNT]=Rxd;
USART_RX_CNT++;
}
ComData5.ucRxBuf[ComData5.uiRxEndIndex] = USART_ReceiveData(UART5);
ComData5.uiRxEndIndex++;
if(ComData5.uiRxEndIndex >= ComRxBufferSize)
{
ComData5.uiRxEndIndex = 0;
}
ComData5.uiRxReadyFlag = 0;
ComData5.uiRxTimeOut = 0;
}
//TX
if(USART_GetITStatus(UART5, USART_IT_TC) == SET)
{
USART_ClearITPendingBit(UART5, USART_IT_TC);
//·¢?ííê±?í£?1·¢?í
if(ComData5.uiTxStartIndex == ComData5.uiTxEndIndex)
{
// USART2->CR1 &= ~USART_Mode_Tx;
ComData5.uiTxReadyFlag = 1;
}
//·¢?íêy?Y
else
{
UART5->DR = ComData5.ucTxBuf[ComData5.uiTxStartIndex];
ComData5.uiTxStartIndex++;
if(ComData5.uiTxStartIndex >= ComTxBufferSize)
{
ComData5.uiTxStartIndex = 0;
}
}
}
//RX over
if (USART_GetFlagStatus(UART5, USART_FLAG_ORE) != RESET)
{
(void)USART_ReceiveData(UART5);
}
}
下面是关于rom和ram的地址分配
IROM 0X80000000 0X5000 IRAM 0X20000000 0XC00
希望大神能够帮帮忙,在这里谢谢了。
|
|