Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: "asm" function is nonstandard
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Dениs
Вообщем переписываю бутлоадер исходя из этих исходников:
Посетить мою домашнюю страницу

Вообщем получил такую ошибку:
CMSIS\CM3\CoreSupport\core_cm3.c(58): error: #667: "asm" function is nonstandard

Вот скриншот проблемы:


Народ, подскажите что где-то макрос какой не установил ?
zltigo
QUOTE (Dениs @ Aug 16 2015, 14:39) *
CMSIS\CM3\CoreSupport\core_cm3.c(58): error: #667: "asm" function is nonstandard

Ну как-бы черным по белому все написано. Вещь нестандартная, посему смотрите ДОКУМЕНТАЦИЮ, как использовать ASM вставки в используемом Вами компиляторе. Предполагаю, что Ваш Кейл скушает типа такого:
CODE
function(...)
{
__asm
{
......

}
}


QUOTE
Народ, подскажите что где-то макрос какой не установил ?

Да уж, хорошо, что хоть не богу свечку sad.gif
Dениs
Хорошо, как же тогда использовать __set_MSP(...) необходимо для зхагрузчика ... функция в библиотеке выбирается макросами, так что я правильно спрашиваю, возможно либа устаревшая ?

Если же сделать как предлагаешь ты то происходят другие ошибки, переменная lr не определена ... Есть где-то ссылка на свежие библиотеки CMSIS для Keil ?
zltigo
QUOTE (Dениs @ Aug 16 2015, 17:43) *
Если же сделать как предлагаешь ты то происходят другие ошибки, переменная lr не определена

А подумать ну хоть чуть-чуть? Какого bx lr, то бишь thumb возврат, в таком контексте вообще нужна???
У Вас должна быть ОДНА строчка:
CODE
__asm
{
msr msp, r0
}

или, предполагаю, что поддерживается и более однозначное:
msr msp, mainStackPointer
Dениs
Это укор в том случае если я знаю АСМ АРМ-ов ... а я его не знаю ) Так что бы мне либку рабочуюю, но чувствую надо копать команды ...
zltigo
QUOTE (Dениs @ Aug 16 2015, 18:34) *
Так что бы мне либку рабочуюю...

Ну так возьмите у Keil, или ARM, что одно и то-же. Они сие породили http://www.keil.com/pack/doc/cmsis/general...l#CM_Components
romas2010
Цитата(zltigo @ Aug 16 2015, 17:56) *
У Вас должна быть ОДНА строчка:
Код
__asm
{
msr msp, r0
}


К сожалению(!!), кейловский компилятор если так написать,выдаст ошибку...особенности его ассемблера таковы,что если надо вставить некоторый asm-код в сишную функцию,то этот код надо заключать в отдельную функцию и вызывать эту функцию в С..

Цитата(Dениs @ Aug 16 2015, 14:39) *
Вообщем переписываю бутлоадер исходя из этих исходников:
Посетить мою домашнюю страницу

Вообщем получил такую ошибку:
CMSIS\CM3\CoreSupport\core_cm3.c(58): error: #667: "asm" function is nonstandard

Вот скриншот проблемы:


Народ, подскажите что где-то макрос какой не установил ?


по идее должен быть подключен к проекту еще и файл core_cm3.h ...там должен быть макрос
#define __ASM __asm

хотя действительно странное поведение компилятора....я с 5-ой версией не работал еще,в 4.73 все нормально проходит
zltigo
Неправда Ваша. Я даже специально посмотрел документацию:
http://www.keil.com/support/man/docs/armcc...59124247402.htm
romas2010
Цитата(zltigo @ Aug 25 2015, 23:07) *
Неправда Ваша. Я даже специально посмотрел документацию:
http://www.keil.com/support/man/docs/armcc...59124247402.htm

Вы правы...но есть нюанс,как говориться дьявол заключается в деталях...Я не знаю,почему,но для архитектур Cortex разработчики кейл включили т.н embedded assembler...а http://www.keil.com/support/man/docs/armcc...96945591462.htm в таблице 6.1 указано-inlining-never...
zltigo
QUOTE (romas2010 @ Aug 25 2015, 23:26) *
Вы правы...но есть нюанс,как говориться дьявол заключается в деталях...Я не знаю,почему,но для архитектур Cortex разработчики кейл включили т.н embedded assembler...а

Не путайте embedded c inline sm.gif
Ruslan1
У меня та же проблема.
Кейл 5
Если включаю опцию "Strict ANCI C", то вижу ту же ошибку:

.\Libraries\CMSIS\Include\cmsis_armcc.h(468): error: #667: "asm" function is nonstandard
__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)
.\Libraries\CMSIS\Include\cmsis_armcc.h(483): error: #667: "asm" function is nonstandard
__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value)
.\Libraries\CMSIS\Include\cmsis_armcc.h(670): error: #667: "asm" function is nonstandard
__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value)


Подключил самую новую CMSIS, думал в хедерах это пофиксили, но все по-старому.
Что делать, править исходники CMSIS?

вот собственно на это ругается:
Код
#ifndef __NO_EMBEDDED_ASM
__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)
{
  rev16 r0, r0
  bx lr
}
#endif


#ifndef __NO_EMBEDDED_ASM
__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value)
{
  revsh r0, r0
  bx lr
}
#endif

#ifndef __NO_EMBEDDED_ASM
__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value)
{
  rrx r0, r0
  bx lr
}
#endif

scifi
Цитата(Ruslan1 @ Jun 14 2018, 12:40) *
Если включаю опцию "Strict ANCI C", то вижу ту же ошибку:

Зачем включаете "Strict ANSI C"?
Ruslan1
Цитата(scifi @ Jun 14 2018, 11:42) *
Зачем включаете "Strict ANSI C"?

чтобы проверить свои исходники на наличие потенциальных проблем.
jcxz
Цитата(Ruslan1 @ Jun 14 2018, 13:43) *
чтобы проверить свои исходники на наличие потенциальных проблем.

А зачем не используете asm-файл?
Ruslan1
Цитата(jcxz @ Jun 14 2018, 13:03) *
А зачем не используете asm-файл?

Какой asm файл я не использую? Вы про "__NO_EMBEDDED_ASM" ?

ну я не знаю. Предки так делали и нам завещали, даже не задумывался над этим. А что, лучше включить?

Цитата
The usage of the Embedded Assembler can be disabled by with define __NO_EMBEDDED_ASM. This avoids potential side effects of the Embedded Assembler. Refer to Compiler User Guide - Using the Inline and Embedded Assemblers of the Arm Compiler for more information.
scifi
Цитата(Ruslan1 @ Jun 14 2018, 13:43) *
чтобы проверить свои исходники на наличие потенциальных проблем.

Я бы не стал утверждать, что отклонение от "строгого ANSI Си" - это потенциальная проблема. Но вам виднее, наверное.
Между тем, мануал говорит, что эти ошибки можно превратить в предупреждения. Вот и компилируйте, а предупреждения в хедерах игнорируйте - это же не ваш код. Но смысла в этом не вижу никакого, так как ваш код прибит гвоздями к CMSIS, а там "strict ANSI C" невозможен по определению.
Ruslan1
Цитата(scifi @ Jun 14 2018, 13:21) *
Я бы не стал утверждать, что отклонение от "строгого ANSI Си" - это потенциальная проблема. Но вам виднее, наверное.
Между тем, мануал говорит, что эти ошибки можно превратить в предупреждения. Вот и компилируйте, а предупреждения в хедерах игнорируйте - это же не ваш код. Но смысла в этом не вижу никакого, так как ваш код прибит гвоздями к CMSIS, а там "strict ANSI C" невозможен по определению.


Ну, если из листинга исчезает примерно 500 ошибок, это делает понимание оставшихся там десятков сообщений более легким.

Оределил эту __NO_EMBEDDED_ASM, данная проблема в этом файле пропала. Но вот чем это грозит?

Кстати, теперь оно находит эту asm- ошибку только в порте FreeRTOS ("port.c"), на файлы CMSIS вроде больше и не ругается.

как-то:
Код
_asm uint32_t vPortGetIPSR( void )
{
    PRESERVE8

    mrs r0, ipsr
    bx r14
}

__asm void prvEnableVFP( void )
{
    PRESERVE8

    /* The FPU enable bits are in the CPACR. */
    ldr.w r0, =0xE000ED88
    ldr    r1, [r0]

    /* Enable CP10 and CP11 coprocessors, then save back. */
    orr    r1, r1, #( 0xf << 20 )
    str r1, [r0]
    bx    r14
    nop
}
jcxz
Цитата(Ruslan1 @ Jun 14 2018, 14:16) *
Какой asm файл я не использую? Вы про "__NO_EMBEDDED_ASM" ?

Для исходного кода си используют файлы с расширением .c или .cpp. А для ассемблерного - с расширением .asm.
Зачем использовать кастрированный inline-ассемблер вместо нормального?? Тем более у вас не вставки, а полноценные функции.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.