Наиболее распространённые (armcc, clang) поддерживают расширения
gcc для упаковки структур, атрибутов и прочего. iarcc
выпендривается в силу тяжёлого наследия прошлого; armcc тоже
выпендривался (и даже имел свой несовместимый ABI), но всё-таки
решился перейти на синтаксис gcc. Насчёт Tasking не знаю, не пользовал.
И я нигде не говорил, что __attribute__((..)) это стандарт. Но де-факто этот синтаксис использует большое количество не-gcc инструментов.
TI отказался от поддержки своего ARM компилятора, а всю команду весьма разумно перевёл на поддержку GNU Tools ARM Embedded и Linaro. Тоже __attibute__(()).
Бизнес-код для embedded (код, реализующий логику), использующий GCC и упакованные структуры, без каких-либо телодвижений заработает на ПК.
cmsis_compiler.h
Из-за отсутствия ясности в стандарте, приходится рожать монстра типа CMSIS и потом использовать __PACKED для отвязки от реализаций в разных компиляторах.
Ничего хорошего в этом нет. "Мы сами создаём себе трудности, чтобы затем их мужественно преодолевать".