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

 
 
> Обсуждение из scmRTOS ветки, вынесено
altlogic
сообщение Jan 5 2008, 06:24
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035



Здравствуйте!

Кто-нибудь может сказать как собрать пример использования scmRTOS для avr-gcc. Мэйк-файлы gcc-avr.mak и avreal.mak не хотят ничего у меня собирать... В командной строке сообщяется
Device: Unknown
и процесс сборки завершается. С мэйкфайлами столкнулся во второй раз. В первый раз - собирал jacOS:) Наверное там нужно чего-то подправить?


--------------------
С уважением, Вячеслав
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Neyron
сообщение Jan 11 2008, 16:20
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-06-06
Пользователь №: 17 841



Выкачал порт avr-gcc 3.00.

Раньше пользовался 1.10. Системой очень доволен, за что спасибо авторам и поддерживающим её людям.

Мега 128. Тик системного таймера ~4.4 мс. Если время выполнения процесса превышает это время, происходит сбой.

Установил scmRTOS_CONTEXT_SWITCH_SCHEME равным 0. Хотя рекомендуют оставить 1. Не помню в какой ветке читал.

Если установить 1, то непонятно назначение следующего фрагмента. Нужен ли он?
#if scmRTOS_CONTEXT_SWITCH_SCHEME == 1
// Setup analog comparator as software interrupt source
#if PORT_TOGGLE_BY_PIN_WRITE
ACSR = (1 << ACBG); // Ref ON, interrupt on both edges
#else
ACSR = (1 << ACBG) | (1 << ACIS1); // Ref ON, falling edge
#endif
DRIVER(RAISE_PIN,OUT); // AIN1 - output
// analog comparator propagation and synchronization delay
_delay_us(2);
ACSR |= (1 << ACI);
ACSR |= (1 << ACIE); // ACIE ON, ACI OFF
#endif

а также этот код
DRIVER(TIMER_HOOK,OUT);
DRIVER(IDLE_HOOK,OUT);
//
DRIVER(ISR_ENTER_PIN,OUT);
DRIVER(ISR_EXIT_PIN,OUT);

У себя все это удалил, работает при scmRTOS_CONTEXT_SWITCH_SCHEME=0. Можно выполнение процесса впихнуть в 4.4 мс. Это нормальная работа системы? Раньше с такой ситуацией не приходилось иметь дело.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jan 11 2008, 21:59
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Neyron @ Jan 11 2008, 18:20) *
Мега 128. Тик системного таймера ~4.4 мс. Если время выполнения процесса превышает это время, происходит сбой.
Это действительно непонятно. В смысле непонятно, что означают эти слова.

Цитата
Установил scmRTOS_CONTEXT_SWITCH_SCHEME равным 0. Хотя рекомендуют оставить 1. Не помню в какой ветке читал.
При 0 переключение осуществляется немнооожечко быстрее, но больше пиковое использование стека. При 1 - наоборот. Тестовый проект 1-EventFlag проверялся в железе с осциллографом при всех комбинациях (включая TISRW/TISRW_SS).


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Neyron
сообщение Jan 12 2008, 08:07
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-06-06
Пользователь №: 17 841



(Neyron @ Jan 11 2008, 18:20) *
Мега 128. Тик системного таймера ~4.4 мс. Если время выполнения процесса превышает это время, происходит сбой.

Использую TCCR0 = 0x06 при кварце 14,74560.
Т.е. таймер переполняется при 256(макс TCNT0)*256(делительTCCR0 )* 1/14.7456 МГц = 4.(4) мс

Теперь о времени выполнения процесса. main.cpp

uint8_t sec_tik;
uint8_t WaitFilter;
namespace OS {
template<> OS_PROCESS void TTechnolog::Exec()
{
DDRB |= 1 << PB6; - Нога по которой вычисляется время выполнения процесса
WaitFilter=2; - ожидание фильтрации
for(;;) {
PORTB &= ~(1 << PB6); - Старт процесса по осциллографу
if((!(OS::GetTick200ms())) && (!(OS::GetTick1s()))) sec_tik=0;
else sec_tik=0xff; - служебная переменная. если sec_tik=0, то пришла новая секунда. См. ниже.
if(!WaitFilter)
{
Work_drv();- собственно работа. Здесь выполняется алгоритм поиска циклом for.
}
else if(!sec_tik) WaitFilter--;

PORTD ^= (1<<PD7); - сброс собаки
PORTB |= 1<<PB6;- Стоп процесса по осциллографу
Sleep(9);//40 ms
}
}

} // namespace OS

