реклама на сайте
подробности

 
 
> Порт для Atmel ARM (IAR), Зачем нужно переопределять __low_level_init()?
gladov
сообщение Feb 25 2009, 07:16
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Принимайте в свои ряды smile.gif
Почитал про scmRTOS и она мне очень понравилась, начал изучать. Раньше сидел на uCos, но она достаточно монстрообразная, да и С++ хочется, ибо на нем есть уже куча своих библиотек.
В принципе, оно завелось и заработало, только не понятно, зачем нужно выносить инициализацию PLL, системного таймера и проч. в __low_level_init()? Там же имхо нет ничего критичного, что надо было бы обязательно выполнить до инициализации аппаратных стеков и переменных? Для пробы перенес весь код из __low_level_init() в обычную функцию main(), в самое начало. А именно, PLL, прерывания вообще (это уже свое собственное), системный таймер, прерывание смены контекста. Все работает нормально. Где скрытый смысл "влезать" в процесс инициализации камня?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Feb 25 2009, 08:05
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(gladov @ Feb 25 2009, 09:16) *
Где скрытый смысл "влезать" в процесс инициализации камня?
Во-первых, на момент вызова __low_level_init() стеки уже проинициализированы.

Во-вторых, если мы разгоним PLL до иницииализации переменных, инициализация пойдет быстрее. AT91SAM7, например, стартует на ~32КГц.

В-третьих, __low_level_init() выполняется до вызова конструкторов статических объектов. Часто статические объекты описывают некие внешние устройства и очень удобно разместить в конструкторе инициализацию этого внешнего устройства. И к моменту вызова инициализации, скажем, spi_flash, набортный SPI уже должен быть настроен. spi_flash может быть унаследован от spi, но проводить инициализацию интерфейса в конструкторе spi некорректно, ибо от него могут быть унаследованы другие устройства и тогда инициализация будет выполнена несколько раз.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 06:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01356 секунд с 7
ELECTRONIX ©2004-2016