Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Планировщик приоритетных процессов на ATmega 8

Страниц (2): [1] 2 »
 

1. vik49 - 10 Апреля, 2013 - 21:04:02 - перейти к сообщению
Привет всем, вернее не всем, а только тем кто хочет научиться запускать
несколько процессов одновременно.
Другими словами тем кто хочет иметь многозадачную среду на ATmege.

Только что закончил тестирование приоритетного планировщика процессов
написанный на С в среде WinAVR.
Число одновременно запущенных Процессов - до 8
Самый приоритетный процесс выполняется каждые 10 мсек
Есть 100 мсек, 1сек и 1мин процессы
Самый низко приоритетный процесс это монитор удалённой консоли.
Причём процессы с более высоким приоритетом могут прерывать процессы с
более низким приоритетом.
Ну например процесс на 10 мсек уровне имеет самый высокий приоритет
и поэтому может прерывать процесс 100 мсек и т.д.
Расход SRAM (область стека) во время работы шести из восьми процессов
не более 240 байт.
Размер программы самого планировщика чуть меньше 2 кбайт.
Для ваших процессов у вас остается 6 кбайт - это много.
Есть 2 маленьких фрагмента на инлайновом ассемблере.
Также в проекте используются 2 аппаратных прерывания.
До этого написал такой же планировщик на C для ARM Cortex M3 STM32F103
на IAR EW 6.10
А теперь вот и на ATmega8

Раскрою понятие "планировщик".
Планировщик процессов это диспетчер процессов.
Если у вас установлен планировщик то это означает например что вы можете
работать в программе монитор консоли и одновременно с этим будет запущена
программа ну которая положим управляет чем-то другим.
Причём таких разных программ может быть запущено несколько.
Число этих "одновременно работающих" программ зависит от размера стека микроконтроллера и конечно от его производительности.
Ну вот в данном случае это всего навсего ATmega8.
Если есть вопросы - пишите.
Да кстати я отдаю этот проект бесплатно.
Это FreeWare проект.

--------
The main function of the three electrod tube is amplification!!!
2. vik49 - 18 Апреля, 2013 - 20:33:41 - перейти к сообщению
Для создания многозадачности в вашем проекте достаточно встроить в него планировщик.
Планировщик (диспетчер) занимает менее 2 кбайт вашей FLASH памяти и обеспечивает многозадачность процессов в проектируемой системе. Он позволяет разрабатывать программы гораздо проще и быстрее.
Читаемость проекта также существенно возрастает - потому что в нём появляется
новый уровень создания программы - это уровни приоритетов ваших пользовательских
процессов.
Обычно для прерывания основной программы пользуются аппаратными прерываниями
и это правильно, но с планировщиком можно прерывать программы и ещё
одним способом - программным путём назначая приоритеты вашим процессам.
А планировщик анализируя эти приоритеты выбирает наиболее приоритетный и
запускает его. Если текущий процесс имеет приоритет меньше, то он будет прерван.
Затем после окончания будет восстановлен прерванный процесс.

Как это работает - задавайте вопросы.
Я отвечу.
И приведу тексты планировщика.
Ещё раз повторю - проект планировщика freeware.

-----
The main function of the three electrode tubes is amplification.
3. vik49 - 24 Апреля, 2013 - 17:08:20 - перейти к сообщению
Проверка многозадачного проекта на микроконтроллере ATmega8
в среде WinAVR завершена.
Всё работает нормально.
Всем кто хочет создать многозадачность в своём проекте теперь cмогут это сделать.
Для этого просто нужно добавить в свой проект два файла pp.c и pp.h
А также добавить в него библиотеку libplan.a
Движок планировщика как раз находится в этой библиотеке.
Это моё 'ноу хау'.
И вам совершенно не важно как он работает - главное у вас будет
многозадачность в вашей системе!!!
Но если кто нибудь захочет узнать как он работает - то он либо купит у меня,
либо вскроет файл библиотеки.
Как подсоединить эту библиотеку я напишу чуть позже.
Эти два файла и библиотеку я предоставлю по вашему запросу безплатно.
Кроме того я вам предоставлю ещё краткое описание как всё это сделать и как избежать некоторых ошибок при создании вашего многозадачного проекта.
Привожу пример файла pp.c который работает у меня в проекте.
Ещё раз напомню что это среда WinAVR.
Содержимое функций lv1, lv2, lv3, lv4 и lv5 можно удалить и вставить туда вызовы
ваших процессов или их тела (это ваши функции).
В данном случае имеется 5 работающих процессов.

/**********************************************
*
* Filename: pp.c (процессы пользователя)
* Author: Vlasov V.T.
* Revision: v0.01
* Date: 21.04.2013
*
***********************************************/
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "def.h"
#include "asc.h"
#include "snd.h"
#include "plan.h"
#include "ASC_Console.h"

/******************************************************
*
* Процесс lv1
*
*******************************************************
*
* Этот процесс самый быстрый и самый приоритетный
* он может прерывать всё нижестоящие процессы.
* Этот процесс запускается каждые 10 мсек
* Для корректной работы системы нужно чтобы он
* имел длительность работы не более 1-2 мсек.
* То есть не более 10-20 % времени тика.
* Длительность работы процесса можно определить
* с помощью осциллографа в вашем процессе до перехода
* в эту многозадачную среду.
* И вообще этот уровень самый критичный
* ко времени процесса. Чем меньше тем лучше...
*
******************************************************/
void lv1(void)
{
sound(4200,1); //длительность звука 4200 гц 1 мсек
if (cons==0)
{
SIM('1'Подмигивающий; //вывод символа (единичка) 1 на терминал
}
}

/****************************************************
*
* Процесс lv2
*
*****************************************************
*
* Этот процесс может быть прерван только процессом lv1
* Этот процесс будет запускаться каждые 100 мсек
* Продолжительность работы процесса
* не более 20-30 % времени тика.
*
*****************************************************/
void lv2(void)
{
word n=200;
sound(3300,4);
while(n)
{
if (cons==0)
{
SIM('2'Подмигивающий;
}
n--;
}
}

/**************************************************
*
* Процесс lv3
*
***************************************************
*
* Этот процесс может быть прерван процессом lv1 и lv2
* Этот процесс будет запускаться каждые 1000 мсек
* Продолжительность работы процесса
* не более 30-40 % времени тика.
*
***************************************************/
void lv3(void)
{
word n=1000;
_svtd_on;
sound(2400,16);
_svtd_off;
while(n)
{
if (cons==0)
{
SIM('3'Подмигивающий;
}
n--;
}
}

/*****************************************************
*
* Процесс lv4
*
******************************************************
*
* Этот процесс может быть прерван процессом lv1, lv2 и lv3
* Этот процесс будет запускаться каждую 1 мин
* Продолжительность работы процесса
* не более 40-60 % времени тика.
*
******************************************************/
void lv4(void)
{
word n=10000;
sound(1800,12);
while(n)
{
if (cons==0)
{
SIM('4'Подмигивающий;
}
n--;
}
}

/*********************************************************
*
* Процесс lv5
*
**********************************************************
*
* Этот процесс может быть прерван процессом lv1, lv2, lv3 и lv4
* Это самый нетребовательный процесс и ему достаётся
* минимум процессорного времени так как все выше-
* стоящие уровни имеют более высокий приоритет.
* все верхние уровни легко его прерывают...
* Этот процесс не периодический и поэтому он
* может быть запущен в любое время и на
* любое продолжительное время.
* В моём проекте он запускается нажатием на клавишу 'm'
* выход из него осуществляется нажатием на клавишу 'q'
*
***********************************************************/
void lv5(void)
{
cons=1;
_asc_Console(Input_Buffer); //это монитор удалённой консоли
cons=0;
}

/**********
*
* конец
*
***********/

Вот пока и всё.
Если есть вопросы - пишите.

-----
The main function of the three electrode tubes is amplification.
4. Петр Киселев - 24 Апреля, 2013 - 20:06:50 - перейти к сообщению
vik49, не продолжай эту тему здесь! Не множь повторы!
Пусть она уйдет.
5. vik49 - 24 Апреля, 2013 - 20:43:55 - перейти к сообщению
Я думаю что это решать должны люди, а не вы...
И Пётр будьте чуточку скромнее - 'генералиссимус'.
Или вы что против многозадачности ?
И потом эта тема имеет прямое отношение к программированию.
А если вы чего то недопонимаете - то извините уж.

Хорошо - ухожу в тот раздел. Спасибо за интерес.

-----
The main function of the three electrode tubes is amplification.
6. Роботов - 24 Апреля, 2013 - 22:02:12 - перейти к сообщению
vik49 пишет:
И Пётр будьте чуточку скромнее - 'генералиссимус'

vik49 пишет:
А если вы чего то недопонимаете - то извините уж.

Эй, эй! Полегче. Человек дело говорит, нечего одинаковые темы плодить.
7. vik49 - 25 Апреля, 2013 - 11:51:41 - перейти к сообщению
Да вы правы, но и не правы...

Попытаюсь объяснить.
Тему я заканчиваю и перехожу в другой раздел.
Для создания темы я выбрал на мой взгляд верный раздел
"Программирование микроконтроллеров".

Опубликовал её 10 апреля и дней 12 ... не было ни одного ответа???
Причём просмотров почти сотня но ответов не было !!!
Вот поэтому я её скопировал в раздел "С чего начать".
Мне хотелось получить хоть какие то ответы.
И только там почти сразу получил отзывы.

Для Гуру.
Насчёт этой строчки. "И Пётр будьте чуточку скромнее - 'генералиссимус'"
Здесь я не нахожу даже намёка на некорректность.
Но если вы уж такие недотроги - буду аккуратнее.

-----
The main function of the three electrode tubes is amplification.
(Добавление)
Гуру, а вы по теме, можете что то написать ?

-----
The main function of the three electrode tubes is amplification.
8. elmot - 25 Апреля, 2013 - 12:08:00 - перейти к сообщению
vik49 пишет:

Насчёт этой строчки. "И Пётр будьте чуточку скромнее - 'генералиссимус'"

Учитывая, что звания выдает форум автоматически, да еще по непонятным критериям - фраза звучит.... мягко говоря...
9. Роботов - 25 Апреля, 2013 - 12:45:19 - перейти к сообщению
vik49 пишет:
а вы по теме, можете что то написать ?

Нет, эта тема меня не интересует.
10. vik49 - 25 Апреля, 2013 - 13:39:18 - перейти к сообщению
Гуру мне непонятно - почему эта тема вас не интересует.
Это очень плохо. Ведь Вы сейчас в разделе "Программирование микроконтроллеров".
Вы подаёте плохой пример молодым ребятам не замечая интересных тем...
Ну что же - это ваши проблемы...
И все таки сделайте над собой усилие и зайдите в раздел "С чего начать"
Там эта тема открыта более полно.

Теперь для президента:
Учитывая, что звания выдает форум автоматически, да еще по непонятным критериям - фраза звучит.... мягко говоря...
Я не понял поясните пожалуйста.

-----
The main function of the three electrode tubes is amplification.
11. Роботов - 25 Апреля, 2013 - 13:53:42 - перейти к сообщению
1.
vik49 пишет:
мне непонятно - почему эта тема вас не интересует.

Странный вопрос. Не интересует и всё Голливудская улыбка
2.
vik49 пишет:
Это очень плохо.

Кому?
3.
vik49 пишет:
Вы подаёте плохой пример молодым ребятам

Не уверен Подмигивающий
4.
vik49 пишет:
не замечая интересных тем...

... идем к пункту 1.
12. vik49 - 25 Апреля, 2013 - 14:00:21 - перейти к сообщению
Гуру:
К вам вопросов больше не имею.

-----
The main function of the three electrode tubes is amplification.
13. elmot - 25 Апреля, 2013 - 14:50:23 - перейти к сообщению
vik49 пишет:

Теперь для президента:
Учитывая, что звания выдает форум автоматически, да еще по непонятным критериям - фраза звучит.... мягко говоря...
The main function of the three electrode tubes is amplification.

Надпись про президента на моих сообщениях движок форума придумал сам.
Это не повышенное ЧСВ, это форум сам по себе насчитал какой-то рейтинг.
Не надо думать, что человек с лычкой "лейтенант", в отличие от "генералиссимуса" - это такой скромняга парень.
14. vik49 - 25 Апреля, 2013 - 18:09:09 - перейти к сообщению
Спасибо президент - теперь разобрался.
Просто я иногда туплю...

-----
The main function of the three electrode tubes is amplification.
15. elmot - 25 Апреля, 2013 - 18:58:43 - перейти к сообщению
vik49 пишет:
Спасибо президент - теперь разобрался.
Просто я иногда туплю...

Я не президент. Я elmot.