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

 
 
> Программная задержка перед стартом ОС
Pavel V.
сообщение Nov 12 2010, 10:08
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Портирую одно устройство на scmRTOS и все шло хорошо, пока не начал заниматься датчиками, висящими на шине 1-Wire.

После долгих разборок удалось локализовать проблему, и вот что получилось:
Код
void main() {
    WDTCTL = WDTPW + WDTHOLD;
    TimerB_Init();

    __enable_interrupt();
        OS::Run();
}


Этот код работает, ОС запускается, задачи переключаются.

А вот этот:
Код
void main() {
    WDTCTL = WDTPW + WDTHOLD;
    TimerB_Init();

        for(volatile uint16_t i = 0; i < 5000; i++);

    __enable_interrupt();
        OS::Run();
}


Приводит к бесконечным рестартам устройства. Причем, поведение зависит от величины задержки. Если написать:
Код
for(volatile uint16_t i = 0; i < 1000; i++);

ОС запускается..

Компилятор - IAR.

Видимо, я не понимаю какие-то фундаментальные вещи, но своим умом понять не могу sad.gif

К сообщению прикладываю тестовый проект.
Прикрепленные файлы
Прикрепленный файл  scmrtos.zip ( 172.07 килобайт ) Кол-во скачиваний: 16
 


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Pavel V.
сообщение Nov 12 2010, 10:43
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Инициализация таймера:
Код
/*
* Init Timer B
*/
void TimerB_Init() {
    TBCTL = TBSSEL_2 + ID_3 + MC_1;    // SMCLK, /8, Up Mode, Interrupt Enable
    TBCCR0 = 1382 - 1;
    TBCCTL0 = CCIE;
}


Цитата
А смысл этой задержки?

В данном тестовом примере смысла нет, в боевом же софте в этот момент производится сканирование шины 1-wire, при этом сумма задержек приводит к таким же последствиям.

Цитата
Видимо, срабатывает watchdog

В первой строчке сторожевой таймер отключается.

Цитата
Не успевает ли срабоатть обработчик тикового прерывания ОС. А еще не запущена ОС, следовательно обработчик может там дел натворить. От чего работает тиковый таймер?

По идее не должен, т.к. прерывания разрешаются непосредственно перед стартом ОС. До этого они запрещены по умолчанию.

Системный таймер работает от Timer B.


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 19:03
Рейтинг@Mail.ru


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