Описание: Повышение уровня проекта |
Поиск в теме | Версия для печати |
vik49 |
Отправлено: 24 Апреля, 2013 - 20:55:38
|

Капитан

Сообщений всего: 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. |
|
|
Петр Киселев |
Отправлено: 25 Апреля, 2013 - 15:32:09
|

Гуру

Сообщений всего: 2397
Дата рег-ции: Окт. 2012
|
vik49, ты создал две одинаковые, на мой взгляд, темы. Отличаются в названии на одно слово. Сама суть не меняется. И по количеству сообщений они почти сравнялись.
Вопрос - Зачем? Я предложил сократить одну тему (мне она интересна), но не хочется мотаться по двум одинаковым темам, выискивая что-то для себя интересное.
Порядок, последовательность или приоритетность процессов, которые выполняются я уловил. На мой взгляд, было понятнее во всем разобраться, если бы ты представил блок-схему своей идеи. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (3): [1] 2 3 » |
« С чего начать? » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
  |
|
|
|