專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

COSMIC編譯器讓代碼在RAM中運(yùn)行的方法

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年09月14日   【字體:

對(duì)于STM8單片機(jī)Flash的塊編程,代碼必須在Ram內(nèi)存中運(yùn)行。因此,存儲(chǔ)在Flash中的代碼必須拷貝到Ram中編譯、鏈接、運(yùn)行。Cosmic編譯器有兩種實(shí)現(xiàn)方法:在STVD工程中創(chuàng)建段、在鏈接文件中創(chuàng)建內(nèi)存段

 

1、STVD工程中創(chuàng)建段

1)、在工程中設(shè)置段名

project->settings->linker->category->input’,如下圖所示:

 

設(shè)置段名‘.FLASH_CODE’,注意同時(shí)設(shè)置options為‘-ic’,ic的意義為moveable code。

2)、編寫(xiě)存放在段FLASH_CODE中的代碼,如下所示

#pragma section(FLASH_CODE)//把代碼放到FLASH_CODE

void writeFlash(void)

{

……

}

 

void eraseFlash(void)

{

……

}

#pragma section()//代碼放置到默認(rèn)段

2、在鏈接文件中創(chuàng)建內(nèi)存段

1)、在鏈接文件(*.lkf)中定義特殊的內(nèi)存段,并以‘-ic’標(biāo)記,如下所示:

2)、編寫(xiě)存放在段FLASH_CODE中的代碼,如下所示

#pragma section(FLASH_CODE)//把代碼放到FLASH_CODE

void writeFlash(void)

{

……

}

 

void eraseFlash(void)

{

……

}

#pragma section()//代碼放置到默認(rèn)段

3、可以在生成的map文件中檢查以上兩種方式的設(shè)置是否正確,如下map文件:

標(biāo)記‘from’的為存放代碼部分,標(biāo)記‘initialized’的為執(zhí)行代碼部分。

4、調(diào)用函數(shù)

在調(diào)用這些函數(shù)之前,必須把這些代碼從flash拷貝到Ram,cosmic編譯器使用內(nèi)置的函數(shù)‘int _fctcpy(char name)’實(shí)現(xiàn)此功能。其中name為定義的段名的首字母,如本例中的‘F’,

void main(void)

{

……

_fctcpy(‘F’);//Flash部分的代碼拷貝到Ram

……

}

關(guān)閉窗口

相關(guān)文章