Описание: Если кого-то заинтересует могу выслать. |
Поиск в теме | Версия для печати |
vik49 |
Отправлено: 24 Апреля, 2013 - 17:08:20
|

Капитан

Сообщений всего: 46
Дата рег-ции: Апр. 2012
|
Проверка многозадачного проекта на микроконтроллере 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.
Скачать файл: pp.cСкачан раз: 245(Отредактировано автором: 24 Апреля, 2013 - 20:36:13) |
|
|
Роботов |
Отправлено: 25 Апреля, 2013 - 13:53:42
|

Гуру

Сообщений всего: 1350
Дата рег-ции: Июнь 2011
|
1. vik49 пишет:мне непонятно - почему эта тема вас не интересует.
Странный вопрос. Не интересует и всё
2. vik49 пишет:Это очень плохо.
Кому?
3. vik49 пишет:Вы подаёте плохой пример молодым ребятам
Не уверен
4. vik49 пишет:не замечая интересных тем...
... идем к пункту 1. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
« Программирование микроконтроллеров » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
  |
|
|
|