2017-02-07 14 views
0

私はルネサスSyenrgy(ARM皮質M4)7.40.5.9722IARコンパイラの特定の場所に変数または関数を配置する方法は?

コードフラッシュサイズのためのIAR Embedded Workbenchを使用しています:私がこの機能を載せていきたいと思います

void function (void) 
{ 
    unsigned char a; 
    a = a+1; 
} 

:1メガバイト

は、次の例を考えてみましょうフラッシュ内の特定の場所。 このコードのユーザー定義セクションを定義する方法とは何ですか?私はIARコンパイラユーザガイドを経て、以下のように述べた方法を実施してきた

#pragma default_function_attribute = @ "MY_FUNC" 
void function (void) 
{ 
    unsigned char a; 
    a = a + 1; 
} 
#pragma default_function_attribute = 

そして.icfファイルに次のように、私はセクションを追加しました:付き

define symbol region_VECT_start = 0x00000000; 
define symbol region_VECT_end  = 0x000003FF; 
define symbol region_ROMREG_start = 0x00000400; 
define symbol region_ROMREG_end = 0x000004FF; 
define symbol region_FLASH_start = 0x00000500; 
define symbol region_FLASH_end  = 0x000BFFFF; // Fklsh end address is modified from 0x000FFFFF to 0x000BFFFF 
define symbol region_MY_FUNC_start = 0x000C0000; // This statement is added 
define symbol region_MY_FUNC_end = 0x000FFFFF; // This statement is added 
define symbol region_RAM_start  = 0x20000000; 
define symbol region_RAM_end  = 0x2002FFFF; 
define symbol region_DF_start  = 0x40100000; 
define symbol region_DF_end  = 0x40103FFF; 
define symbol region_QSPI_start = 0x60000000; 
define symbol region_QSPI_end  = 0x63FFFFFF; 

/* Stack and heap sizes are defined in bsp_cfg.h */ 

define memory mem with size  = 4G; 
define region VECT_region  = mem:[from region_VECT_start to region_VECT_end]; 
define region ROMREG_region  = mem:[from region_ROMREG_start to region_ROMREG_end]; 
define region FLASH_region  = mem:[from region_FLASH_start to region_FLASH_end]; 
define region RAM_region  = mem:[from region_RAM_start to region_RAM_end]; 
define region DF_region   = mem:[from region_DF_start  to region_DF_end]; 
define region QSPI_region  = mem:[from region_QSPI_start to region_QSPI_end]; 
define region MY_FUNC   = mem:[from region_MY_FUNC_start to region_MY_FUNC_end]; // New section is added 

をこれらの変更は、コードが正しくコンパイルされています。 しかし、「機能」は必要な場所に配置されていません0x000C0000

なぜですか?

+0

私はあなたがまだ 'の#pragma場所を使用することができると思います=あなたのコードの中の '#pragma default_function_attribute'ブロックの中のあなたの関数の上にある行に' 0x000C0000'を置きます。 – ecle

答えて

0

_Pragma("location=\"__your_section__\"")を関数の前に置くことができます。

そして、(例えば)リンカファイルで:

define block __your_section_block__ size = 0x100 { section __your_section__ }; 

そして、あなたはリンカに行を追加してください:

place in MY_FUNC { block __your_section_block__ }; 
関連する問題