Это расширения языка C, используемые в некоторых компиляторах, предназначенных для встраиваемых систем (например, IAR AVR compiler ).
__no_init
будет означать, что компилятор не должен инициализировать переменную, и будет использоваться, когда переменная находится в расположении аппаратного регистра, и вы не хотите, чтобы запуск программы устанавливал регистр в 0 *. * 1006
__root
используется, чтобы сообщить компилятору / компоновщику, что переменная или функция должны храниться в двоичном образе, даже если он фактически не используется в программе. Это может быть полезно для целей отладки и для определения размера программы во время разработки.