|
__low_level_init (void), Объясните пожалуйста |
|
|
|
 |
Ответов
|
Aug 21 2006, 15:50
|
Группа: Участник
Сообщений: 11
Регистрация: 3-08-06
Пользователь №: 19 282

|
Пример, когда вам вроде бы не хочеться использовать __low_level_init, но придется http://electronix.ru/forum/index.php?showtopic=4298Проблема оказалась именно в инициализации большого блока памяти. Во время которой сработал watchdog.
|
|
|
|
|
Aug 22 2006, 13:35
|
Участник

Группа: Свой
Сообщений: 63
Регистрация: 16-06-04
Из: Россия, Уфа
Пользователь №: 31

|
Цитата(rezident @ Aug 21 2006, 22:05)  В той ветке не было подтверждения, что причиной подвисания был WDT. У вас у самого были реальные случаи срабатывания WDT при инициализации памяти? По моим грубым прикидкам получается, что инициализация даже 10кБайт занимает времени меньше (примерно на 20%) периода срабатывания WDT при его настройках и тактировании по умолчанию (то бишь после PUC или POR). Вот запустил в симуляторе программу для 1611. Поставил точку останову на main(). По бряку имеем 77842 cycles (при этом это не С++, т.е. без вызова конструкторов глобальных объектов). Таким образом, получается 77842 * 800kHz = ~97мс. Учитывая дефолтные ~32мс для watchdog, гарантированно имеем PUC, если не настроим/отключим тактирование/ватчдог в __low_level_init
|
|
|
|
|
Aug 24 2006, 16:20
|
Группа: Участник
Сообщений: 11
Регистрация: 3-08-06
Пользователь №: 19 282

|
>>В той ветке не было подтверждения, что причиной подвисания был WDT. У вас у самого были реальные случаи срабатывания WDT при инициализации памяти?
На уроке: - Гоги, докажи теорему. - МАМОЙ КЛЯНУС!
Если бы не было, я бы об этой функции тоже ничего не знал, не нужна была бы она нам. Самое неприятное тут что пока программа относительно небольшая, то все ОК, но в один прекрасный день когда ты ее полгода уже пишешь и все железо отлажено, а все порты давно корректно проинциализированы это случаештся и ты сидишь и думаешь "А ГДЕ ГРАБЛИ ТО?" ну добавил очередную глобальную или статическую переменную и БАЦ (вернее PUC) - висим, убрал и опять работает.
Где точная граница мы выяснять не стали, (тем более что зависит от версии библиотеки) но у меня это МЕНЕЕ половины RAM на MSP430F169.
Да, еще инициализация массивов одним значением идет гораздо быстрее, чем отдельных переменных, находящихся по разным адресам и разными значениями. Так что, если ваш тест был с большими массивами, то его нельзя считать корректным, и вообще врят ли имеет смысл искать эту границу.
|
|
|
|
Сообщений в этой теме
condor __low_level_init (void) Dec 1 2005, 21:04 rezident СИшный main это тоже функция, которая может иметь ... Dec 1 2005, 22:16 IgorKossak Цитата(rezident @ Dec 2 2005, 00:16) ...В... Dec 13 2005, 09:08 Danilov ..мало ли что вам захочется выполнить до начала вы... Aug 21 2006, 15:34 and_pp Что-то я так и не смог подлинковать lowinit.c к св... Sep 4 2006, 08:49 ig_z Цитата(and_pp @ Sep 4 2006, 11:49) Что-то... Sep 4 2006, 11:10 VAI Сейчас в один из файлов проекта вставил
Код/* --- ... Sep 4 2006, 11:04 and_pp Цитата(ig_z @ Sep 4 2006, 15:10) Обратите... Sep 5 2006, 10:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|