2010-03-29 3 views
5

Я новичок в компиляторе GNU.Ссылка на файл сценария компоновщика на исходный код

У меня есть исходный код кода C, который содержит некоторые структуры и переменные, в которых мне нужно разместить определенные переменные в определенных местах.

Итак, я написал файл сценария компоновщика и использовал __ attribute__("SECTION") при описании переменной в исходном коде C.

Я использую компилятор GNU (cygwin) для компиляции исходного кода и создания файла .hex с использованием опции -objcopy, но я не получаю, как связать файл сценария компоновщика в компиляции, чтобы соответственно переместить переменные.

Я прикрепляю файл сценария компоновщика и исходный файл C для ссылки.

Пожалуйста, помогите мне связать файл сценария компоновщика с моим исходным кодом, создав файл .hex с помощью GNU.

/*linker script file*/ 
/*defining memory regions*/ 

     MEMORY 
     { 
     base_table_ram  : org = 0x00700000, len = 0x00000100 /*base table area for BASE table*/ 
     mem2    : org =0x00800200, len = 0x00000300 /* other structure variables*/ 
     } 
/*Sections directive definitions*/ 

     SECTIONS 
     { 
     BASE_TABLE : { } > base_table_ram 

     GROUP     : 
      { 
        .text  : { } { *(SEG_HEADER) } 
        .data  : { } { *(SEG_HEADER) } 
        .bss   : { } { *(SEG_HEADER) } 

      } > mem2 

     } 

С код:

const UINT8 un8_Offset_1 __attribute__((section("BASE_TABLE"))) = 0x1A; 
const UINT8 un8_Offset_2 __attribute__((section("BASE_TABLE"))) = 0x2A; 
const UINT8 un8_Offset_3 __attribute__((section("BASE_TABLE"))) = 0x3A; 
const UINT8 un8_Offset_4 __attribute__((section("BASE_TABLE"))) = 0x4A; 
const UINT8 un8_Offset_5 __attribute__((section("BASE_TABLE"))) = 0x5A;  
const UINT8 un8_Offset_6 __attribute__((section("SEG_HEADER"))) = 0x6A; 

Мое намерение состоит в том, чтобы поместить переменные раздела «BASE_TABLE» по адресу, определенному I файл компоновщик сценария, а остальные переменные на «SEG_HEADER» определены в файл сценария компоновщика выше.

Но после компиляции, когда я смотрю в .hex-файл, переменные раздела подразделяются на разные шестнадцатеричные записи, расположенные по адресу 0x00, а не те, которые указаны в файле сценария компоновщика.

Пожалуйста, помогите мне связать файл сценария компоновщика с исходным кодом.

Есть ли какие-либо параметры командной строки для связывания файла сценария компоновщика, если какая-либо информация предоставит мне информацию о том, как использовать параметры.

Заранее благодарен,

SureshDN.

ответ

2

Попробуйте gcc -Xlinker -T (linker script name) (c sources files)

2

Я первый компилировать все мои файлы Си в объектные файлы, а затем связать их с:

gcc -Xlinker -T"xxx.lds" (all object files)

От ССАГПЗ документы:

`-Xlinker OPTION' 
    Pass OPTION as an option to the linker. You can use this to 
    supply system-specific linker options which GNU CC does not know 
    how to recognize. 
2

Спасибо за ответ,

Я нашел один м опция ручного компоновщика в GCC, «ld» и опция -T, чтобы связать разделы с исходным кодом.

ld -T (linker scriptname) -o (final objfile) (objectfile of source file)

Благодаря Суреш

Смежные вопросы