В Work_drv() задаю поиск по индексу от 0 до 127.
На PB6 визуально наблюдаю время выполнения процесса. Без поиска оно составляет 25 мкс...
Потом включаю поиск... С увеличением индекса время выполнения процесса растет (см. PB6). При достижении величины в 4.4 мс (тик системного таймера) идет сбой. Зависание на ноге PD7, потом возобновление работы... и так циклически.

P.S. По исходниках понял, что SysTickCount в ОС не используется... Можно ли безопасно использовать следующие доработки.. В верси 1.10 все работает без проблем.
Для засекания секундных и 200м-секундных интервалов использую следующий код в OS_Kernel.h:
void OS::TKernel::SystemTimer()
....
#if scmRTOS_SYSTEM_TICKS_ENABLE == 1
SysTickCount++;
if(SysTickCount>8) //40ms множитель 9
{
SysTickCount = 0;
SysTick200ms++;
if(SysTick200ms>4)//200ms
{
SysTick200ms = 0;
SysTick1s++;
if(SysTick1s>4)//1s
{
SysTick1s = 0;
}
}
}
#endif
.....

#if scmRTOS_SYSTEM_TICKS_ENABLE == 1
volatile dword SysTickCount; - счетчик системных тиков
volatile dword SysTick200ms; - счетчик 200мс тиков (поездка регулятором)
volatile dword SysTick1s; - считчик 1с тиков (посекундная отработка по технологогии)
#endif

И соответственно, функции...
#if scmRTOS_SYSTEM_TICKS_ENABLE == 1
INLINE inline dword GetTickCount() { TCritSect cs; return Kernel.SysTickCount; }
INLINE inline dword GetTick200ms() { TCritSect cs; return Kernel.SysTick200ms; }
INLINE inline dword GetTick1s() { TCritSect cs; return Kernel.SysTick1s; }
#endif
Go to the top of the page
 
+Quote Post
solosh
сообщение Jan 12 2008, 22:16
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 23-10-04
Пользователь №: 968



Цитата(Neyron @ Jan 12 2008, 12:07) *
PORTD ^= (1<<PD7); - сброс собаки


А период собаки какой ?
Go to the top of the page
 
+Quote Post
Neyron
сообщение Jan 14 2008, 07:40
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-06-06
Пользователь №: 17 841



Цитата(solosh @ Jan 13 2008, 02:16) *
А период собаки какой ?


ADM695 1.6 сек, если я правильно понял
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Clavyan   Обсуждение из scmRTOS ветки   Jan 5 2008, 06:24
- - spf   Цитата(Clavyan @ Jan 5 2008, 11:24) Кто-н...   Jan 5 2008, 07:09
- - ReAl   Цитата(Clavyan @ Jan 5 2008, 08:24) Кто-н...   Jan 5 2008, 12:03
|- - Clavyan   Спасибо за ответы, хотя я и впрямь написал не в ту...   Jan 5 2008, 12:30
|- - Сергей Борщ   Цитата(Neyron @ Jan 11 2008, 18:20) DRIVE...   Jan 11 2008, 16:51
|- - Сергей Борщ   Цитата(Neyron @ Jan 12 2008, 10:07) А у в...   Jan 12 2008, 10:20
||- - Neyron   Цитата(Сергей Борщ @ Jan 12 2008, 14:20) ...   Jan 12 2008, 10:56
|- - ReAl   Цитата(Neyron @ Jan 12 2008, 10:07) P.S. ...   Jan 12 2008, 10:54
- - ReAl   Ой, это даже не заметил - не надо снаружи никаких ...   Jan 12 2008, 11:00
|- - Сергей Борщ   Цитата(ReAl @ Jan 12 2008, 13:00) Ой, это...   Jan 12 2008, 18:46
- - Neyron   Похоже я не прав... Это у меня где-то процесс улет...   Jan 12 2008, 13:48
- - ReAl   Цитата(Neyron @ Jan 12 2008, 15:48) Снача...   Jan 12 2008, 17:14


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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 17:16
Рейтинг@Mail.ru


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