Перейти к содержанию

"asm" function is nonstandard

Вообщем переписываю бутлоадер исходя из этих исходников:
Посетить мою домашнюю страницу

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

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


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
QUOTE (Dениs @ Aug 16 2015, 14:39) <{POST_SNAPBACK}>
CMSIS\CM3\CoreSupport\core_cm3.c(58): error: #667: "asm" function is nonstandard

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

}
}


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

Да уж, хорошо, что хоть не богу свечку sad.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Хорошо, как же тогда использовать __set_MSP(...) необходимо для зхагрузчика ... функция в библиотеке выбирается макросами, так что я правильно спрашиваю, возможно либа устаревшая ?

Если же сделать как предлагаешь ты то происходят другие ошибки, переменная lr не определена ... Есть где-то ссылка на свежие библиотеки CMSIS для Keil ?
Изменено пользователем IgorKossak
бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
QUOTE (Dениs @ Aug 16 2015, 17:43) <{POST_SNAPBACK}>
Если же сделать как предлагаешь ты то происходят другие ошибки, переменная lr не определена

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

или, предполагаю, что поддерживается и более однозначное:
msr msp, mainStackPointer

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Это укор в том случае если я знаю АСМ АРМ-ов ... а я его не знаю ) Так что бы мне либку рабочуюю, но чувствую надо копать команды ...
Изменено пользователем IgorKossak
бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
QUOTE (Dениs @ Aug 16 2015, 18:34) <{POST_SNAPBACK}>
Так что бы мне либку рабочуюю...

Ну так возьмите у Keil, или ARM, что одно и то-же. Они сие породили http://www.keil.com/pack/doc/cmsis/general...l#CM_Components

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(zltigo @ Aug 16 2015, 17:56) <{POST_SNAPBACK}>
У Вас должна быть ОДНА строчка:
Код
__asm
{
msr msp, r0
}


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

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

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

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


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


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

хотя действительно странное поведение компилятора....я с 5-ой версией не работал еще,в 4.73 все нормально проходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(zltigo @ Aug 25 2015, 23:07) <{POST_SNAPBACK}>
Неправда Ваша. Я даже специально посмотрел документацию:
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...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
QUOTE (romas2010 @ Aug 25 2015, 23:26) <{POST_SNAPBACK}>
Вы правы...но есть нюанс,как говориться дьявол заключается в деталях...Я не знаю,почему,но для архитектур Cortex разработчики кейл включили т.н embedded assembler...а

Не путайте embedded c inline sm.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня та же проблема.

Кейл 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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Если включаю опцию "Strict ANCI C", то вижу ту же ошибку:

Зачем включаете "Strict ANSI C"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Зачем включаете "Strict ANSI C"?

чтобы проверить свои исходники на наличие потенциальных проблем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
чтобы проверить свои исходники на наличие потенциальных проблем.

А зачем не используете asm-файл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А зачем не используете 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти