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

 
 
10 страниц V  « < 8 9 10  
Reply to this topicStart new topic
> scmRtos для медных чайников
varvar
сообщение Jun 10 2018, 10:39
Сообщение #136


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

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



Цитата(AHTOXA @ Jun 10 2018, 13:18) *
Прерывание вызывается?
А приоритет какой у него?

Для проверки в прерывание могралку ставлю:
CODE
static void TIM3_Event()
{
static uint16_t counter=0;
counter++;
if(counter>100)
{
digitalWrite(PC13,!digitalRead(PC13));
counter=0;
}
OS::system_timer_isr();
}


Если процесс выглядит так:
CODE
namespace OS
{
template<> void TProc0::exec()
{
for (;;)
{
delay(100);
}
}
}

все моргает, стоит заменить на
CODE
namespace OS
{
template<> void TProc0::exec()
{
for (;;)
{
OS::sleep(100);
}
}
}

моргание прекращается.

Какой приоритет - это надо в ардуиновские исходники лезть смотреть, так что пока не знаю.

Сообщение отредактировал varvar - Jun 10 2018, 10:43
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 10 2018, 12:58
Сообщение #137


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Так у вас, получается, само прерывание затыкается?

Может, надо сбрасывать флаг прерывания в обработчике?

Ну и приоритет должен быть ниже всех остальных прерываний в системе (кроме PendSV).



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
varvar
сообщение Jun 10 2018, 13:23
Сообщение #138


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

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



Цитата(AHTOXA @ Jun 10 2018, 16:58) *
Так у вас, получается, само прерывание затыкается?

Может, надо сбрасывать флаг прерывания в обработчике?

Ну и приоритет должен быть ниже всех остальных прерываний в системе (кроме PendSV).

Да, затыкается прерывание. Но что его может затыкать?
Флаг поначалу сбрасывался, потом убрал - никак не влияет.
Если бы и влиял - влиял бы в обоих случаях.
А приоритет попробую порыть как в STM32duino изменить.
Go to the top of the page
 
+Quote Post
varvar
сообщение Jun 10 2018, 18:29
Сообщение #139


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

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



добавил в инициализацию

nvic_irq_set_priority(NVIC_TIMER3, (0xFEUL << (8-(CORE_PRIORITY_BITS))) & 0xFF);

хорошая новость - прерывания перестали затыкаться.
Плохая - система по-прежнему не работает, тут:
CODE
template<> void TProc0::exec()
{
for (;;)
{
digitalWrite(PC13,!digitalRead(PC13));
OS::sleep(100);
}
}

ничего не моргает.
Если sleep заменить ардуиновским delay, то светодиод моргает
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 10 2018, 20:34
Сообщение #140


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Во-первых, для надёжности лучше пишите в приоритет 0xFF, и без всяких сдвигов.

Во-вторых, убедитесь, что вызывается осёвый обработчик PendSV_Handler. А то кто его знает, что там в недрах mbed-а делается.

Кстати, вы OS:run() не забыли вызвать?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
varvar
сообщение Jun 11 2018, 03:53
Сообщение #141


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

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



Цитата(AHTOXA @ Jun 11 2018, 00:34) *
Во-первых, для надёжности лучше пишите в приоритет 0xFF, и без всяких сдвигов.

Во-вторых, убедитесь, что вызывается осёвый обработчик PendSV_Handler. А то кто его знает, что там в недрах mbed-а делается.

Кстати, вы OS:run() не забыли вызвать?

OS:run() не забыл.
Приоритет, наверно, 0xFE? С 0xFF не работает - прерывние теряется.
PendSV_Handler не вызывается sad.gif
Go to the top of the page
 
+Quote Post
varvar
сообщение Jun 11 2018, 08:54
Сообщение #142


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

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



почему-то
CODE

nvic_set_vector_table((uint32_t)&PendSV_Handler, (uint32)VECT_TAB_ADDR+0x38);

не помогает - что я не так делаю?
Go to the top of the page
 
+Quote Post
varvar
сообщение Jun 11 2018, 17:20
Сообщение #143


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

Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811



Заработало!!! (с) Кот Матроскин

По крайней мере на первый взгляд, одна задача мигает светодиодом, вторая в USB что-то гонит.
Помогла замена

#pragma weak PendSVC_ISR = PendSV_Handler

в os_target.cpp на

#pragma weak __exc_pendsv = PendSV_Handler

Может я и не прав, и надо было по другому сделать - но таки моргает sm.gif

AHTOXA, спасибо огромное!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 11 2018, 18:44
Сообщение #144


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Ну и отлично sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th April 2024 - 03:26
Рейтинг@Mail.ru


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