2017-04-14 13 views
0

CのARM-GCC const文字列配列を定義して直接アクセスする場合、文字列は.rodataセクションに正しく配置されます。arm gcc const stringの配列がrodataに配置されていません

ただし、構造体に.dataセクションに配置された文字列配列へのポインタがあり、RAMを使用している場合。 myStringを読み込み専用セクションに配置してRAMを保存するにはどうすればよいですか?

const char * myStrings[] = {"String1", "String2"}; //.rodata 
const char * myStrings2[] = {"String3", "String4"}; //.data 

typdef struct { 
const char ** strings; 
int a; 
} mystruct_t; 

const mystruct_t mystruct = {myStrings2,2}; 

void main() 
{ 
    for(uint8_t i=0;i<2;i++) 
    { 
     printf("%s",myStrings[i]); 
     printf("%s",mystruct.strings[i]); 
    } 
} 

編集:指定された最小コード。

+0

.dataに配置されている文字列リテラル自身またはポインタの配列ですか? – Dmitri

+1

これは有効なCコードではありません。 [ask]を読んで[mcve]を提供してください!ポインタは配列ではないことに注意してください。 – Olaf

+0

... 'const mystruct_t = {myStrings、2};の識別子がありません。 – Dmitri

答えて

1

@Dmitriが指摘するように、文字列へのポインタだけがRAMに格納されます。これは定数を宣言することで回避できます。

const char * const myStrings2[] = {"String3", "String4"}; 

typdef struct { 
    const char * const * strings; 
    int a; 
} mystruct_t; 
関連する問題