|
|
  |
GCC препроцессор, Thumb/ARM, Как из исходника определить режим компиляции |
|
|
|
Dec 21 2007, 22:07
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Есть некоторая конструкция, которая должна компилиться по-разному в зависимости от того, компилится файл в ARM или THUMB режиме. Надо написать что-то вроде Код #if __CPU_MODE__ == 1 // THUMB mode *(--StackPointer) = 0x003F; // SR value: system mode, FIQ & IRQ enabled, THUMB #else *(--StackPointer) = 0x001F; // SR value: system mode, FIQ & IRQ enabled, ARM #endif Понятно, что символ THUMB_MODE можно определить в командной строке gcc, но может быть существует какой-то стандартный символ, который определяет компилятор при запуске с ключем -mthumb? Или если его определять вручную в командной строке, то возможно существует какое-то общепринятое имя для этого символа? Поиск в гугле пока ничего не дал.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 22 2007, 11:33
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Цитата(Сергей Борщ @ Dec 22 2007, 04:07)  Понятно, что символ THUMB_MODE можно определить в командной строке gcc, но может быть существует какой-то стандартный символ, который определяет компилятор при запуске с ключем -mthumb? Или если его определять вручную в командной строке, то возможно существует какое-то общепринятое имя для этого символа? Поиск в гугле пока ничего не дал. Можно использовать __THUMB. Подробнее здесь: http://h30097.www3.hp.com/demos/ossc/doc/c...bed/embARM.html
|
|
|
|
|
Dec 26 2007, 19:32
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Сергей Борщ @ Dec 22 2007, 14:50)  То, что нужно!!! Гладко было на бумаге... Похоже, указанные по ссылке символы определены только в упомянутом там пакете GNUPro. В используемом мной Yagarto таких символов не обнаружилось  В документации к Yagarto об этом тоже тишина. От безысходности и отсутствия интернета начал читать подряд имевшуюся документацию на WinAVR (в комплекте с Yagarto идет документация в форматах .man и .info, а сами man и info отсутствуют). Обнаружил, что если натравить gcc с ключем -dM на заголовочный файл, то генерится какой-то чудовищный бинарник с расширением .gch, в котором редактором видны предопределенные символоы. Таким образом выяснилось, что для -mcpu=arm7tdmi символы __ARM_ARCH_4T__, __ARMEL__, __arm__ предопределены независимо от режима ARM/THUMB, __thumb__, __THUMBEL__ при компиляции с ключем -mthumb и при ключе -mthumb-interwork определяется символ __THUMB_INTERWORK__ Что интересно - при компиляции с тем же -dM не заголовочного файла, а .cpp или .c генерится совсем другой файл .mach, содержимое которого никак не похоже на описанное в документации Цитата generate a list of #define directives for all the macros defined during the execution of the preprocessor, including predefined macros Вдруг кому-то пригодится для поиска других предопределенных символов.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 27 2007, 08:24
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Цитата(Сергей Борщ @ Dec 27 2007, 01:32)  Обнаружил, что если натравить gcc с ключем -dM на заголовочный файл, то генерится какой-то чудовищный бинарник с расширением .gch, в котором редактором видны предопределенные символоы. Таким образом выяснилось, что для -mcpu=arm7tdmi символы __ARM_ARCH_4T__, __ARMEL__, __arm__ предопределены независимо от режима ARM/THUMB, __thumb__, __THUMBEL__ при компиляции с ключем -mthumb и при ключе -mthumb-interwork определяется символ __THUMB_INTERWORK__ В прошлый раз не мог вспомнить как я получал список предопределенных символов. Пришлось положиться на гугл. Теперь вспомнил: Код touch empty.c arm-elf-cpp empty.c -dM | sort В принципе тоже самое, но список в удобном виде выводится в консоль.
|
|
|
|
|
Jan 26 2008, 10:57
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Ой, как-то эта ветка выпала из моего внимания. Цитата(klen @ Dec 27 2007, 09:37)  Не надо гнать на мой любимй компиллер! необоснованно! Ув. klen! Я не гоню на ваш любимый компилятор. Я же еще в первом посте написал, что поиск в гугле ничего не дал. Я пересмотрел документацию к GCC - там нет ни слова об этих предопределенных символах. Я специально только что задал поиск по папкам, где установлен Yagarto: THUMBEL найден в двух файлах - cc1.exe и cc1plus.exe В файлах документации он не упоминаетсяЯ понимаю, что когда вы копаетесь в исходниках gcc, все эти символы для вас как на ладони, но у меня нет возможности вникать еще и в компиляторостроение. Поэтому, собственно и был вопрос. А за полный и конкретный ответ огромное спасибо! Цитата(axle @ Dec 27 2007, 10:24)  Код touch empty.c arm-elf-cpp empty.c -dM | sort В принципе тоже самое, но список в удобном виде выводится в консоль. Ничего себе то же самое! Это же гораздо удобнее. Похоже, моя ошибка была в том, что я вызывал arm-elf-gcc, а не arm-elf-cpp
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|