Size: a a a

2021 November 23

IZ

Igor Zafievsky in Embedded Group
Буду неоригинален: сертификация подобного оборудования начинается ДО начала его разработки
источник

АК

Александр Климов... in Embedded Group
Ну почти так. Из cmsis взял асм файл, выкинул все кроме hard_hault хендлера где только вечный цикл и вместо неё написал свою функцию. Это все ещё не боевой код, но готовлюсь к тому, как удовлетворять разные требования стандартов.
источник

RS

Roman Storozhenko in Embedded Group
источник

АК

Александр Климов... in Embedded Group
Он уже на си
источник

VO

Vyacheslav Olkhovche... in Embedded Group
я не понимаю откуда в стандарте взялся asm файл. без пояснений, с плюсовой обвязкой
источник

SK

Stas Koynov in Embedded Group
а этот стартап типа прошел сертификацию или что? просто почему пустой while(1); ? C++ согласно стандарта считает вечный цикл, без сайд эффектов UB, и вправе его удалить, лучше писать через nop,
void Default_Handler(void)
{
   while(1) __NOP();
}

и я так понял низя юзать макросы чтоль? почему не облогородить weak вектора через:
#define WEAK_HANDLER(name) \
   void name (void) __attribute__ ((weak, alias("Default_Handler")));


// Cortex-M3 Processor Interrupt
WEAK_HANDLER(NMI_Handler       )
WEAK_HANDLER(HardFault_Handler )

и еще немного нытья зачем коменты после векторов. ведь имя вектора и так мне говорит что за вектор. это просто из цикла i++; //increment
источник

RS

Roman Storozhenko in Embedded Group
не проходил
сочинил для интереса
источник

RS

Roman Storozhenko in Embedded Group
про while(1); можешь показать стандарт?
источник

AT

Alexey Tsvetkov in Embedded Group
Clang очень хорошо удаляет пустые while(1)
источник

VO

Vyacheslav Olkhovche... in Embedded Group
а hy-12x можно как-то заткнуть, не выпаивая?
источник

SK

Stas Koynov in Embedded Group
In a valid C++ program, every thread eventually does one of the following:

terminate
makes a call to an I/O library function
performs an access through a volatile glvalue
performs an atomic operation or a synchronization operation
No thread of execution can execute forever without performing any of these observable behaviors.

Note that it means that a program with endless recursion or endless loop (whether implemented as a for-statement or by looping goto or otherwise) has undefined behavior. This allows the compilers to remove all loops that have no observable behavior, without having to prove that they would eventually terminate.

из https://en.cppreference.com/w/cpp/language/memory_model
в стандарте мне лень уже искать, но в чате ++ это тема всплывает раз в три месяца. и решение подсказать компилятору что да пусто, но есть nop, который он не имеет права удалять. ибо он в 99% как инлайн асм или обмазан флагами. но гцц даже 10.2 при std=c++17 не удаляет это дело. НО имхо лучше писать сразу чтобы не беспокоится об этом.
источник

RS

Roman Storozhenko in Embedded Group
но ведь срартап c а не с++
источник

RS

Roman Storozhenko in Embedded Group
нужно изучить подробнее тему
источник

SK

Stas Koynov in Embedded Group
я думаю в си такие же правила. просто gcc для олдскула отпускает вожжи.
источник

RS

Roman Storozhenko in Embedded Group
while(1) __NOP()  мне не нравится
источник

SK

Stas Koynov in Embedded Group
я просто пишу стартап сразу внутри
#ifdef __cplusplus
extern "C" {
#endif

чтоб можно было юзать и там и там. смысл его два раза переписывать
источник

VO

Vyacheslav Olkhovche... in Embedded Group
там и там -- где?
источник

RS

Roman Storozhenko in Embedded Group
так его и не нужно переписывать
источник

RS

Roman Storozhenko in Embedded Group
но обработчики должны быть не декорированы, да
источник

SK

Stas Koynov in Embedded Group
чем же? __NOP() взят из CMSIS.
источник