本文引用地址:
http://www.104case.com/article/201611/321075.htm//[Flash.c]Flash擦寫-------------------------------------------------------*
//本文件包含: *
// (1)Flash_Erase_Sector:擦除一個指定的扇區 *
// (2)Flash_Write_Nword:向一個指定的區域寫入若干個字 *
//-------------------------------------------------------------------------*
//頭文件
#include "Flash.h" //Flash擦寫頭文件
#pragma CODE_SEG CODE_flash
#pragma CONST_SEG CONST_flash
void Erase_Write_Pretreat(INT8U page); //擦寫子函數內部調用的函數聲明
//頁所對應的塊對照表
//兩個flash塊,每塊4頁 flash0 flash1
const INT8U pagetable[4][4] = {{0x3C,0x3D,0x3E,0x3F},{0x38,0x39,0x3A,0x3B},{0x34,0x35,0x36,0x37},{0x30,0x31,0x32,0x33}};
上面紅色的代碼是我添加出來的,功能是將本段代碼放在CODE_flash對應的存儲空間里。
PLACEMENT
_PRESTART,
STARTUP,
ROM_VAR,
STRINGS,
VIRTUAL_TABLE_SEGMENT,
//.ostext,
NON_BANKED,
COPY
INTO ROM_C000;
DEFAULT_ROM INTO PAGE_38, PAGE_39;
CODE_main,
CODE_flash,
CODE_MCUInit,
CODE_SCI
INTO ROM_4000;
//.stackstart,
SSTACK,
//.stackend,
DEFAULT_RAM INTO RAM;
這一段是P&E_Multilink_CyclonePro_linker.prm里摘出來了,它默認定義了所有代碼、常量的存放區段,紅色部分是我添加出來的,把我的主要文件放入了ROM_4000這個地址里,也就是對應了0x4000_0x7fff這個地址里。
于是程序順利調通,這里小小得慶祝一下~
評論