您好!
我一直在尝试将闪存 B 扇区划分为 FLASHB_1和 FLASHB_2、以便我可以通过应用在 FLASHB_2中写入校准值。 我能够对 FLASHB 扇区进行分区、并能够通过应用程序写入 FLASHB_2扇区。 但是,在这之后,当我进一步执行应用程序时,在 while (1)循环中 会生成_中断 void ADCINT1_ISR (void),而这在我的应用程序中不使用。 我对 FLASHB 扇区进行分区是否正确? 以下是.cmd 文件中的应用程序和更改。 FlashInit 和 FlashEraseVerify 编程在 while (1)循环一次仅用于写入之前调用。 因为当我通过调试器刷写代码时、所有扇区都会被擦除、所以我没有在应用中调用 FlashErase API。
.cmd 文件
FLASHB_1:origin = 0x3F0000,length = 0x003500 //片上 FLASHB,校准数据位于其中。
FLASHB_2:origin = 0x3F3500,length = 0x500 //校准数据所在的片上 FLASHB。
//以后删除下一部分->减少链接器警告
FLASHA:origin = 0x3F4000,length = 0x003F80 //片上 FLASHA 用户
应用代码:
uint16 FlashEraseProgramVerify (void);
void FlashInit (void);
extern uint16 * RamfuncsLoadStart、* RamfuncsLoadEnd、* RamfuncsRunStart、* RamfuncsLoadSize;//TMB fix build error
空 FlashInit (空)
{
memcpy (((uint16 *)&RamfuncsRunStart、(uint16 *)&RamfuncsLoadStart、(uint32)&RamfuncsLoadSize);
EALLOW;
{
Flash_CPUScaleFactor = scale_factor;
}
EDIS;
EALLOW;
{
Flash_CallbackPtr =空;
}
EDIS;
EALLOW;
{
FlashRegs.FBANKWAIT.bit.PAGEWAIT = 1;
FlashRegs.FBANKWAIT.bit.RANDWAIT = 1;
}
EDIS;
ASM (" NOP ");
ASM (" NOP ");
ASM (" NOP ");
ASM (" NOP ");
ASM (" NOP ");
ASM (" NOP ");
ASM (" NOP ");
ASM (" NOP ");
}
UINT16状态= 0;
UINT16 FlashEraseProgramVerify (空)
{
Flash_ST FlashStatus;
uint16 * Flash_ptr;//指向闪存中某个位置的指针
uint16 uscnt;
uint16 buff [10]={0、1、2、3、4、5、6、7、8、9};
Flash_ptr =(UINT16 *) 0x3F3500;
状态= Flash_Program (Flash_ptr、buff、sizeof (buff)、FlashStatus);
if (状态!= 0)
{
返回0;
}
其他
{
for (usCnt = 0;usCnt < sizeof (buff);usCnt++)
{
buff [usCnt]= 10 + usCnt;
}
Flash_ptr =(uint16 *) 0x3F3500 + sizeof (buff);
状态= Flash_Program (Flash_ptr、buff、sizeof (buff)、FlashStatus);
if (状态!= 0)
{
返回0;
}
其他
{
返回1;
}
}
}
此致、
Chandrakant Pal