Запись __no_init __root C - PullRequest
       3

Запись __no_init __root C

5 голосов
/ 20 декабря 2011

Привет, ребята, я читал исходный текст на C и нашел такую ​​запись:

__no_init __root extern volatile unsigned char var[10]    @ 0x4000000;

Но я понятия не имею, что означает этот __no_init __root, это стандартный C?

Спасибо.

Ответы [ 2 ]

12 голосов
/ 20 декабря 2011

Это расширения языка C, используемые в некоторых компиляторах, предназначенных для встраиваемых систем (например, IAR AVR compiler ).

__no_init будет означать, что компилятор не должен инициализировать переменную, и будет использоваться, когда переменная находится в расположении аппаратного регистра, и вы не хотите, чтобы запуск программы устанавливал регистр в 0 *. * 1006

__root используется, чтобы сообщить компилятору / компоновщику, что переменная или функция должны храниться в двоичном образе, даже если он фактически не используется в программе. Это может быть полезно для целей отладки и для определения размера программы во время разработки.

2 голосов
/ 20 декабря 2011

Это макросы, которые, вероятно, определены в вашей цепочке инструментов компилятора.По моему опыту, __no_init обычно означает сказать компоновщику, что память для этой переменной не должна инициализироваться кодом запуска crt0, который обычно записывает ноль в глобальные переменные перед вызовом main.__root часто означает, что компоновщик не должен отбрасывать переменную, даже если он считает, что ни один код не использует ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...