Предопределенный целевой макрос процессора для Cortex-M0+

В настоящее время я использую предопределенные макросы целевых процессоров, чтобы заставить программное обеспечение работать на нескольких целевых процессорах.

#ifdef __TARGET_CPU_CORTEX_M0
    [do something here]
#elif __TARGET_CPU_CORTEX_M3
    [do something here]
#else
    #error Unsupported compiler platform
#endif

Пример:

Это работает для Cortex-M0 и Cortex-M3, но я не могу понять, какой макрос использовать для Cortex-M0+. Кто-нибудь знает, какой макрос я могу использовать? Я использую компилятор armcc.


person Nils de Jong    schedule 22.09.2014    source источник
comment
Я использую GCC, и для этого компилятора вам нужно указать тип процессора для компилятора. Это можно сделать с помощью глобальных определений (например, __TARGET_CPU_CORTEX_M3), которые затем вы также можете использовать в своем коде. Я предполагаю, что компилятор ARM работает аналогичным образом. Вероятно, вам нужно предоставить компилятору дополнительный/другой флаг процессора. Надеюсь это поможет.   -  person wlamers    schedule 22.09.2014
comment
Спасибо @wlamers за ваш ответ. Компилятор ARM создает эти определения из опции компилятора --cpu Cortex-M0+. Это работает для параметра Cortex-M0 и Cortex-M3, но Cortex-M0+ не работает. По документации должен быть предопределенный макрос для этой платформы, но я никак не могу понять какой именно.   -  person Nils de Jong    schedule 23.09.2014


Ответы (1)


Это задокументировано, хотя и довольно косвенно. Соответствующее имя макроса происходит от параметра командной строки, поэтому --cpu=Cortex-M0plus определяет __TARGET_CPU_CORTEX_M0PLUS.

Досадно, что хотя это и не отображается в выводе --cpu=list, компилятор (я пробовал armcc версии 5.04) действительно также распознает параметр --cpu=Cortex-M0+, для которого он определяет макрос __TARGET_CPU_CORTEX_M0_

Как правило, вызов armcc --cpu=xx --list_macros /dev/null покажет, какие макросы определены для параметра процессора xx (или ошибку, если он не поддерживается).

person Notlikethat    schedule 22.09.2014
comment
Спасибо за ваш ответ. Однако это не работает в моей ситуации. Я использую параметр компилятора --cpu Cortex-M0+, поэтому, согласно документации, определение будет __TARGET_CPU_CORTEX_M0+; это, однако, не является допустимым определением. Я пробовал __TARGET_CPU_CORTEX_M0PLUS, __TARGET_CPU_CORTEX_M0_PLUS, __TARGET_CPU_CORTEX_M0P и __TARGET_CPU_CORTEX_M0_P, но безуспешно. - person Nils de Jong; 23.09.2014
comment
@NilsdeJong Вы уверены, что ваш вариант компилятора правильный? Ответ сказал --cpu=Cortex-M0plus, а не --cpu Cortex-M0+. - person user694733; 23.09.2014
comment
Я использую Keil uVision, который добавляет для меня опцию компилятора --cpu Cortex-M0+ на основе выбранной цели. Я использую микроконтроллер NXP LPC1114FHN33/301, и в их документации сказано, что он основан на Cortex-M0 (вместо Cortex-M0+). Параметр компилятора может быть недопустимым; Я связался со службой поддержки ARM по этому вопросу... - person Nils de Jong; 23.09.2014
comment
Устройство, которое я использую, по-видимому, дважды присутствует в списке устройств: один раз как LPC1114FHN33/301 с неправильным параметром компилятора --cpu Cortex-M0+ и один раз как LPC1114/301 с параметром компилятора --cpu Cortex-M0. Использование последнего решило мою проблему. Спасибо, что указали мне правильное направление! - person Nils de Jong; 24.09.2014