打印

读SD卡FatFs+IAP+APP程序升级怎么程序跑的慢一些了

[复制链接]
2447|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如题:  我用的是STM32F103R8   64K Flash     我写有两个程序,一个做bootloader,一个是用户功能程序APP.
bootloader地址:0X08000000--0X08005000   APP地址:0X08005000--0X08010000
第一个程序做bootloader通过JTAG下载到FLASH,把APP程序的bin文件拷贝到SD卡中,读取SD卡,再写FLASH,然后跳转到0X08005000位置运行APP程序。我两个程序都使用了FreeRTOS系统。
结果与想象:读取SD写flash成功,跳转也成功,中断也能运行。但是有个问题,程序比较迟钝(对比我直接把APP程序通过JTAG下载到flash中--当然这里有一点地址配置的变动,不然跑不了---),好像有很多任务在做,其余一切正常。不知道大侠是否遇到,是什么问题引起的。
沙发
lin34337151|  楼主 | 2013-7-8 23:00 | 只看该作者
#define FLASH_APP_ADDR                0x08005000        
#define STM_PAGE_SIZE                 1024  

typedef  void (*fun)(void); //定义一个函数类型的参数.   
fun AppStart;   

//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(INT32U addr)
{
    MSR MSP, r0                         //set Main Stack value
    BX r14
}  
////////////SD卡读,写FLASH,跳转      
void SD_ReadWord(void)
{
   
    TurnToSD();//SPI初始化
    MMC_SELECT();        //SPI 有效
        FirmwareUpdate();  //写FLASH
        TIM_Cmd(TIM2, DISABLE);        //关串口中断
        Jump2App(FLASH_APP_ADDR);  //跳转
        TIM_Cmd(TIM2, ENABLE);     //开中断
    MMC_DESELECT();                        //SPI 失效
}
/////////任务函数
void vTask_SdCard(void *pvParameters)
{   
        for(;;)
        {
                SD_ReadWord();
        }       
}
/////////////////////主函数
int main(void)
{       
        prvSetupHardware();
        xTaskCreate(vTask_SdCard,( signed char * )"vTask_SdCard",1024,NULL,1,NULL);       
        vTaskStartScheduler();       
}

/////////////跳转函数
void Jump2App(INT32U Addr)
{
        if(((*(vu32*)Addr)&0x2FFE0000) == 0x20000000)        //检查栈顶地址是否合法.
        {
                AppStart = (fun)(*(vu32*)(Addr+4));                        //用户代码区第二个字为程序开始地址(复位地址)
                MSR_MSP(*(vu32*)Addr);               
                AppStart();                                                                        //跳转到APP.
        }
}
////////读SD 写FLASH
void FirmwareUpdate(void)
{
        INT16U PageOffest = 0;               
        INT16U ByteOffest;                       

        f_mount(0, &Fs);

        res = f_open(&file, "CoinCar.bin", FA_OPEN_EXISTING | FA_READ);
        if(FR_OK != res) return;

        while(1)
        {
            res = f_read(&file, buffer, STM_PAGE_SIZE, &br);
            if (res || br == 0) break;   

                FLASH_Unlock();
                FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
                FLASH_ErasePage(FLASH_APP_ADDR + PageOffest);
                for(ByteOffest = 0; ByteOffest < STM_PAGE_SIZE; ByteOffest += 2)
                {
                        FLASH_ProgramHalfWord(FLASH_APP_ADDR + PageOffest + ByteOffest, *(u16*)(buffer + ByteOffest));

                }
                FLASH_Lock();
                PageOffest += STM_PAGE_SIZE;
        }

        f_close(&file);
        f_mount(0, 0);
}

使用特权

评论回复
板凳
lin34337151|  楼主 | 2013-7-8 23:07 | 只看该作者
在APP中加了下面两个函数
void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)         
{                     
        SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器
        //用于标识向量表是在CODE区还是在RAM区
}

void MYRCC_DeInit(void)

{     

      RCC->APB1RSTR = 0x00000000;//复位结束                  

       RCC->APB2RSTR = 0x00000000;        

      RCC->AHBENR = 0x00000014;  //睡眠模式闪存和SRAM时钟使能.其他关闭.   

      RCC->APB2ENR = 0x00000000; //外设时钟关闭.                     

      RCC->APB1ENR = 0x00000000;   

       RCC->CR |= 0x00000001;    //使能内部高速时钟HSION            

       RCC->CFGR &= 0xF8FF0000;

//复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]            

       RCC->CR &= 0xFEF6FFFF;  //复位HSEON,CSSON,PLLON

       RCC->CR &= 0xFFFBFFFF;  //复位HSEBYP        

       RCC->CFGR &= 0xFF80FFFF;//复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE

       RCC->CIR = 0x00000000;    //关闭所有中断         

       //配置向量表                        

#ifdef  VECT_TAB_RAM

       MY_NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);  

#else   

       MY_NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x5000);

#endif

}

我现在感觉这个MYRCC_DeInit()初始化的放置的位置多我的程序影响很大,目前不知道是boot这边的问题还是APP的问题

未命名.jpg (57.95 KB )

ROM设置

ROM设置

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

113

主题

285

帖子

3

粉丝