Сергей Борщ 140 21 декабря, 2007 Опубликовано 21 декабря, 2007 · Жалоба Есть некоторая конструкция, которая должна компилиться по-разному в зависимости от того, компилится файл в 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? Или если его определять вручную в командной строке, то возможно существует какое-то общепринятое имя для этого символа? Поиск в гугле пока ничего не дал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axle 0 22 декабря, 2007 Опубликовано 22 декабря, 2007 · Жалоба Понятно, что символ THUMB_MODE можно определить в командной строке gcc, но может быть существует какой-то стандартный символ, который определяет компилятор при запуске с ключем -mthumb? Или если его определять вручную в командной строке, то возможно существует какое-то общепринятое имя для этого символа? Поиск в гугле пока ничего не дал. Можно использовать __THUMB. Подробнее здесь: http://h30097.www3.hp.com/demos/ossc/doc/c...bed/embARM.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 22 декабря, 2007 Опубликовано 22 декабря, 2007 · Жалоба Подробнее здесь: http://h30097.www3.hp.com/demos/ossc/doc/c...bed/embARM.html О! Благодарю! То, что нужно!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 26 декабря, 2007 Опубликовано 26 декабря, 2007 · Жалоба То, что нужно!!!Гладко было на бумаге... Похоже, указанные по ссылке символы определены только в упомянутом там пакете 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 Вдруг кому-то пригодится для поиска других предопределенных символов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbour 0 27 декабря, 2007 Опубликовано 27 декабря, 2007 · Жалоба gch это precompiled header и к ключу -dM отношения, похоже, не имеет. ключ -dM генерит .mach файлы, полезно разве что для отладки gcc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 27 декабря, 2007 Опубликовано 27 декабря, 2007 · Жалоба Не надо гнать на мой любимй компиллер! необоснованно! итак имеем: КЛЮЧИ ПРЕДЕФАЙНЕСЫ по умолчанию (без ключей) #define __ARMEL__ 1 -marm #define __ARMEL__ 1 -marm -thumb-interwork #define __ARMEL__ 1 #define __THUMB_INTERWORK__ 1 -mthumb #define __ARMEL__ 1 #define __THUMBEL__ 1 -mthumb -thumb-interwork #define __ARMEL__ 1 #define __THUMBEL__ 1 #define __THUMB_INTERWORK__ 1 Таким образом есть все что Вам нада: #ifdef __THUMBEL__ // тумб код #else // арм код #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axle 0 27 декабря, 2007 Опубликовано 27 декабря, 2007 · Жалоба Обнаружил, что если натравить 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 В принципе тоже самое, но список в удобном виде выводится в консоль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 26 января, 2008 Опубликовано 26 января, 2008 · Жалоба Ой, как-то эта ветка выпала из моего внимания. Не надо гнать на мой любимй компиллер! необоснованно!Ув. klen! Я не гоню на ваш любимый компилятор. Я же еще в первом посте написал, что поиск в гугле ничего не дал. Я пересмотрел документацию к GCC - там нет ни слова об этих предопределенных символах. Я специально только что задал поиск по папкам, где установлен Yagarto: THUMBEL найден в двух файлах - cc1.exe и cc1plus.exe В файлах документации он не упоминается Я понимаю, что когда вы копаетесь в исходниках gcc, все эти символы для вас как на ладони, но у меня нет возможности вникать еще и в компиляторостроение. Поэтому, собственно и был вопрос. А за полный и конкретный ответ огромное спасибо! touch empty.c arm-elf-cpp empty.c -dM | sort В принципе тоже самое, но список в удобном виде выводится в консоль. Ничего себе то же самое! Это же гораздо удобнее. Похоже, моя ошибка была в том, что я вызывал arm-elf-gcc, а не arm-elf-cpp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться