Тут ещё extern inline не обсосали)))
Помню что в стандарте это описывается.
С ходу нашёл лишь
https://www.ibm.com/support/knowledgecenter...ine_linkage.htm
http://m68hc11.serveftp.org/inline-1.php
А в IAR разве нет атрибутов наподобие gcc и keil?
У меня написан compiler.h в котором все нюансы компиляторов запрятаны. Типа
#if defined(__GNUC__)
# define __is_always_inline __inline__ __attribute__((__always_inline__))
#endif
А пользовательский код никаких специфических вещей компиляторов не использует - только свою прослойку.
static __is_always_inline void foo(void)
{
// do something
}
ИМХО прагмы в коде последнее дело...
Цитата(Сергей Борщ @ May 2 2018, 22:55) А решение "в лоб" не работает?Телепатирую))) Видимо нет, т.к. хочется видеть разный вывод: size before: XXX size after: XXX
Цитата(Trashy_2 @ Jan 22 2018, 16:39) В общем, как заставить работать первый вариант? я полагаю так: Код#define _svComandLine(vROW_Z) Serial2.print("\e["#vROW_Z";1H"); #define svComandLine(vROW_Z) _svComandLine(vROW_Z)
Там два разных примера и смысл там, насколько я понимаю, такой: Первый пример - традиционный с условным переходом, где каждая ветка имеет свои уникальные инструкции, помимо общих инструкций проверки условия и условного перехода. Второй пример - линейный с использованием условного выполнения на стадии каждой инструкции и если инструкция не нужна, она трактуется как NOP и выполняется за 1 такт - чудес не бывает))). Второй лучше тем, что линейный и не требует перезагрузки конвейера, как в случае с переходом, а так же не тратит время на сам переход. Первый лучше тем, что работает на всех ARM Cortem-M, включая M0.
Цитата(krux @ Jan 25 2018, 19:40) приведенный выше пример справедлив, например, когда есть тормозная флешка и быстрая и большая внешняя DDR. тогда cstartup как раз скопирует константу, к которой нужен быстрый и частый доступ в DDR.В таких система обычно весь flash без разбора копируется в ОЗУ задолго да cstartup.