Д_М 0 5 июня, 2017 Опубликовано 5 июня, 2017 · Жалоба Приветствую! Это нужно для того, чтобы векторы прерываний, расположенные в загрузочном секторе, передавали управление функциям, расположенном в секторе приложений. Адрес может быть произвольным, но одинаковым, как для загрузчика, так и для приложения. Делал вот так __no_init volatile unsigned int Sys_ptr @0x0100; Компилятор IAR ошибок не выдает. Работает. Смущает, что в начале работы программы в этой ячейке не нулевое значение. Правильно ли я делал? Можно ли быть уверенным, что при такой декларации переменной не будет пересечения со стеками и данными? Хотел, для уверенности, разместить эту переменную в области I/O (0x00..0xFF), на какой-то зарезервированный адрес, в частности 0x76. Не тут то было! Значение постоянно плавает. Если адрес зарезервирован, то это не значит, что его можно использовать, как ячейку памяти. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 5 июня, 2017 Опубликовано 5 июня, 2017 · Жалоба __no_init означает, что переменная не инициализируется вашим стартапом. Соответственно изначально она имеет некое мусорное значение... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 5 июня, 2017 Опубликовано 5 июня, 2017 (изменено) · Жалоба То, что в ячейке содержится ненулевое значение - это результат действия __no_init, так и должно быть. По идее 0xFF. Размещать переменную в области I/O нельзя: там уже атмел разместил регистры своих устройств. Изменено 5 июня, 2017 пользователем aiwa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться