роботы робототехника микроконтроллеры


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

> Описание: Повышение уровня проекта
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



Привет всем, вернее не всем, а только тем кто хочет научиться запускать
несколько процессов одновременно.
Другими словами тем кто хочет иметь многозадачную среду на ATmege.

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

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

--------
The main function of the three electrod tube is amplification!!!

(Отредактировано автором: 18 Апреля, 2013 - 18:25:50)

 
 Top
elmot Post Id



Гуру


Сообщений всего: 1141
Дата рег-ции: Дек. 2010  



vik49 пишет:

До этого написал такой же планировщик на C для ARM Cortex M3 STM32F103
на IAR EW 6.10

Честно говоря, не очень понятно зачем. Я не сходя с места нашел 2 разных RTOS для таких камней, и зачем делать еще одну свою - неясно.

http://www.freertos.org/a00090.html#ST
http://www.keil.com/rl-arm/kernel.asp
 
 Top
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



Ну во первых для восьмой атмеги я вообще не видел.
А во вторых - да я был на этих сайтах, но это просто игрушки.
Там есть пример проекта планировщика всего на 2 процесса.
То есть если хотите на большее число процессов то покупайте у них.
Вот такие дела.

--------
The main function of the three electrod tube is amplification!!!
 
 Top
elmot Post Id



Гуру


Сообщений всего: 1141
Дата рег-ции: Дек. 2010  



Очень странные слова, я бы сказал. 8ю атмегу я вообще в виду не имел. Что значит игрушки? И что это за аргумент - "пример на 2 процесса". О чем это говорит? Кто сказал, что этот пример со 102 процессами будет работать хуже?
http://www.keil.com/rl-arm/rtx_specs.asp - до 250 одновременно запущенных процессов.
И что значит "покупайте"? FreeRTOS - свободный. RTX вообще говоря тоже.
(Добавление)
Вот еще одна RTOS, с поддержкой атмег(оговорюсь - про 8ю там не сказано).
http://www.chibios.org/dokuwiki/...os:architectures
 
 Top
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



Ну давайте попробуем разобраться по пунктам.
Во первых - я разработал не FReeRTOS, а только планировщик процессов
Во вторых - на малышке ATmega8 (кстати для неё нет JTAG отладок)
И в третьих - если вы хотите скопировать, то что вы предлагаете - буду только рад этому
и напишите пожалуйста об этом на форуме. Это будет ваша победа!
Желаю вам удачи.

И ещё я бы не хотел настаивать на моём планировщике.
Я всего навсего только написал об этом.
Меня просто удивило почему никто за 8 дней из почти 80 просмотревших
даже не дал отрицательный ответ на мою тему...
Дело в том что у меня аналогичный планировщик уже работает - вот в чём разница.

Кстати на моторолке MC68HC908JL8 тоже 8 битный чип уже год как работает планировщик
процессов. Только там реализация немного другая, а идея та же самая.

И вообще на мой взгляд самое главное - идея - а потом её реализация.
Поэтому когда у меня получилось я и написал на форум - трудно было удержаться.
Спасибо вам - вы написали ответ первый.
А то я уж подумал что попал в параллельный мир...

--------
The main function of the three electrod tube is amplification!!!
 
 Top
elmot Post Id



Гуру


Сообщений всего: 1141
Дата рег-ции: Дек. 2010  



Ну в общем-то в параллельный. На этом форуме не так много программистов.
 
 Top
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



Одной строкой порадовал !
Молодец, Спасибо.

--------
The main function of the three electrod tube is amplification!!!
 
 Top
elmot Post Id



Гуру


Сообщений всего: 1141
Дата рег-ции: Дек. 2010  



Кстати, определитесь с проектом - если freeware, то значит исходник у Вас, а пользоваться можно задарма. Это вряд ли относится к сабжевому проекту. Он скорее open-source. В таком случае его следует выложит в публичный репозиторий - sf.net или github.com или еще куда-то.
 
 Top
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



Ты прав тут надо подумать...
Вроде бы хочется исходники открыть.
Ну ладно посмотрим.

--------
The main function of the three electrod tube is amplification!!!
 
 Top
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



Проверка многозадачного проекта на микроконтроллере ATmega8 в среде WinAVR завершена. Всё работает нормально.
Всем кто хочет создать многозадачность в своём проекте теперь cмогут это сделать.
Для этого просто нужно добавить в свой проект два файла pp.c и pp.h
А также добавить в него библиотеку libplan.a
Эти два файла и библиотеку предоставлю я по вашему запросу.
Кроме этого я вам предоставлю ещё краткое описание как всё это сделать и как избежать некоторых ошибок при создании вашего многозадачного проекта.
Привожу пример файла pp.c который работает у меня в проекте.
Ещё раз напомню что это среда WinAVR.


/**********************************************
*
* 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
*
******************/
void lv1(void)
{
sound(4200,1);

if (cons==0)
{
SIM('1'Подмигивающий;
}
}

/*****************
*
* Процесс lv2
*
******************/
void lv2(void)
{
word n=200;

sound(3300,4);

while(n)
{
if (cons==0)
{
SIM('2'Подмигивающий;
}
n--;
}
}

/*****************
*
* Процесс lv3
*
******************/
void lv3(void)
{
word n=1000;

_svtd_on;

sound(2400,16);

_svtd_off;

while(n)
{
if (cons==0)
{
SIM('3'Подмигивающий;
}
n--;
}
}

/*****************
*
* Процесс lv4
*
******************/
void lv4(void)
{
word n=10000;

sound(1800,12);

while(n)
{
if (cons==0)
{
SIM('4'Подмигивающий;
}
n--;
}
}

/*****************
*
* Процесс lv5
*
******************/
void lv5(void)
{
cons=1;

_asc_Console(Input_Buffer);

cons=0;
}

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

Вот и всё.

-----
The main function of the three electrode tubes is amplification.

(Отредактировано автором: 24 Апреля, 2013 - 17:25:36)

 
 Top
Петр Киселев Post Id



Гуру


Сообщений всего: 2397
Дата рег-ции: Окт. 2012  



vik49, скажи, пожалуйста, какая версия WinAVR?
(Добавление)
Продолжай только здесь! Тема интересная!
Как сделать так, чтобы процессы выполнялись не один за другим, а по определенному алгоритму?
 
 Top
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



версия 20100110
В этом проекте - приоритетный принцип.
Почитайте в том разделе там более подробно описано.

Спасибо за интерес к теме.
хорошо буду продолжать только здесь.
Это тоже можно сделать.
Тут главное движок планировщика.
А движок при этом не меняется.

-----
The main function of the three electrode tubes is amplification.
(Добавление)
Проверка многозадачного проекта на микроконтроллере 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.
 
 Top
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



Пётр тут у тебя нашлись защитники.
Они почему то решили что я на тебя наехал...
Правда по теме - опять ничего.

Вы мне напишите более подробно по какому алгоритму вы бы хотели получить многозадачность ?
Я уверен что всё это можно реализовать.

-----
The main function of the three electrode tubes is amplification.
 
 Top
Петр Киселев Post Id



Гуру


Сообщений всего: 2397
Дата рег-ции: Окт. 2012  



vik49, ты создал две одинаковые, на мой взгляд, темы. Отличаются в названии на одно слово. Сама суть не меняется. И по количеству сообщений они почти сравнялись.
Вопрос - Зачем? Я предложил сократить одну тему (мне она интересна), но не хочется мотаться по двум одинаковым темам, выискивая что-то для себя интересное.

Порядок, последовательность или приоритетность процессов, которые выполняются я уловил. На мой взгляд, было понятнее во всем разобраться, если бы ты представил блок-схему своей идеи.
 
 Top
vik49 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Апр. 2012  



В тот раздел который называется "программирование микроконтроллеров" не ходите.
Там сидят люди которым эта тема неинтересна.

Теперь я останусь в этом разделе.
Теперь по делу.
Пётр всё предельно просто.
Движок процессов устроен так:
Если поступил запрос от процесса и нет других то он его запускает.
Если во время исполнения процесса поступил запрос на запуск более приоритетного
процесса, то движок поступает так.
Он прерывает текущий процесс, запоминает его состояние и запускает более приоритетный.
После окончания этого процесса движок переключается на восстановление состояния менее приоритетного процесса, а затем продолжит его исполнение.
Грубо говоря это система с вытеснением менее приоритетных процессов.
Вот примерно так...

Технику или механизм этих действий я не могу вам предоставить.
Просто это мой секрет.
Движок скрыт в библиотеке по имени libplan.a
Более подробное пояснение уже вскроет механизм этой техники.
Если вы хотите получить два файла pp.c и pp.h, а также эту библиотеку
то у вас всё будет работать. Можете попробовать.
Эти файлы я могу выслать.
При наличии опыта и желании вы можете проанализировать работу движка.
этого достаточно ?

-----
The main function of the three electrode tubes is amplification.

(Отредактировано автором: 25 Апреля, 2013 - 18:16:57)

 
 Top
Страниц (3): [1] 2 3 »
« С чего начать? »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru