Планировщик для микроконтроллера

14/06/2014 - 10:00 Владимир Шибанов

Введение

Вопреки расхожему мнению, применение планировщиков/диспетчеров позволяет значительно ускорить разработку приложений, затратив при этом совсем немного памяти. А, как известно, время разработчика дороже последней. Средний диспетчер занимает около 1 кБ flash. Это совсем немного, учитывая те возможности, которые он предоставляет.

Сделать свои программы более организованными мне, простому любителю, хотелось достаточно давно. Я опробовал на реальных устройствах событийную систему на таблице, диспетчер ДиХальта и планировщик. Последний меньше всего мне понравился. При использовании его "как есть" он, на мой взгляд, мало пригоден для создания приложений посложнее мигания светодиодами. Но у него есть один плюс, который меня покорил. Он очень, очень простой. А значит быстрый и надежный. Поэтому его я и взял за основу.

Итак, что же, как минимум, должно быть у диспетчера для полноценного его использования? На мой взгляд необходимо следующее:

1) Возможность однократного запуска задачи;
2) Возможность циклического запуска задачи с заданным периодом;
3) Возможность однократного или циклического отложенного запуска с заданной паузой;
4) Удаление задачи.

Перечисленного вполне достаточно для реализации самых разнообразных алгоритмов. При этом, как видим, ничего лишнего нет.

Доработка планировщика

Старый планировщик умеет запускать циклические задачи отложенно (или сразу). Это уже немало. Но чтобы реализовать весь желаемый функционал, пришлось изменить практически все его функции. Теперь по порядку.

Структура задачи и очередь задач остались неизменными:


typedef struct task
{
   void (*pFunc) (void); // указатель на функцию
   u16 delay; // задержка перед первым запуском задачи
   u16 period; // период запуска задачи
   u08 run; // флаг готовности задачи к запуску
}task;

volatile static task TaskArray[MAX_TASKS]; // очередь задач


Начиная с инициализации начинаются отличия. В исходном варианте очередь очищается путем обнуления параметров задач во всей очереди. Я же ввел дополнительную переменную «хвоста» очереди и просто обнуляю ее.


inline void RTOS_Init()
{
   TCCR0 |= (1<<CS01)|(1<<CS00); // прескалер - 64
   TIFR = (1<<TOV0); // очищаем флаг прерывания таймера Т0
   TIMSK |= (1<<TOIE0); // разрешаем прерывание по переполнению
   TIMER_COUNTER = 130; // загружаем начальное зн. в счетный регистр

   arrayTail = 0; // "хвост" в 0
}


Постановщик в очередь. В старом планировщике это функция AddTask. При наличии свободного места в очереди она добавляет задачу, даже если такая уже есть в списке. Мне показалось это неудобным, поэтому задача добавляется только в том случае, если ее в списке нет. В противном случае обновляются ее параметры: пауза до выполнения и период. Поэтому функция теперь называется SetTask. Это логичней.


u08 i;

if(!taskFunc) return;

for(i = 0; i < arrayTail; i++) // поиск задачи в текущем списке
{
   if(TaskArray[i].pFunc == taskFunc) // если нашли, то обновляем переменные
   {
      DISABLE_INTERRUPT;

      TaskArray[i].delay = taskDelay;
      TaskArray[i].period = taskPeriod;
      TaskArray[i].run = 0;

      RESTORE_INTERRUPT;
      return; // обновив, выходим
   }
}

if (arrayTail < MAX_TASKS) // если такой задачи в списке нет
{ // и есть место,то добавляем
   DISABLE_INTERRUPT;

   TaskArray[arrayTail].pFunc = taskFunc;
   TaskArray[arrayTail].delay = taskDelay;
   TaskArray[arrayTail].period = taskPeriod;
   TaskArray[arrayTail].run = 0;

   arrayTail++; // увеличиваем "хвост"
   RESTORE_INTERRUPT;
}
}


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


void RTOS_DeleteTask (void (*taskFunc)(void))
{
   u08 i,j;

   for (i=0; i<arrayTail; i++) // проходим по списку задач
   {
      if(TaskArray[i].pFunc == taskFunc) // если задача в списке найдена
      {

         DISABLE_INTERRUPT;
         if(i != (arrayTail - 1)) // переносим последнюю задачу
         { // на место удаляемой
            TaskArray[i] = TaskArray[arrayTail - 1];
         }
         arrayTail--; // уменьшаем указатель "хвоста"
         RESTORE_INTERRUPT;
         return;
      }
   }
}


Для реализации однократного запуска была изменена функция извлечения задачи из очереди. Если подошло время выполнения (флаг Run установлен), проверяется значение периода, если он равен 0, задача просто удаляется из очереди.


void RTOS_DispatchTask()
{
   u08 i;
   void (*function) (void);
   
   for (i=0; i<arrayTail; i++) // проходим по списку задач
   {
      if (TaskArray[i].run == 1) // если флаг на выполнение взведен,
      { // запоминаем задачу, т.к. во
         function = TaskArray[i].pFunc; // время выполнения может
         // измениться индекс
        if(TaskArray[i].period == 0)
        { // если период равен 0
           RTOS_DeleteTask(TaskArray[i].pFunc); // удаляем задачу из списка,
        }
        else
        {
           TaskArray[i].run = 0; // иначе снимаем флаг запуска
           if(!TaskArray[i].delay) // если задача не изменила задержку
           { // задаем ее
               TaskArray[i].delay = TaskArray[i].period-1;
           } // задача для себя может сделать паузу
        }
       
        (*function)(); // выполняем задачу
   }
}


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


ISR(RTOS_ISR)
{
   u08 i;

   TIMER_COUNTER = 130; // задаем начальное значение таймера

   for (i=0; i<arrayTail; i++) // проходим по списку задач
   {
      if (TaskArray[i].delay == 0) // если время до выполнения истекло
      TaskArray[i].run = 1; // взводим флаг запуска,
      else TaskArray[i].delay--; // иначе уменьшаем время
   }
}


Вот все, что касается доработок старого планировщика. Теперь использовать его уже не просто удобно, а приятно. Программа становится логичной, читабельной, простой.
Теперь несколько примеров использования.

Примеры использования планировщика

1) Запуск сканирования клавиатуры 100 раз в секунду


RTOS_SetTask(KeyScan, 0, 10); // период 10 мс, неотложенный запуск


2) В паяльной станции: после включения или изменения заданной температуры одну секунду показывается заданная, затем текущая, которая обновляется 3 раза в секунду. Всего 2 строчки, смысл которых будет понятен даже не программисту.


// где-то в программе

// вывод на экран текущей температуры каждые 300 мс
RTOS_SetTask(FEN_ViewCurrentTemp, 0, 300); 
...
...

FEN_TempUp()
{
...
// пауза до вывода текущей температуры 1000 мс
RTOS_SetTask(FEN_ViewCurrentTemp, 1000, 300);

// отображение заданной температуры (1 раз) 
RTOS_SetTask(FEN_ViewTargetTemp, 0, 0); 
...
}


3) Зажигаем светодиод на 5 секунд:


RTOS_SetTask(LED_ON, 0, 0); // зажигаем
RTOS_SetTask(LED_OFF, 5000, 0); // гасим через 5 секунд


4) Смена цвета моргания светодиода при смене режима работы:


// где-то в программе
mode = GREEN; // установили режим
RTOS_SetTask(Blink_green, 0, 500); // задали цвет моргания

// изменение режима
mode = RED;
RTOS_DeleteTask(Blink_green); // выключили зеленый цвет моргания
RTOS_SetTask(Blink_red, 0, 500); // задали красный цвет моргания

Файлы

scheduler.rar 


Автор статьи: Владимир Шибанов. 

Комментарии   

# Peter 15.06.2014 06:51
Гм... А в так называемом СтаромПланировщ ике регистр TIFR очищался правильно. Как видим, новое не есть улучшенное)
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 07:06
Все правильно. Скобки ставим, чтобы наверняка. Потому как, если скобки не ставить, нужно помнить приоритет операций. Я, например, не желаю забивать голову всякой херней, сидеть, вспоминать, а какой там порядок приоритета? Проще скобки поставить.
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 07:15
Да не в скобках дело. TIFR у многих AVR не любит операций |=
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 07:21
Раз вы так сейчас сказали, значит, вы плохо знаете архитектуру AVR... Подумайте, прежде чем ответить.
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 07:26
Если вы не любите кошек, значит вы не умеете их готовить...
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 07:27
Ууууу. Тогда советую Вам повнимательнее пояитать даташит хотя бы на весьма распрочтраненну ю мегу128. А именно об недопустимости применять инструкцию SBI для сброса регистров флагов, очищающихся записью 1. Удачи!
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 07:33
Обоснуйте. Конкретные примеры в студию.
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 07:43
Подозреваю, что мои примеры Вас не убедят. Вместо благодарности за науку будете ругать. Поэтому я дал Вам точную наводку где и по каким словам искать. RTFM, уважаемый. Там все описано с объяснениями.
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 07:47
Э-э-э, нет! Вы ничего не подозревайте. Сказали, отвечайте. А то, получается, слились вы, батенька... Если я увижу что-то новое, то только поблагодарю вас. За что же тут ругать?
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 07:55
Вы сначала почитайте в даташЫте на мегу128 все по ключевому слову SBI. Ладно? А потом пишите сюда)).
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 08:04
Так что вы этим хотели сказать, что sbi, cbi не работает для этого регистра? Так нормальный компилер си будет использовать команды соответствующие этому адресному пространству. И? Так что вы хотели сказать-то, уважаемый?
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 08:23
Она очень даже работает)) Так хорошо работает эта SBI, что может сбросить уже стоЯщие там чужие флаги. Простой пример Налюбовавшись Вашим обращением к TIFR, пользователь так же будет применять операцию |= где-нибудь в критической секции. И тем самым сбросит появившийся только что флаг таймера 0 от вашего шедулера. Вы этого хотите? Уверен что нет.
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 08:27
Вот это уже речь не мальчика но мужа... :) Так и пишите, как сейчас написали.
А то любит, не любит. Мы что тут, на ромашке гадаем?
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 08:45
Рад что Вы наконец поняли. А дело свое надо именно ЛЮБИТЬ. Тогда и предмет работы будет казаться живым. Удачи!
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 08:53
Как бы вы не одушевляли МК, камнем он и остается. И нужно знать, как заставить этот камень правильно шевелиться. Согласен, я не сразу вкупился в чем дело. Бегло глянул, вроде отличия только в скобках. Ну и успокоился. А то что вы рассказали, я и так знал.
Ну и удивился формулировке "не любит". И наличие команд sbi cbi. Делать новый проект, чтобы убедиться, какие команды будут подставлены мне лениво. Все равно я для этих регистров делаю прямую запись. Нули-то все равно бесполезно пихать, не так ли? В крайнем случаю лишний раз гляну в даташит, чтобы уточнить как запустить периферию.
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 08:06
Почитали? А теперь я готов ответить на Ваши вопросы, если они остались.
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 08:11
1 - Что вы нашли противозаконног о? Отсутствие скобок в предыдущей статье? Где команды sbi, cbi у автора?
2 - Сама ваша формулировка "МК не любит, видите ли |=" А с чего вы взяли, что будут обязательно команды sbi, cbi ?!
Ответить | Ответить с цитатой | Цитировать
# demiurg 15.06.2014 08:14
Тьфу, блин, кажись сообразил. Вы имели в виду, чтение модификация запись? Это что ли? Так сразу бы и сказали.
А то МК не любит... Не "не любит"!!! Это формулировка начинающего любителя, который не знает чего ждать от МК и программы...
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 08:37
Я пейсал что TIFR не любит... Да, новые МК от этого эффекта защищены.
Ответить | Ответить с цитатой | Цитировать
# Peter 15.06.2014 08:32
Да что с Вами? Операция |= по установке одного бита регистра в допустимом адресном пространстве пояти наверняка заставит компилятор поставить инструкцию SBI
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 14:09
Скобки я ставлю только для того, чтобы стоящие рядом команды установки и снятия (тут то скобки обязательны) бита были красиво выровнены. Люблю аккуратно оформленный код)
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 14:21
По большому счету, диспетчер и есть флаговый автомат, просто более структурированн ый
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 14:22
Не туда отправил, ну да ладно
Ответить | Ответить с цитатой | Цитировать
# Peter 16.06.2014 07:03
Ну что ж, с очисткой флагов регистра TIFR разобрались. Теперь, перед анализом багов собственно планировщика, надо научиться правильно запускать таймер. Пользователь, поверив "продвинутому разработчику планировщика", возьмет за основу этот метод, и так и будет запускать свои таймеры в своих задачах. И может огрести кучу траблов. Для исключения этого я просто перечислю шаги запуска таймера - на примере AVR, но, наверно, и независимо от МК.
1. Остановить таймер.
2. Задать в регистрах режим работы таймера (для AVR это TCCRA, TCCRC, если они есть. А если нет - то пропустить этот шаг). Причем делать это явным присваиванием (а не пресловутой операцией |= ). Регистр, где запускается таймер - не трогать.
3. Инициализовать счетный регистр TCNTn.
4. Инициализовать регистр(ы) сравнения OCCRn
5. В регистре TIFR cбросить флаги относящиеся к таймеру-пОциенту.
6. Разрешить нужные прерывания таймера, запрещая ненужные.
7. Запустить таймер, одновременно до-задавая режим его работы - для AVR это TCCRnB(если он есть) или TCCRn. Причем тоже операцией простого присваивания, а не |=.

После такой процедуры таймер не подведет.
Готов обсудить.
Ответить | Ответить с цитатой | Цитировать
# demiurg 16.06.2014 07:58
Трабла есть, если используется системный тик. Скажем, 1 мс. У меня сейчас сделано так:
Массив из нужного кол-ва таймеров. Структура массива: статусный байт, 16-битный счетчик. Прерывание настроено на 1 мс. В обработчике прерывания только перезапуск таймера, для точного отбивания по 1 мс. И установка флага. В основной программе вызывается Service_Timers. Зашли, проверили флаг, не установлен, вышли. Установлен, пробежались по массиву, если в статусном байте установлен флаг TMR_UNLOCK_FLG, декремент 16-битного счетчика. Обработка следующего таймера. Если флаг не установлен, обработка следующего таймера. Время вышло (0), установка флага TIME_OUT_FLG.
Ответить | Ответить с цитатой | Цитировать
# demiurg 16.06.2014 07:59
Этой таймерной службы мне хватает практически для всех проектов. Точность - +- 1-10 мкс.

Но есть но: представим ситуацию. Нам нужно запустить задачу на 10 мс. И установка таймера задача произошла перед прерыванием. В итоге получится не 10 мс, а 9 с небольшим. Но так как я эти таймеры использую в задачах, где 10, даже 100 мкс погоды не играют. Абсолютно. Ну будет разброс в мкс обработки матричной клавиатуры, или обновление символьного ЖКИ. Ну и хрен на него, на это расброс.

Зато я получил простую в использовании таймерную службу. Максимальное время 65535 мс. Если мне требуются большие отрезки времени, в модулях использую дополнительные счетчики. Скажем, счет каждые 100 мс.

Дальше планирую допилить, чтобы был флаг инкремент-декре мент. И пауза таймеров. Например, это потребуется в следующих ситуациях. Есть оборудование с режимом "Пауза". Вот в этих случаях и требуется наличие паузы в таймерах.
Ответить | Ответить с цитатой | Цитировать
# demiurg 16.06.2014 08:00
http://pastebin.com/4Vz96ASs
Ответить | Ответить с цитатой | Цитировать
# Peter 17.06.2014 06:42
Вот мы дошли и до анализа потенциальной уязвимости "улучшенного планировщика". Кто мне объяснит, что будет, если вызываемая в фоновом режиме функция DispatchTask() прервётся от таймера во время доступа к двухбайтовой переменной TaskArray.delay?
Да, я о проблеме атомарности, если че))
Ответить | Ответить с цитатой | Цитировать
# demiurg 17.06.2014 07:28
В таких планировщиках не только проблема атомарности. Взять, к примеру диспетчер DI HALT-а. В его диспетчере, в начальной версии, на асме (в сишной я еще не копался, да и нет желания) два момента. 1. Таймерная служба работает в прерывании. 2. Дамоклов меч. Представим ситуацию, мы на таком диспетчере написали программу для станка. В очереди таймеров болтается задача на исполнение. И тут бац, аварийная ситуация. Ну ладно, встали в соответствующий режим, а из прерывания таймерная служба выстрелила задачу на исполнение. Потому и назвал дамоклов меч. И вот как теперь шерстить очередь на предмет удаления задач? Если мы даже не знаем, что можно удалять, а что нельзя. Мало ли какие моменты, пусть и аварийная ситуация.
На данный момент мой опыт: пока всякие диспетчеры мне ни разу не понадобились.
void main (void)
{
func_1 ();
func_2 ();
func_3 ();
}
Все! Главные принципы: модули, автоматное программировани е. Каждая задача разбивается так, чтобы не было долгих циклов. К примеру, системный тик 1 мс. И каждый пробег main должен с запасом уложиться в 1 мс.
Ну как-то так...
Ответить | Ответить с цитатой | Цитировать
# САБ 17.06.2014 11:17
Цитирую demiurg:
На данный момент мой опыт: пока всякие диспетчеры мне ни разу не понадобились.
На данный момент мне ни разу не понадобились: FPGA, многослойные платы, долбежный станок, картофелеубороч ный комбайн, женские прокладки и много чего еще. Предлагаете доказывать всем их ненужность?
Ответить | Ответить с цитатой | Цитировать
# demiurg 17.06.2014 11:28
Нет. Всему свое применение. Только прежде чем лепить что-то свое, нужно прогнать как следует. Выявить недостатки.
И не диспетчеры нужно лепить, а научиться взаимодействию модулей.
Потому что эти материалы читают начинающие. Которые вроде как нашли решение, как же, ляпаешь как попало задачи, и они блин работают. А если таким начинающим придет в голову применить эти диспетчеры и потом вляпываются по самое не балуй...
Ответить | Ответить с цитатой | Цитировать
# Kodex 17.06.2014 14:12
Я вот сегодня доделал для себя версию этого "старого планировщика". Добавил два уровня приоритетов. Массив задачь такой же как здесь. Задачи готовые для выполнения суются в один из двух массивов, в зависимости от приоритета. После нек. количества запуска высокоприоритет ных задачь обязятельно запускается одна низкоприоритетн ая. Одно не пойму. Нахрена мне все это...
Ответить | Ответить с цитатой | Цитировать
# JoJo 17.06.2014 14:19
Спортивный интерес .. только и всего
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 12:21
Нда, не ожидал такой дискуссии) Постараюсь ответить на все вопросы:
1) по поводу |=. Установка флага в регистре TIFR у меня происходит именно так, архив чуть устаревший отправил Паше. Уже попросил его поправить статью. Я не силен в ассемблере, но команда TIFR |= (1
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 12:23
плин...
1) по поводу |=. Установка флага в регистре TIFR у меня происходит именно так, архив чуть устаревший отправил Паше. Уже попросил его поправить статью. Я не силен в ассемблере, но команда TIFR |= (1 shl TOV0); транслируется в 3 асмкоманды: IN, ORI, OUT. Ни разу у меня не было конфликтов, связанных с установкой флага с помощью |=. Возможно потому, что в инициализациях я не разрешаю глобальные прерывания. Делаю это уже перед основным циклом.
Ответить | Ответить с цитатой | Цитировать
# _Артём_ 18.06.2014 13:57
Цитирую Владимир:
транслируется в 3 асмкоманды: IN, ORI, OUT.

Транслируется правильно, но сам алгоритм неправильный.

Цитирую Владимир:
Возможно потому, что в инициализациях я не разрешаю глобальные прерывания. Делаю это уже перед основным циклом.

Видимо для ваших программ это не было важно.
Проблема может возникнуть в старых мегах - регистр TIFR зашарен между некоторыми таймерами. Поэтому в результате операции |= могут быть сброшены все флаги, а не один. В результате можно потерять прерывания или не отреагировать на нужный флаг.
И для сброса бита в TIFR достаточно записать в нужную позицию 1 - на асме это две команды:
Код:
ldi reg, 1<<BIT_POS
out TIFR, reg
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 14:29
Я использовал только меги8, 16, 32. Проблем не было. Как тогда правильно будет установить этот бит на С? Или только вставки делать?
Ответить | Ответить с цитатой | Цитировать
# JoJo 18.06.2014 14:41
Вот так
Код:TIFR = (1<<TOV0);
Без ИЛИ.
Ответить | Ответить с цитатой | Цитировать
# _Артём_ 18.06.2014 14:52
Цитирую Владимир:
Я использовал только меги8, 16, 32. Проблем не было.

Вот на них как раз проблемы и могут быть - на более новых мегах обычно на каждый таймер выделяется свой TIFRx.

Цитирую Владимир:
Как тогда правильно будет установить этот бит на С? Или только вставки делать?

Код:
TIFR=1<<TOV0;
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 15:02
Ну так в статье тогда все правильно, и в архиве тоже! Свою рабочую версию я исправил. Но все равно, учту на будущее. Спасибо!
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 12:23
2) Применение подобных планировщиков никогда не позволит соблюсти абсолютную временную точность выполнения задач. Погрешность может составлять до одного системного тика. И в этом нет ничего страшного, по крайней мере в большинстве приложений.
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 12:24
3) Атомарный доступ к переменной delay тут не обязателен. Уже говорилось в статье про исходный планировщик, что все готовые к запуску задачи (я называю это сценарий) должны уложиться в системный тик. Это довольно важный момент, который надо учитывать, если задачи требуют больших вычислительных мощностей.
Ответить | Ответить с цитатой | Цитировать
# Peter 18.06.2014 15:55
Гм.... ну уложились все задачив один тик. И... что, будут стоять на месте и ждать прерывания? Нет, DispatchTask() так и будет вызываться в фоновой программе(см. пример работы старого планировщика) . И таким образом опасность прерывания внутри чтения/записи двухбайтового delay сохраняется. Надо делать критическую секцию.
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 17:05
Да, будут стоять и ждать. К моменту, когда ожидается прерывание, все задачи с установленным флагом Run должны выполниться. В цикле только прочесывается очередь и проверяется этот флаг, который у всех (!) задач должен быть равен 0. Прерывание никак не может прервать обращение к переменной delay.
Ответить | Ответить с цитатой | Цитировать
# Peter 19.06.2014 07:56
Тогда зачем критические секции в SetTask() и DeleteTask(), если прерывание не пересекается с работой ни одной из задач?
Ответить | Ответить с цитатой | Цитировать
# Владимир 19.06.2014 13:06
Вы правы, незачем. Это следы моих экспериментов с минимальным временем системного тика. Можно убрать. Но еще раз подчеркну, очень важно, чтобы все активные задачи успевали выполняться за один тик!
Ответить | Ответить с цитатой | Цитировать
# Peter 21.06.2014 05:33
Но тогда зачем вообще здесь прерырвания? Будет проще после прлхода всех задач опрашивать флаг таймера - тем более точность тайминга при этом не ухудшится по сравнению с данной реализацией. Зато будет короче, понятнее и безо всяких флагов состояния задач.
Ответить | Ответить с цитатой | Цитировать
# Владимир 21.06.2014 06:18
Совершенствоват ь можно до бесконечности, главное вовремя остановиться. Меня устроила текущая реализация, поэтому я и остановился на ней.
Согласен с тем, о чем Вы говорите. Про опрос флага таймера в основном цикле я не думал. Возможно кто-нибудь захочет доработать этот диспетчер, добавить функциональност и. Например было бы неплохо добавить удаление задачи из списка через заданное время. Возможно сам доработаю, но уже не для avr, а для stm. Следующий проект будет на нем и планирую переводить туда этот диспетчер.
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 12:24
4) Применение диспетчеров не панацея от всего. И везде их совать ни к чему. Я это прекрасно понимаю. Но, уже в сотый раз, да ладно, приведу пример моей горемычной паяльной станции. Там применен этот планировщик. И мне бы очень хотелось бы сравнить код, выполняющий те же функции, что у меня реализованы, только без диспетчера, так же легко читаемый, структурированн ый, логичный. Удобство сопровождения я теперь ценю гораздо выше, чем года 3-4 назад. Станция уже почти готова, скоро выложу.
Ответить | Ответить с цитатой | Цитировать
# demiurg 18.06.2014 13:30
Не сочтите, что я вообще против диспетчера. Приведу пример. Не так давно я делал один проект. Блок управления, термоформовочны й станок. Типа СТА-150. Это: несколько датчиков, пульт управления (пульт оператора), символьный VFD, матричная клавиатура 4х4, выходы. В итоге получилось 3 порта дискретных входов, 1 порт клавиатура, 1 порт VFD, 2 порта выходы. Я взвесил и принял решение применить сдвиговые регистры для расширения ввода-вывода. 74HC165 и 74HC595. То есть, используется SPI. МК в DIP40 корпусе. Если что, вытащил из панельки, заменил.
Так вот никакого диспетчера у меня в помине нет. Main и список вызываемых функций. Все. А вы диспетчер в паяльную тсанцию засунули. Что у вас там? Кнопки, дисплей, неважно какой. Термодатчик, нагреватель паяльника. Ну управление питанием еще. Спрашивается, зачем в паяльной станции диспетчер? Лучше автоматным программировани ем бы занялись. И диспетчеры тогда вам еще не скоро понадобятся...
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 13:57
Паяльник, фен, корпус с 5-ю кнопками, два 3-символьных 7-сегментника, несколько светодиодов. Дело не в том, сколько чего вешается на порты, а в том, как разрулить все необходимые режимы работы системы. Причем так, чтобы было удобно сопровождать. Я ни в коем случае не заставляю всех использовать диспетчеры! Можно реализовать это на них, можно на автоматах или полноценных ОСРВ. Дело вкуса. Но я сделал так, мне понравилось, и решил поделиться.
Еще могу добавить по автоматному программировани ю. 2 года назад я делал контроллер управления гальванической линией металлизации печатных плат, а это: 5 ванн с терморегулирова нием и контролем уровня, 3 струйных промывки, включение источников тока и барботажа, система перемещения заготовки (2 шаговых дигателя с концевиками), дисплей. Делал на автоматах. Сейчас я даже не хочу в тот код залазить. Так вот, к чему я это? А к тому, что для каждой задачи надо выбирать оптимальное решение!
Ответить | Ответить с цитатой | Цитировать
# demiurg 18.06.2014 15:46
А писать надо нормально, чтобы можно было и потом в код заглядывать....

pastebin.com/Qdhdh370
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 17:07
Это приходит с опытом.
Ответить | Ответить с цитатой | Цитировать
# demiurg 18.06.2014 17:46
Вот именно. Я споткнулся на диспетчере DI HALT-а. Понимаете на тот момент у меня была проблема, взаимодействие модулей. Казалось бы, вот оно решение. Но облегчения не наступило. Но стало все наоборот. Вдобавок, я вовремя поймал засаду с дамокловым мечом. Примерно в то время на одном форуме мне указали на автоматное программировани е. Да и на асме я тогда застрял. Все слазить с него не хотел.
Когда у меня началось получаться с си, тогда я начал понимать, что мне говорили спецы на форуме.
Поэтому я и говорю, не стоит тратить время на диспетчеры, если еще не научился модульному программировани ю, автоматному программировани ю. И тогда тебе, возможно вообще не потребуются диспетчеры. RTOS - это уже иная тема...
Ответить | Ответить с цитатой | Цитировать
# Владимир 19.06.2014 13:20
Мне тот диспетчер тоже не понравился, но по другим причинам. Там не получится так прозрачно запустить такую простую задачу, как однократное включение нагрузки, скажем, на 1 минуту (примеры 2 и 3 в статье). Ну и куча лишних переборов очередей мне не нравится.
По поводу автоматов, когда задач становится слишком много, сложно понять структуру программы. Я ничуть не умаляю достоинств такой организации, тем более диспетчер по своей сути автоматом и является. Точнее его более структурированн ым вариантом.
Цитирую demiurg:
не стоит тратить время на диспетчеры, если еще не научился модульному программированию, автоматному программированию

Вот с этим абсолютно согласен.
Ответить | Ответить с цитатой | Цитировать
# Владимир 18.06.2014 12:25
5) Создавать нужно то, что тебе нужно. А не делать что-то, а потом думать, а зачем?! Я лично писал диспетчер для конкретной задачи, формируя только то, что нужно мне. Результат мне понравился. Настолько, что решил опубликовать. Этот планировщик был первой моей публикацией в жизни.
6) По поводу тестирования. Я очень долго прогонял его и в симуляторе, и в железе. И он претерпел немало доработок. Но если кому-то захочется целенаправленно его потестировать на баги - я только за!)
Ответить | Ответить с цитатой | Цитировать
# Peter 18.06.2014 16:04
Насчет атоиарности доступа к "длинным" переменным, исрользуемым в прерывании - необходимо выполнять простые правила:
а) если переменная лишь читается в прерывании, то достаточно в фоновой функции обеспечить атомарность при ее изменении.
б) если переменная изменяется в прерывании - то в фоновой функции нужно обеспечивать атомарность и при ее чтении и при ее изменении
Ответить | Ответить с цитатой | Цитировать
# Kodex 19.06.2014 07:10
Владимир, можешь рассказать/пока зать что конкретно менял в коде при отладке?
Ответить | Ответить с цитатой | Цитировать
# Владимир 19.06.2014 13:55
Всего так сразу и не вспомнишь...
Из значительного: функция DeleteTask сначала сдвигала очередь после удаляемой задачи на одну позицию. Потом один человек подсказал идею с перестановкой только последней задачи. На тот момент функция Dispatch выглядела так:
Код:
void RTOS_DispatchTask()
{
u08 i;
for (i=0; i<arrayTail; i++)
{
if (TaskArray.run == 1)
{
(TaskArray.pFunc)();
if(TaskArray.period == 0)
{
RTOS_DeleteTask(TaskArray.pFunc);
}
else
{
TaskArray.run = 0;
if(!TaskArray.delay)
{
TaskArray.delay = TaskArray.period-1;
}
}
}
}
}

Довольно быстро проявился глюк, когда задача удаляет саму себя, установка delay происходила для другой задачи, которая вставала на место удаляемой. Поэтому функция Dispatch обрела такой вид, как в статье.
Ответить | Ответить с цитатой | Цитировать
# Владимир 19.06.2014 14:00
блин, форматирование не получается, все смещается на начало строки
Ответить | Ответить с цитатой | Цитировать
# demiurg 19.06.2014 13:33
В строках RTOS_Set_Task и тд RTOS_ я бы убрал. В данном случае у нас простенький диспетчер. Set_Task Del_Task будет вполне достаточно и верно.
Ответить | Ответить с цитатой | Цитировать
# Владимир 19.06.2014 14:10
Дело вкуса. Просто у меня так сложилось, что если модуль представляет собой самостоятельную структуру, я добавляю префикс. Только для того, чтобы видеть, из какого именно модуля вызывается функция: RTOS_, WH1602_, WG12864_, UART_ и т.д. Согласен, бросается в глаза. Но когда подключено много модулей, как-то понятнее выглядит программа.
Ответить | Ответить с цитатой | Цитировать
# demiurg 21.06.2014 06:30
Цитирую Peter:
Но тогда зачем вообще здесь прерырвания? Будет проще после прлхода всех задач опрашивать флаг таймера - тем более точность тайминга при этом не ухудшится по сравнению с данной реализацией.

Плюсую. Диспетчер DI HALT-а сразу же так и переделал. У него в прерывании было, я вынес в основной цикл. В прерывании взводится флаг. В основном цикле проверяется флаг, если установлен, сброс флага, прочесывание очереди. Точность в единицы, десятки мкс не критична.
Я решил все-таки собрать диспетчер. Позже выложу результат.
Ответить | Ответить с цитатой | Цитировать
# Peter 21.06.2014 09:10
Да. А для точности тайминга и упрощения диспетчера лучше настроить таймер в режим СТС. Более того,раз это не прерывание, то там же в шедулере и сбрасывать вачдог.
Ответить | Ответить с цитатой | Цитировать
# demiurg 21.06.2014 10:12
Нахер. На AVR никогда больше не вернусь к диспетчеру. Диспетчеры и RTOS хороши в системах, где код загружается с какого-либо носителя. На AVR код программы во флеш. И хоть через диспетчер, хоть в main крути функции, обвешав флагами или автоматом, суть не меняется. Только через диспетчер функции дольше переключаются.
Если использовать диспетчер, то нужно четко определить, что считать задачей? Почему-то в диспетчерах задачей считают моргалку светодиодом. Воткнули моргалку, она исправно моргает, вау! Диспетчер, задача, епт! Хорошо, а если много светодиодов? И разные световые эффекты. Как тогда быть? На автоматах легко это делается. Через диспетчер замаешься разруливать.
Вот если вытеснение, тогда уже другое дело. Простенький переключатель задач уже имеет право на существование. Но опять же, нужно четкое определение, что такое задача. Это не какая-то функция, которая запускается через определенное время.
Задача диспетчеров - распараллеливан ие задач.
Но опять же, если следовать некоторым правилам, то выясняется, что диспетчер опять не требуется.
Правила простые. Модульность. Большие функции разбиваются. Никаких долгих циклов в функциях. Зашли, выполнили код, вышли. Проверили условие, вышли. Все это делается на флагах, автоматах, какие-либо условия.
Ответить | Ответить с цитатой | Цитировать
# Владимир 21.06.2014 17:38
Задача диспетчеров (планировщиков) - как раз таки запуск функции через заданное время. А распараллеливан ие задач - прерогатива ОСРВ. Не надо валить все в одну кучу. Для разных задач оптимальная организация программы определяется индивидуально. Тем более, кто Вам мешает в одну из задач диспетчера включить конечный автомат, реализующий эти самые световые эффекты. А потом задать период запуска этой задачи. Конечно, если вся программа состоит только из смены эффектов, то тогда да, смысла использования диспетчера нет. Но бывают ведь случаи и посложнее.
И при чем тут avr? Какая разница какая архитектура контроллера? Дело ведь не в ней, а в структурном представлении программы. Причем модульности последней никто не отменял!
На форумах иногда попадались личности, нежелающие использовать диспетчеры на avr, основываясь только на малом объеме памяти и быстродействии. Зато переходя на эти же stm первым делом изучали например freeRTOS. Только потому, что "так все делают". Появилась какая-то тенценция применения ОСРВ на ARM'ах, особенно, если присутствует мало-мальский графический интерфейс. На мой взгляд, совершенно необоснованная. Возможности диспетчеров позволяют в большинстве случаев обойтись без ОСРВ, а разница в быстродействии с автоматами измеряется микросекундами, не думаю, что сильно критично. Более того, могут быть ситуации, когда диспетчер окажется быстрее. Зависит от количества задач и частоты их запуска.
Ответить | Ответить с цитатой | Цитировать
# demiurg 21.06.2014 18:04
Диспетчер не может быть быстрее по определению. В обычном цикле нет переключения. На данный момент я не вижу для себя смысла в диспетчере. Если мне требуется что-то запустить с какой-либо периодичностью, достаточно флагов или конечного автомата. Если мне потребуется запустить моргалку светодиодом, мне не нужно превращать это в отдельную задачу. На автоматах можно запустить что угодно как угодно, в диспетчере же замаешься разруливать.
Вы недавно правильно сказали, дело в опыте.
Я мучался с диспетчером, пока меня не ткнули в автоматное программировани е. Поверьте, как только я увидел преимущество КА, сразу же выкинул диспетчер.
Ответить | Ответить с цитатой | Цитировать
# Владимир 22.06.2014 05:56
Это бесконечный спор.
Цитирую demiurg:

Я мучался с диспетчером, пока меня не ткнули в автоматное программирование

Что не устраивало Вас в том диспетчере? Когда я сформировал свои требования и реализовал их, использование диспетчера приносит только удовольствие, никаких мучений!

Цитирую demiurg:
На автоматах можно запустить что угодно как угодно, в диспетчере же замаешься разруливать.

Вобще не согласен, на своем диспетчере я делал подсветку для коньков с более чем 10-ю эффектами, в большинстве из них используются переливы. При этом есть ИК-синхронизаци я между ними + пара кнопок. Очень прозрачно все написано, даже после длительного перерыва можно быстро во всем разобраться. Я не спорю, можно сделать и на автоматах. В этом случае будет даже эффективней в плане производительно сти. Но прога и так простаивает большую часть времени. А удобство восприятия программы на диспетчере с функциями SetTask(func, delay, period) мне нравится гораздо больше, чем просто список функций, непонятно как и когда вызываемых. ИМХО.
Ответить | Ответить с цитатой | Цитировать
# Владимир 22.06.2014 05:58
Цитирую Владимир:
При этом есть ИК-синхронизация между ними

Между коньками естесственно
Ответить | Ответить с цитатой | Цитировать
# Владимир 22.06.2014 06:02
Вы наверно видели реализацию, описанную в статье. Там же я принавал, что это криво и что исправленный вариант (не привязанный к диспетчеру, можно и с автоматами использовать) в комментариях.
Ответить | Ответить с цитатой | Цитировать
# Владимир 22.06.2014 06:03
ну что за... Про реализацию - это мой ответ на пост ниже
Ответить | Ответить с цитатой | Цитировать
# demiurg 21.06.2014 18:08
Кстати, я увидел вашу реализацию с короткими и длинными нажатиями. Вы диспетчер натягиваете, как ту сову, там где надо и не надо... Дайте ваш прямой контакт. Я отправлю вам пример, как можно спокойненько сделать на КА. И удержание (длинное нажатие по вашему), и автоповтор, и много чего еще можно сделать. И нафиг диспетчер не нужен.
Ответить | Ответить с цитатой | Цитировать
# demiurg 21.06.2014 18:19
И кстати, автор, посмотрите в сторону micro menu. В инете найдете. Только за основу возьмите оригинал, а не как там товарищ сделал. И вы тем более поймете, что диспетчер во многих случаях не нужен.
Ответить | Ответить с цитатой | Цитировать
# Владимир 22.06.2014 06:07
Микроменю я использовал в контроллере управления гальваникой, у меня там было ЕМНИП 168 пунктов меню - параметры системы для 3-х технологических процессов. Диспетчера тогда еще не было.
Ответить | Ответить с цитатой | Цитировать
# Владимир 22.06.2014 07:01
Цитирую demiurg:
И вы тем более поймете, что диспетчер во многих случаях не нужен.

Так я с этим и не спорил. Даже наоборот, говорил что для каждой задачи организация программы выбирается индивидуально! Я не имею ничего против автоматов!
Ответить | Ответить с цитатой | Цитировать
# demiurg 22.06.2014 08:47
Вот вам ссылка is.ifmo.ru/works/ Цикл статей Татарчевского. Для поиска. Татарчевский В. Применение SWITCH-технолог ии при разработке прикладного программного обеспечения для микроконтроллер ов. Часть 1
Ну и там много еще чего интересного.
К примеру у Татарчевского рассказано, как можно реализовать опрос клавиатуры.
Вкратце: перед вызовом автомата сканируются кнопки. В зависимости от того, какая клавиатура, пишется соответствующая функция. Матричная клавиатура, на одном порту, на нескольких портах. Дальше работает конечный автомат. Главная идея: сколько бы кнопок не было, они обрабатываются, как одна. И вам не нужно извращаться с диспетчером. Лично у меня опрос клавиатуры идет в модуле вывода информации на дисплей. Ну а если уж так приспичило использовать диспетчер, смотрите по программе, как вам запускать. Или как самостоятельную задачу, или в составе модуля.
pastebin.com/URMd767u
Идем дальше. Как дальше использовать. Отсканировали, распознали кнопки. В буфере у нас код кнопки.
У меня это сделано так:
В конечном автомате:
Код:
void Tui_Service_Main_Init (void)
{
set_menu (L_OUT_MODE);
}

void Tui_Service_Main_Out_Mode (void) { if (proc_menu_keys ()) return; // Если была обработка кнопок - выход.
Ответить | Ответить с цитатой | Цитировать
# Владимир 22.06.2014 12:56
На контроллере гальваники я примерно так и делал, только железно, почти без дефайнов. Опыта маловато было. Была матрица 3х4.
Код:
key_code = 0;
SetPortKeys = 0x08;
PortKeys = 0x77;

if ((PinPortKeys&0x01)==0x00) key_code=HEAT_key;
if ((PinPortKeys&0x02)==0x00) key_code=PREV_key;
if ((PinPortKeys&0x04)==0x00) key_code=START_key;

SetPortKeys = 0x10;
PortKeys = 0x6F;

if ((PinPortKeys&0x01)==0x00) key_code=ESC_key;
if ((PinPortKeys&0x02)==0x00) key_code=SET_key;
if ((PinPortKeys&0x04)==0x00) key_code=ENTER_key;

SetPortKeys = 0x20;
PortKeys = 0x5F;

if ((PinPortKeys&0x01)==0x00) key_code=PAUSE_key;
if ((PinPortKeys&0x02)==0x00) key_code=NEXT_key;
if ((PinPortKeys&0x04)==0x00) key_code=STOP_key;

SetPortKeys = 0;
PortKeys = 0x40;

Потом в основном цикле проверял код кнопки.
В паяльной станции я сделал по другому, т.к. всего 5 кнопок.
Код:
void BUT_Scan()
{
// define | counter | short press | long press
TestButton (BUT_FEN_SET, &fenSetPressed, FEN_SetMode, FEN_Off);
TestButton (BUT_FEN_DOWN, &fenDownPressed, FEN_TempDown, NULL);
TestButton (BUT_FEN_UP, &fenUpPressed, FEN_TempUp, FEN_SaveTemp);
TestButton (BUT_SOLD_DOWN, &soldDownPressed, SOLD_TempDown, SOLD_Off);
TestButton (BUT_SOLD_UP, &soldUpPressed, SOLD_TempUp, SOLD_SaveTemp);
}

Согласитесь, приведенный фрагмент (если его выровнять, получится таблица) раскрывает весь функционал программы. К этому я и стремился.
Ответить | Ответить с цитатой | Цитировать
# Владимир 22.06.2014 13:12
Да, и какой это у меня изврат с опросом кнопок? Вызов его (опроса) каждые 10 мс осуществляется одной строчкой:
Код:
RTOS_SetTask(BUT_Scan, 0, 10);

Остальное разрулит фрагмент, приведенный выше. А он к диспетчеру можно сказать не имеет отношения.
Ответить | Ответить с цитатой | Цитировать
# Casper 30.06.2014 09:56
День добрый. А под ардуино такой планировщик сложно будет переписать? Его очень не хватает мне для проекта)) Постепенно ухожу конечно я с ардуино, но самый большой проект всетаки на нем остался...
Ответить | Ответить с цитатой | Цитировать
# Владимир 30.06.2014 13:44
Никогда не интересовался ардуиной, даже не знаю, какой там контроллер используется. Переделать несложно: поправить инициализацию аппаратного таймера в функции RTOS_Init, не забыть обновить счетчик в прерывании таймера (у меня это ISR(RTOS_ISR)). Разрешить глобальные прерывания. Все.
Ответить | Ответить с цитатой | Цитировать
# Casper 30.06.2014 17:30
Там проц atmega328 используется, но он сишный язык как я понял не понимает, надо под с++ переписывать..
Ответить | Ответить с цитатой | Цитировать
# _Артём_ 01.07.2014 08:37
Цитирую Casper:
Там проц atmega328 используется, но он сишный язык как я понял не понимает, надо под с++ переписывать..

Как так? Что там переписывать нужно?
Если плюсы понимает, то си наверняка поймёт.
Ответить | Ответить с цитатой | Цитировать
# Владимир 01.07.2014 13:37
скорей всего компилятор ругается на функции авр студии. уберите из функций диспетчера DISABLE_INTERRU PT и RESTORE_INTERRU PT (они не обязательны). Затем уберите инклуды из файла commons.h. Там же удалите ENABLE_, DISABLE_ и RESTORE_INTERRU PT. После этого оформите программу по правилам вашей среды разработки.
Ответить | Ответить с цитатой | Цитировать
# Владимир 01.07.2014 13:39
Еще возможно потребуется изменить в главном файле .с строку
Код:
#include <rtos.h>

на
Код:
#include "rtos.h"
Ответить | Ответить с цитатой | Цитировать
# Casper 01.07.2014 16:34
Жалуется на это
Код:rtos.c: In function 'RTOS_Init':
rtos.c:15: error: 'TCCR0' undeclared (first use in this function)
rtos.c:15: error: (Each undeclared identifier is reported only once
rtos.c:15: error: for each function it appears in.)
rtos.c:16: error: 'TIFR' undeclared (first use in this function)
rtos.c:17: error: 'TIMSK' undeclared (first use in this function)
Ответить | Ответить с цитатой | Цитировать
# _Артём_ 02.07.2014 14:22
Цитирую Casper:
Жалуется на это
Код:rtos.c: In function 'RTOS_Init':
rtos.c:15: error: 'TCCR0' undeclared (first use in this function)
rtos.c:15: error: (Each undeclared identifier is reported only once
rtos.c:15: error: for each function it appears in.)
rtos.c:16: error: 'TIFR' undeclared (first use in this function)
rtos.c:17: error: 'TIMSK' undeclared (first use in this function)

В mega328 нет таких регистров, вот и выдаёт ошибку. Там TIMSK соответствует TIMSK0, TIFR - TIFR0 и так далее.
Ответить | Ответить с цитатой | Цитировать
# Vlad 21.07.2014 06:57
Успешно прикрутил к STM8L.
Кому интересно -- пишите.
Ответить | Ответить с цитатой | Цитировать
# megannnn98 01.08.2014 09:44
Спасибо огромное за планировщика. :D реально нужная штука
Ответить | Ответить с цитатой | Цитировать
# megannnn98 08.08.2014 12:26
Единственное, что мне не хватило функции очистки очереди

void RTOS_Reset()
{
arrayTail = 0; // "хвост" в 0
}
Ответить | Ответить с цитатой | Цитировать
# Владимир 16.08.2014 09:03
Пожалуйста! А в каких случаях используете эту функцию?
Ответить | Ответить с цитатой | Цитировать
# demiurg 02.09.2014 10:47
Владимир. Что вы скажете насчет такого варианта? ссылка
Ответить | Ответить с цитатой | Цитировать
# Владимир 02.09.2014 12:33
Ответил в сообществе
Ответить | Ответить с цитатой | Цитировать
# Chugun 17.09.2014 20:35
Можно ли передавать параметры в задачу при добавлении её в очередь, как при работе с функциями ???
Ответить | Ответить с цитатой | Цитировать
# Владимир 19.09.2014 11:15
Нет, нельзя. Как вариант - использовать глобальные переменные.
Ответить | Ответить с цитатой | Цитировать
# Анатолий 05.01.2016 00:28
Спасибо за планировщик. Все работает четко.
Запустил на LED матрице 8х8. Параметр ПЕРИОД очень пригодился, позволил визуально проверить последовательно сть зажигания светодиодов и работу кода.
Маленькая поправка. В коде заголовочные файлы в угловых скобках (а не кавычках), поэтому компилятор ругается. Или это только у меня?!.
И еще было бы не плохо написать процедуру запуска с одной тестовой задачей (TskTest). Легче сразу разобраться.
Ответить | Ответить с цитатой | Цитировать
# Владимир 09.01.2016 08:12
Пожалуйста.
В свойствах проекта надо прописать корневой каталог проекта, тогда угловые скобки будут работать. Ну или переделать на кавычки.
Как пример можно посмотреть код моей станции. Там много файлов, но для начала надо смотреть ssf.c и buttons.c
Ответить | Ответить с цитатой | Цитировать
# Анатолий 10.01.2016 13:40
Цитирую Владимир:
В свойствах проекта надо прописать корневой каталог проекта, тогда угловые скобки будут работать.


Спасибо буду знать
Ответить | Ответить с цитатой | Цитировать
# *Dim 23.07.2016 10:15
А нет ли полного проекта с этим планировщиком? Нужен пример "правильного" построения программы.
Ответить | Ответить с цитатой | Цитировать
# *Dim 23.07.2016 10:18
:-) Увидел ссыль на паяльную станцию, буду разбираться, спасибо.
Ответить | Ответить с цитатой | Цитировать
# Владимир_ 26.07.2016 09:46
Будут вопросы - спрашивайте. Я сюда периодически заглядываю.
Ответить | Ответить с цитатой | Цитировать
# arhiv6 01.10.2016 11:46
А зачем в функции void RTOS_DispatchTa sk() в строчке TaskArray.delay = TaskArray.perio d-1; отнимается единица?
Ответить | Ответить с цитатой | Цитировать
# Владимир_ 12.10.2016 04:34
Чтобы заданный период соответствовал действительност и. А иначе задачи будут выполняться через количество системных тиков period+1.
Ответить | Ответить с цитатой | Цитировать
# demiurg 01.10.2016 12:01
Мы с Владимиром уже обсуждали это творение. Остались при своих.
Этот планировщик и ему подобные не имеют никакого смысла. Потому что начинающие программисты считают, что подобные планировщики и диспетчеры якобы решают их проблемы. Но на самом деле приобретают лишний геморрой.
Решение главной проблемы (взаимодействие модулей и своевременное выполнение программного кода) следующее:
Исключение долгих циклов программных модулей, дробление выполнения модулями программного кода. Программные таймеры. Автоматное программировани е. Конечные автоматы.
Ответить | Ответить с цитатой | Цитировать
# ujin 03.10.2016 15:32
под разные задачи разные реализации...вы ше уже это говорили...поэт ому планировщику в этом мире есть свое место....с небольшой адаптацией вполне себе взлетел под CVAVrом
вполне нормально так работает...нагр евалки-мигалки аля подобное ак раз вполне это для него...
автору спасибо что делитесь своими знаниями ,и подробные объяснения по коду.
Ответить | Ответить с цитатой | Цитировать
# arhiv6 24.10.2016 04:14
Автор, я перенес планировщик на ARM и немного его доработал. Используются встроенные в ядро системный таймер SysTick и прерывание PendSV, что позволяет использовать планировщик на любом Cortex микроконтроллер е. Т.к. вся обработка сделана в прерываниях, в main вместо бесконечного вызова DispatchTask() можно оставить пустой цикл или заменить его на for(;;){idle()} ; - вызов какой-нибудь фоновой задачи, которую допускается в любой момент прервать остальными. Ещё добавил приоритеты задачам - если в один момент времени пришло время выполнить несколько задач одновременно - они выполняются в порядке, определённом их приоритетами. Собственно вопрос - у Вас в статье не указана лицензия проекта. Если я выложу код на github, достаточно того, что я укажу ссылку на эту статью и Вас в качестве автора изначального кода, на основе которого сделаны правки?
Ответить | Ответить с цитатой | Цитировать
# Владимир_ 24.10.2016 05:44
Более чем достаточно. Это 100%-ный OpenSource. Если не затруднит, оставьте здесь ссылку на гит. Интересно будет посмотреть.
Ответить | Ответить с цитатой | Цитировать
# arhiv6 24.10.2016 06:09
Вот, выложил: https://github.com/arhiv6/arm-task-sheduler
Ответить | Ответить с цитатой | Цитировать
# Владимир_ 25.10.2016 06:24
На практике уже пробовали его или просто ради удовольствия сделали?
Ответить | Ответить с цитатой | Цитировать
# arhiv6 25.10.2016 06:29
Ваш на практике пробовал в одном проекте. Свой - пока только пару тестов запускал. В ближайшее время буду небольшой проект делать - там попробую. Если какие-то правки/исправле ния вносить буду - внесу исправления в репозиторий и тут в комментариях напишу.
Ответить | Ответить с цитатой | Цитировать
# Антон_Ш 20.11.2016 05:05
Представляю вашему вниманию утилиту которая визуализирует выполнение задач данным планировщиком.

https://drive.google.com/file/d/0B6yun0FRTB-DalJhUmpFSF80Y28/view
Ответить | Ответить с цитатой | Цитировать
# Владимир_ 13.12.2016 04:15
С точки зрения программиста программа написана на высоком уровне. Она полностью самодостаточка. Приятно полазить, понажимать кнопки... Оценил график (делал нечто подобное), наверняка пришлось порядком повозиться.
С прикладной точки зрения все не так однозначно. Главная проблема - необходимость определять время выполнения каждой функции (знаю, в симуляторе AVR это легко). Для небольших проектов реально, но в ряде случаев это может стать проблемой.
В целом интересная утилитка. Мне понравилась.
Ответить | Ответить с цитатой | Цитировать
# Allison 11.09.2017 23:31
Ieri am găsit pe blogul Bucătar maniac postare despre cum să fierbi ouăle.
Ceaiul mai contine fluoruri, nu are calorii si doar jumatate
din cantitatea de cafeina a unei cani de cafea.
Despre Sfanta Elena a scris in volumul sau de memorii Confesiunile unui cafegiu ,
aparuta in 2008 la editura Humanitas si devenita greatest-seller.

De regula, continutul în cofeina al boabelor de cafea decofeinizate variaza între 0,02 si 0,
05%. Bineinţeles, râşniţa folosită este un factor esenţial pentru a ajunge
la acea granulaţia perfecta. Este cel mai mare producator de
cafea si exista in majoritatea bauturii espresso pe care serviti.
Din perspectiva pretuirii, cafeaua verde Robusta e pretuita la jumatatea surorii Arabica.


Rezultatul este cafea verde atent selectionata, depozitata in conditii optime astfel incat aceasta sa-si pastreze toate proprietatile nutritive.
Se toarnă apă fierbinte pe toată suprafaţa acesteia ca
să se elimine gustul de hârtie şi să nu se prindă de cafea.
Exista si la borcan - sub forma de cafea solubila (in supermarket-uri le din Franta
la raionul de cafea solubila - pana acum am gasit doua sortimente de la doi producatori
diferiti; ambele cu capac verde). Ca in cazul fiecarei prajitorii, mix-urile de cafea
sunt un factor de diferentiere, insa cand tragi linie, totul tine de gusturile prajitorului, de publicul caruia
i se adreseaza si de preferintele fiecarui cafegiu.



Am abonament de când mă știu, dar nu am cumpărat niciodată telefon de
la operatori, deci simt că am luat cumva țeapă. Acest
tip de boabe sunt considerate de către botanişiti anomalie a naturii şi pot apărea la multe soiuri de cafea.
Interesante observatii insa avind in vedere ca lucrez la revista cu si despre cafea, pe care facem de aproape 2
ani, am ajuns la concluzia ca cea mai cafea sau cafeaua perfecta
este cafeaua care-mi place mie, mie poate fi oricine, tie
iti place cafeaua la ibric, da sint de acord cu tine,
insa am baut minunatii facute la espresor de oameni priceputi sau la orice aparat.
În realitate pentru a obţine cafea perfectă trebuie să ai în vedere mai multe criterii, spun Floriana Vlaicu
şi Adrian Simion, proprietarii Guido Espresso, magazin, prăjitorie şi şcoală în care poţi învăţa cum se prepară
cafeaua.

In America Centrala intalnim urmatoareale cafele
de origine: Costa Rica, Guatemala, Honduras, Mexic, Nicaragua, Panama, El Salvador.
Cu aceleasi setari hotspot-ul merge cu cartela de abonament dar cu cea prepay nu.
Galão este bãuturã fierbinte din Portugalia, preparatã din espresso ºi spumã de lapte.
Odata cu tehnologia, apar tot mai mult aparate de cafea care se
folosesc pe baza de capsule. În primul rând intraţi la Settings
>Wireless and community settings >Tethering and transportable hotspot
( Setări-> Wi-fi şi reţea -> Partajare conexiune
web ). Cafeaua tradițională tailandeză se numește
Oliang sau Oleang și este mixtură din cafea tailandeză,
boabe de soia și porumb.

Espresso italian autentic este acoperit de crema de culoarea alunei,
tinzand spre culoarea maro cu negru. Cafea bine preparată la ibric are caimac în partea superioară, este omogenă şi nu conţine particule de cafea în lichid sau caimac.
Desigur, putem să-i impresionăm pe cei din jur comparând varietățile de cafea cu vinuri.
Nu ti-ai dori să cumperi cafea pre-macinata pentru că
nu știi niciodată dacă aceasta este deja rancedain momentul achizitionarii.
Robusta este cafea cultivata in Africa ce se distinge prin tarie, bogata in crema
si mai putin aromata. Este recomandata cafea
bine macinata, din boabe proaspat uscate, iar pentru savoare delicioasa, apa trebuie sa clocoteasca, adaugandu-se ulterior cafeaua macinata in functie de apa pe care am pus- in ibric.


Daca va cumparati cafeaua de la prajitori mici, locali acum este momentul excellent in care trebuie achizitionata.
Este destul de ușor de pregătit, însă trebuie respectați câțiva pași pentru a avea un rezultat cât mai minunat.
Cafeaua poate fi cumparata macinata sau boabe, recomand macinata pentru ca boabele de cafea
verde sunt extrem de dure si va pot strica rasnitele casnice.
În boabele de cafea verde, cafeina variaza între zero,90 si 2,zero% si
se gaseste numai partial în stare libera. Acum aş zice că am cumpărat prea puţin,
dar atunci, m-am gândit că dacă nu-mi va plăcea gustul cafelei
cu cardamom făcută la ibric, mă aleg cu încă un borcănel care va sta uitat pe vreun raft în dulap cine ştie câtă vreme până mă îndur să-l arunc.


Motivul este simplu: cu cât cafeaua stă mai mult la prăjit, cu atât cofeina dispare mai mult din ea.
În străinătate, conectează-te la hotspoturile noastre
și folosește Fon WiFi pentru a evita costurile pentru date în roaming.
—In cazul matasii colorate, se poate incerca indepartarea petelor cu solutie de acid lactic 5
% , dupa care se spala bine cu apa. Proprietatile si caracteristicil e lor variate se combina
pentru a asigura un echilibru de buchet si aroma. Persoanele care cunosc si carora le
place cafeaua in mod deosebit au experimentat si
au gasit metode de a satisface (la propriu) gusturile tuturor prin felul in care este preparata bautura.


Boabele de cafea cele mai bune pentru prepararea unei cafele espresso de calitae trebuie să fie mediu prăjite, să aibă culoarea
maroniu închis şi să aibă un side foarte puţin gras.
Romtelecom (in prezent Telekom Romania) ofera web acces gratuit la peste 13 milioane puncte de acces WiFi din intreaga lume,
prin optiunea Fon, fara nici un value suplimentar. Are doua sisteme de
siguranta si mentenanta, un sistem de curatire si un program de decalcificare.
Aceasta operatiune ar trebui sa dureze cam 25-30 de secunde, deoarece acesta este timpul optim pentru
extragerea substantelor din cafeaua macinata, dupa care se elibereaza substantele amarui si cantitate excesiva de
cofeina.

Greseala comuna pe care fac multi este ca vor sa bea un espresso lung (in primul rand este incorect din punct de vedere al alaturarii de termeni) pentru ca este mai slab.
Cei mai importanti trei producatori de cafea la nivel mondial sunt Brazilia,
Vietnam si Columbia. De obicei, pungile de cafea care se
vând la scară largă conțin blenduri de cafea,
în care sunt amestecate în diferite proporții soiuri de arabica, de calitate superioară,
mai puțin cofeinizată, și de robusta, de calitate mai slabă și
mai cofeinizată. Arborele (sau arbustul) de cafea este un membru al familiei Rubiacee (genus coffea) ; basically, acesta nu creste decat in regiunile tropicale si subtropicale, cu ploi abundente, zona principala de cultura
fiind situata intre 22 si 24° latitudine nordica si sudica (de parte
si de alta a ecuatorului).

Deoarece cafeaua turcească nu se face la filtru, înainte de a se
consuma trebuie lăsată câteva minute pentru ca zațul de cafea să se așeze.
Opera de arta ce masoara 6 metri lungime si 4 latime
a fost creata particular pentru festivalul The Rocks Aroma
din Sydney, Australia, din three.604 de cesti de cafea
si peste 500 de litri de lapte, potrivit The
Telegraph. Cafeaua trebuie consumatã imediat ce a fost preparatã, altfel aceasta se va rãci, alterându-se calitãþile aromatice ºi consistenþa cremoasã.

Indiferent dacă este boabe sau măcinată,
cafeaua ar trebui ţinută în borcane de sticlă închise ermetic, într- cutie de tablă
specială sau în ambalajul ei authentic, la temperatura camerei.


Un alt zvon care circula printer pasionatii de cafea se refera tot la relatia dintre gradul de prajire si concentratia de cofeina din boabele de cafea.
Florile sunt albe, cresc sub forma de ciorchine si
emana un miros puternic, asemanator celui de
iasomie sau de portocal, iar perioada de inflorire variaza de
la zona la alta Ceea ce este caracteristic la arborele de cafea este faptul ca in toate sezoanele se gasesc in acelasi arbore ramuri cu
flori, cu fructe verzi, in parg sau coapte, culoarea acestora trecand de la verde, la galben, apoi la rosu deschis si in sfarsit la rosu-purpuriu, cand fructele ajung la maturitate completa.


Este alta „delicatesa" exclusivista este obtinuta din boabe partial digerate de catre civeta de palmier, specie de mamifer asemanatoare cu zibeta. Cu cât boabele sunt mai fin măcinate, cu atât viteza cu care trece apa prin cafea este mai mică, și cu atât mai corpolentă și mai amară va fi aceasta. Pentru acestea exista si aparate automate, care dozeaza cafeaua, apa si temperatura impartial si ofera de fiecare daca acelasi gust. In mod particular acizii clorogenici, ramura din familia compusilor fenolici, si metabolitul lor, acidul ferulic, se gasesc la un nivel mai ridicat in cafeaua verde, deoarece prin procesul de prajire al cafelei, parte dintre ei se pierd.

Password = parola pe care veți introduce de pe telefon și alte dispozitive ca sã vã conectați la hotspot. Acestea erau consumate de razboinicii tribului pentru a avea mai multa energie in timpul luptelor. Prin urmare, dacă bem jumătate de cană de cafea la ora 8 dimineașa, la ora 20 vom avea în corp 25% din cofeina consumată. Adevarul ca poti sa faci 10 bari si cu pompa improvizata.... insa, secretul cafelei nu sta in bari....ci in cafea. Multumim prietenilor nostri organizatori, care ne-au oferit oportunitatea de a bea cafea impreuna! Sezonul principal în care se recoltează durează din decembie până în martie și poate să continue până în aprilie în cazul altitudinilor mai mari din Huehuetenango, iar expedierea se face în perioada aprilie-iulie.

Iar daca iti e intr-adevar somn, un ceai negru rezolva problema la fel de bine ca cafea. Asa ca am achizitionat un expresor guide (mda... Saeco) la pana-n 600 ron care ne permite sa folosim cafea macinata (nu numai pastile). Cafeaua Jacobs detine locul doi pe piata romaneasca a cafelei, iar Jacobs Kronung este lider in segmentul cafelei premium.ELITE Romania a fost infiintata in anul 1994. În prezent la noi în ţară exista puţine locuri unde mai putem bea cafea la nisip. Neincrederea in calitatea marcilor de cafea internationale aduse in Romania este sustinuta si de atractivitatea ridicata pentru cafeaua produsa pentru piata germana (incluzand aici si marca de cafea cu atractivitate mare la „negru" care doar relativ de curand
a inceput sa fie importata oficial, cu ambalaj in romana).



Pentru a vă face idee, noi adesea folosim termenul 'œsiropoasă' pentru a descrie cafea
consistenta. Inchirierea automatelor pentru bauturi calde reprezinta
activitatea principala a societatii noastre, aceasta
fiind extinsa cu activitatea de aprovizionare a automatelor cu consumabilele necesare (lapte, ciocolata, ceai, zahar plic, pahare), dar in special cu cafeaua boabe, care are avantajul
de a fi importata direct de la origine si prajita special pentru a obtine
esenta prin metoda espresso asigurata de echipamentele proprii.
La intrarea in Nespresso Boutique veti fi intampinati de un reprezentant Nespresso care fie
va poate povesti despre sortimentele de cafea din magazin, fie va poate invita la vizionare a filmuletelor
VR din Columbia, prin intermediul carora veti calatori
pana in mijlocul unor plantatii de cafea exceptionale,
ale unor fermieri talentati si dedicati.

Posibilitatea ca cel care adauga un hotspot sa isi lase numele care va fi
afisat la detaliile hotspot-ului adaugat. Iti ofera poze,
video, aricole si comentarii ale utilizatorilor pe
tema tipuri de cafea. Reţeta clasică este cam aşa: un shot de Espresso (30
ml) şi două părţi de apă (60 ml). Inima mea a batut puternic pentru ca pana in acel second
nu imi mai dorisem niciodata un aparat de facut espresso.
Iata cate calorii are cafea simpla conform bazei nutritionale americane: 230 ml de cafea neagra au doar
doua calorii ce reprezinta cateva proteine si uleiuri mono-nesaturate ce se gasesc
in boabele de cafea.

Also visit my web page :: See More Information: http://www.cokoyes.com/blog/293720/cafea-verde-sau-cafea-de-slabit-aliment-anticancer/
Ответить | Ответить с цитатой | Цитировать
# Savannah 12.09.2017 04:09
I am glad to be a visitant of this stark weblog, thanks for this rare information!

Feel free to visit my website - No Max Shred Supplement: http://nomaxshredtrial.org/no-max-shred-supplement/
Ответить | Ответить с цитатой | Цитировать
# Rafael 12.09.2017 08:51
I see your blog needs some fresh articles. Writing manually takes a lot of time, but there
is tool for this boring task, search for; Wrastain's tools for content

Also visit my page; DelphiaX: https://Rena2009.blogspot.com
Ответить | Ответить с цитатой | Цитировать
# Wyatt 12.09.2017 10:25
Photograph of Jefferson at Marina del Rey Apartments in Marina Del Rey, California.
We offer: - linens, towels and seashore towels - a full
kitchen with pots and pans, tableware and some primary cooking staples (ketchup, oil
and vinegar, salt and pepper, sugar, coffee, tea, and so on.) -
shampoo, conditioner, cleaning soap - two rickety
adult bikes (use at no charge, you fix them in the event that they break) - wifi - there may be ample free parking on the road, you just must yield the street cleansing signs to avoid getting a ticket on Wednesday and
Thursday mornings, 8-10am. Edible Preparations® 906 in Culver City,
California first opened in November 2007. Quoted rent doesn't embrace different charges and charges that could be part of your lease (i.e.
utilities, parking, etc.). Please contact the group for particulars.


ACTIVITIES AND ATTRACTIONS: Simply minutes away you may find the world-well-know n Venice Beach Boardwalk on the seashore!
The Oxford Triangle is a part of Venice not Del Rey.
I'm very household with EVERY house advanced in Marina Del Rey and Jefferson is likely one of
the top ones for the value. Big-name media and expertise companies are
accelerating their push within the Playa Vista neighborhood.
Trendy indifferent rear studio guesthouse with trendy design that embrace one personal storage
area. Location, location, location: this place has the very best.
Storing a car improperly may cause critical damage to your vehicle — that is why Frank from Public Storage is here to show you how one can retailer a automotive with these easy-to-keep in mind ideas.


Pets are allowed with a further month-to-month rent $50 for a canine and $25 for a cat, of $500 per condo.
Pretty place, welcoming and beneficiant hosts,
comfy bed. Now we have additionally taken Lindsey short, it's
insanely nice and helpful and did every part that it within the days of doing well
in Venice. Our clear storage facility has many floor-degree models and drive-up
access items which make for a smoother transition when transferring your objects from your automobile into your
unit. Scott was a terrific host - really friendly and helpful.
Pool, spas, sun deck, saunas, health middle, recreation rooms and laundry services full this exciting development.



It was one of the crucial stress-free air Bnb place I've ever stayed in. Johnny and mark had been really helpful.
Parallel parking was removed from the inland aspect of the road.
Horrible place to stay should you get pleasure from peace and quiet.
For these of you Loyola Marymount University (LMU) students, we understand that the very
last thing you want to take into consideration after finals is where you are going to put all of your stuff.
MASSIVE apartments; this is the key promoting point here.
We had an awesome keep and Darla made certain we were settled and had the whole lot we would have
liked. For Residents: There are two, managed-entry parking
constructions, with six levels of parking out there.



Taking cues from the encircling neighborhood, our shared workplace house at Playa Vista combines the
grit of a movie studio backlot with the glamour of previous Hollywood.
It is the second time I keep at this place and it nonetheless has the
identical allure! Many independently rented homes and flats will accept your pup without hesitation, while among
the bigger leases may require a further deposit. The realm around the city heart additionally has a whole lot of
completely different choices in the case of housing.
Great space with lots to do, proper on the seaside and subsequent to the Venice beach boardwalk.
Residents may additionally park in any unassigned parking house.


With many of the Vista Del Mar project full, some pissed off drivers are
organizing in opposition to the security enhancements.
Unfurnished, Not Specified, Apartment, Will Think about Pet, Studio,
1 Bathtub, Other Lease Sort, Carpet, Hardwood, and
Tile Flooring, Parking Included, refrigerator,
microwave, dishwasher, balcony, air conditioner, central warmth, hearth, washer and dryer
in unit, Stella is a recent coastal living expertise
with a group of contemporary residences, designer amenities, beautiful indoor-outside social areas and a stroll-all over the place neighborhood with a hip, metropolis meets beach vibe.



As much as 2 Canines welcome with $ninety nine.00
deposit, $75.00 lease. The vast majority of these artists promote their
creations on the world-famous Venice Seaside Ocean Front Walk, so you'll be able
to admire a bit in your keep, but additionally meet the craftsman in person when exploring Venice's Oceanfront Walk!
Each room within the dwelling, was charming, clean, and out there to us.
All the neighborhood was breathtaking and likewise strolling
distance to the bar and restaurant space. Inside our group, you'll
find thoughtfully designed 1-, 2-, and three-bed room apartment
houses that boast gourmet kitchens and private balconies or patios.


A number of opponents advised that each one Vista Del Mar on-road parking should be eradicated, including
many expressing issues that visitors depart their trash there.
I am very disillusioned concerning the Bonin/Garcetti agenda
to punish Performs del Rey locals to additional their everyone ride a motorcycle agenda” in LA.

I have been a PDR resident for about ten years and visitors was always a bit
slow. The complexity of determining what is Culver City, County of Los Angeles
and city of Los Angeles has been solved using the Metropolis of Los Angeles
Neighborhood Council map. Take a look at traffic situations in the Marina del Rey area before
embarking in your journey.

This was a beautiful cottage in an ideal location. Pretty
place - indifferent guest house, nice location. There is some free street parking close to many of the entrances, apart
from Lincoln Blvd (11) and Marina del Rey (12).
Pets should be on a leash always when outside the apartment
home. Playa del rey develop into a nightmare
place to dwell over evening. We now have 2 guest rooms in our designer photo voltaic-powered eco-pleasant house
in Del Rey, near Marina del Rey, Playa del Rey, Venice and Santa Monica, both
with a river view and you'll additionally have the ability to see Santa Monica, the Marina, Century Metropolis and the Mountains.


The Playa Vista area presents quick access to Los Angeles.
Lock down a spot at our towering glass-front Playa Vista
office space, and you'll be in good firm with massive hitters like Google, YouTube, and Facebook.
As a result of it is just one huge open room and generally
it is also a bit of bit noisy outside. Come see these luxurious residences for yourself by scheduling an appointment as we speak.

Nearby, you'll find a number of the most lovely working, strolling, and biking paths.
I am on the lookout for somebody who's knowledgeable,
and can pay for lease and payments on time, but most of all somebody
who I feel at house with, is easygoing that I get along with, who has
their very own interests and might live interdependently.


Beneficial stay when you wanna hit santa monica and the beaches there!
The mall is a part of Howard Hughes Center, which incorporates five office buildings.
Bonin's workers responded that the state Coastal Commission wouldn't allow for any reduction in parking as that will impede the
general public from accessing the seashore. In any other case, failure to enter a lease for a Public Storage unit inside the reservation interval leads to forfeiture
of the reservation deposit. Visit the Fisherman's Village the place you can take a harbor tour or a
fishing cruise, enjoy a pleasing day on the Burton W.
Chase Park, stroll along the Waterfront Walk, or calm down at the nearby Venice and Santa Monica seashores.



In fact there's the Venice Boardwalk the place folks from
all over the place walk to have a look at all the product owner's wares, eat at trendy
restaurants and folks watch. Please name 310-568-8772 to complain to
mike bonin about the traffic!!!! Beach-side parking was expanded
by converting parallel parking to diagonal.
They always make sure their visitor are nicely cared for, their home is clear and
very comfy. Merely have a look at the entire housing options, and shortly you
can have a good idea if 3221 Carter Ave, Marina del Rey, CA 90292 apartments are the answer to your housing needs.


Excellent for a couple, or young parents with a small child, or a
keep over good friend. Further Information About Jefferson at Marina del Rey.
The town heart, with all its vibrancy and
walkability, is great for young singles. We spent a very pleasant
evening at Scott's place - fabulously comfortable bed, warm and pleasant
welcome and a straightforward stroll to some great
eating and drinking choices. Our Expertise on the
Beachside Shangra La was implausible. Some requested for Playa Del Rey's
fundamental streets to feel and look extra like full of life seaside streets in close by Manhattan Seaside,
El Segundo, and Santa Monica. TIP 1: Preserve your hire
within a third of your gross household earnings.



The bedroom and bed had been very non-public and exceptionally snug, the proper mixture for my transient keep.
This is about as motorist hostile a plan as has
ever been seen in Los Angeles, a city the place most voters drive.
Additionally strolling distance to restaurants (Superba, Cafe Gratitude, Floor Works Espresso, Venice
Beach Wines, Baby Blues BBQ, Gjusta Bakery, Oscar's Cerveteca, Wurstkuche, and extra), pharmacies,
dry cleansing, ATM's, and simple bus entry half a block
away. And I'm writing to find out more about 3221 Carter
Ave, Marina Del Rey CA. I will be contacted by electronic mail at.
The Visitor Home was excellent and having a garage was nice.


If anyone in a neighboring unit a lot as raises their
voice a little bit-by no means mind gets right into a screaming match at 1am-you will hear every word of it.
Upstairs neighbors strolling around normally creates loud thumping noises-it seems like
they're jumping around playing a Wii sport. Please read our different evaluations to
see what kind of hosts we're and to get an idea of the service we
provide. I've gone in and spoken with Nancy, the very candy lady within the front workplace on the Jefferson. In addition to the breakfast unfold (take a look
at the picture) you may get super-fast wi-fi (a hundred+ Mbps), a nature sound machine,
entry to gentle use of a printer, premium streaming TV (featuring Spectrum, HBO, Showtime,
Cinemax, Epix, Netflix, Amazon and Hulu (all out there on demand) and over 300 channels), laundry,
off-road parking and the use of our seaside cruisers all at no extra charge.


Playa Jefferson is situated within the heart of Silicon Beach
straight throughout from Runway Playa Vista which is the social hub of Playa Vista with its state-of-the-ar t cinema, unique
restaurants and bars, magnificence and health venues
retail outlets and everyday conveniences corresponding to grocery and drug stores, banks and
coffee cafes. Many weekends you will see that
us Barbecuing at the pool if we aren't any surfing down on the beach.
Partial dwelling ( original 1926 charming with character - very Private and
separate entrance entrance - ),front room and one Queen measurement mattress
with Private tub. Nonetheless, all this revitalization doesn't mean that Culver City has grow to be a sterile neighborhood full of latest building.



This organic and clean house is an ideal place to loosen up, unwind Click Here: http://www.parcoaurunci.it/?option=com_k2&view=itemlist&task=user&id=435705
Ответить | Ответить с цитатой | Цитировать
# Jonah 12.09.2017 14:35
thank you for all your efforts that you have put in this.
Very interesting information.

Check out my site ... tom selleck jillie
mack divorce images: http://Linkgazer.com/index.php?title=Two_Things_Not_To_Try_To_Do_When_Working_To_Make_A_Guy_Fall_Motivated_By_You
Ответить | Ответить с цитатой | Цитировать
# Gladis 13.09.2017 03:33
Is playing on online poker/rummy/gam ing sites legal in India,
this is considered one of large question which stays still stays
unclear and unanswered. They have huge experience in running and managing multiplayer games.
Get a hundred% Welcome Bonus Up to Rs 500 in your First Deposit.

Get one other one hundred% Bonus Upto Rs 500 on Your Second Deposit.
If deposit Rs 100 - Rs 999 get Rs 50 instantaneous cash.
If deposit Rs a thousand and above and get Rs 100 prompt cash.
ClassicRummy India's Favourite Rummy Website with more than 1 million Indian Rummy Players and provides a unique likelihood to win Rs
2lakhs cash. The top one hundred players everyday get a chance to win this.
Basic Rummy now provides an opportunity to Get Rs 50000. Play your favorite rummy
on cell and get eligible to win Cashback up to Rs 50000 every week.



In response to the Internet and Cell Affiliation of India, India additionally has the
third-fastest rising cell app market in the world behind the US and Europe.
The trade right this moment is round $890 million in measurement as per Nasscom with at the
very least two companies coming up every
month and growing at round 30 per cent every year.
Rummy is getting real well-known with the Deccan people.
Wherever you go in India, you can see individuals enjoying playing cards in their very own type and convenience, be it in a
transferring prepare to get along with fellow passengers,
people in workplace during off time or bundle of family when to
fulfill for a get-together.

Indian Rummy or the sport of Rummy in India is much like
the other format of this sport the place a minimal of two players and
a maximum of six players can play at a time.
Every player gets 13 playing cards every and if there are more gamers
then two decks of playing cards a deck is a set of fifty two cards and 4 jokers is used.
Each player plays their card turn by flip in a clockwise order and each will get to
point out a card on his/her flip which makes the sport pretty much interesting.
However, this recreation requires the absolute presence of mind and a sound calculation which
at all times lets the opposite player get to react to your
confidence and may lose out on this strategy.

Get authorized answers from prime-rated legal professionals in 1 hour.
Okay Chandrashekar Rao, Telangana Chief Minister, has instructed authorities officers to draft an ordinance
to bolster the state's anti-playing laws in accordance with media
experiences. Rao added that though the federal government has enforced strict motion towards
card rooms, gambling still resumes by way of on-line platforms.
Local news stories in May had signalled that the federal government has already begun the method
of amending the Telangana Gaming Act via an ordinance.

The ordinance may feature a brand new definition of ‘cyber space'
and probably prohibit on-line poker, rummy and
different such ability video games, when performed
for stakes.

Hey and welcome to the latest online rummy website on the block - make yourself at dwelling
at Rummy Villa, and we'll deal with you in grand type.

With a main deal with each aspect of customer support, they've
grown into a reputation that has veteran players swearing by it.
This villa stands on a powerful basis, and we're
only getting larger and better! First up, here's what's on provide - it
prices you completely nothing to get your self a brand new Rummy Villa gaming account, save for the few seconds it takes to complete the simple registration process!
Once you're arrange, you may have instantaneous access to Free rummy video games
and the opportunity to play Cash video games
should you choose to get actual and put your cash where your
bet is.

However, in the event you can't discover what you are in search
of, we do not count on you to be groping in the dark any longer, contact
our Buyer Support immediately, and they will assist you to out.
In order to offer you one of the best gaming expertise, Rummy Villa makes use of state-of-the-ar twork technology, Artificial Intelligence
and high quality graphics. Rummy Villa affords you
an excellent user interface which is inclusive of useful popups and alerts supplying you with
data throughout and between sport play. You'll
be able to level up on the Rummy Villa Membership based on variety of stars collected
for finishing various actions as a registered player on the site.


For instance, gives its newly registered gamers a warm welcome
bonus of one hundred fifty p.c up to £one hundred fifty on their preliminary deposits.

If players continue making deposits every month, they will
get money match bonuses of 20 % as much as £a hundred on each monthly deposit for one yr.
Moreover, William Hill Casino offers a 60 % cash match as
much as £500 on playes' second deposits. Indian rummy players
who use Neteller, PayPal, Click2Pay, Ukash, Paysafecard, Skrill, Ecocard, Instadebit, WebMoney, and wire
transfer to fund their accounts will obtain an extra match bonus of 15 percent on their first deposits.


In the event that they use Visa, MasterCard,
Solo, Visa Electron, Maestro, Laser, and Entropay, they will obtain an extra match bonus of 10 % on their first deposits.
Though Indian pleasant on-line casinos supply a variety of banking methods and likewise special bonuses
for using a few of these banking strategies, Indian rummy players
may really feel annoyed to seek out that they can not use a majority of these banking methods.
Nevertheless, most Indian players hate revealing their monetary details at on-line casinos, which
is sort of comprehensible. In such cases, Indian rummy gamers can play
their favourite rummy game by making deposits with different payment options akin to Neteller or Skrill.


A major recreational software between work hours,
COMPUTER video games like Solitaire, Kings, PacMan and
graphically enhanced Pool, Chess, Dave, Tremendous Mario, Doom, Diablo,
Wolfenstien , Grand Prix, FIFA, Prince of Persia and very many extra
began to lose its appeal because the world of online video games with sites dedicated particularly to on-line video games, now referred to as gamming web sites cropped
up. There was no more a need to personal a game to
play a sport, no extra want to put in a sport, one simply wanted to login to a
gaming site of their selection and play the game they needed.

Rummy too became the most preferred sport on the gaming web site for folks with analytical bent of thoughts, resulting within the mushrooming of number of gaming websites solely devoted
to this game and catering the niche connoisseurs of the sport.


It can be clearly understood with so many Indian rummy web sites catering
to this sport that the web version of Indian rummy can also be a big hit, accepted by majority of gamers as the most effective
solution to unwind and calm down. With every passing day the recognition of the sport is
scaling new heights with most of those rummy websites registering new
customers/gamer s. With the option to play free or
with money accessible on all the most important Indian rummy websites, quite a lot
of new customers being launched to the game are availing of the free facility to study and master the game.
Customers/Players who are once confident of their abilities do participate in cash video
games to win cash prizes.

You can entry the gaming portals by way of your cell, pill or laptop computer.
These interesting details about this well-liked Indian card sport might need
aroused your curiosity in the game in case you are not a participant already.

As a result of money rewards which can be earned by winners, the
recognition of the game is growing rapidly.

In truth, it is a skill based mostly sport the place the player must be proficient
enough to type the sequence and the units. Suppose a flawed sequence is formed
by the player on the time of the present, the player ultimately loses the sport.
In keeping with Supreme Courtroom ruling, playing ability-based mostly video games like rummy is totally legal and it is thought-about as
a business exercise.

It was in 1968 that the honorable Supreme Court dominated
out that rummy is a skill based recreation and it's legal.
Aside from Odisha and Assam individuals can play online
rummy in all the Indian states and union territories.

On this web site, there are three codecs of taking part in rummy, deal
rummy, level's rummy and pool rummy. At first, the players can play a number of free games
so as to acquaint themselves with the foundations.
In case the participant is unwilling to play the sport,
all his deposited cash with the web site is refunded. The positioning additionally provides different amenities like bonus points and reward points.


Winnings above 10,000 INR attract a 30.9% tax referred to as TDS (tax deduction at supply).
Public Gambling Act, 1867 handed by British Government, one hundred fifty years again, prohibits gambling.
This Act has been amended over time, nevertheless, it is still
very imprecise and unclear. Gambling legal guidelines in India is unquestionably and closely restricted except for selective categories including lotteries and
horse racing. Nonetheless extra people have started making money bets upon prohibited betting and gambling actions in India.
Indian government has banned the games like teen patti (flush) nevertheless, on the other hand, playing rummy shouldn't be punishable.


Nagaland has recently accepted and passed The Nagaland Prohibition of Gambling and Promotion and Regulation of On-line Video
games of Talent Bill, 2015 which prohibits any type of playing in the state.
However to bet on these games online, the organization needs to take a license from
the State Authorities. In Maharashtra, playing is prohibited by
the State government. Bombay Prevention of
Playing Act, 1887 was handed by the government to manage playing practices
within the state. However, section 13 of the act leaves a scope of video games of
mere skill. Section 3 of the Act leaves the scope of a horse race and dog races however race course needs to get a
license from the state government.

Three key states from south India account for a bulk of the gamers on rummy ardour.
In actual fact, as many as 70% of the gamers are from Tamil Nadu,
Karnataka and Andhra Pradesh, with Tamil Nadu being the site's greatest market.
We are overwhelmed by the popularity our gaming web site has received within a short span of
time. Rummy is likely one of the most loved card
games across folks of all ages, and the concept behind introducing Rummy Passion was to offer a singular
and exhilarating expertise to Rummy lovers; and people have been flocking to our gaming
site to partake within the enjoyable. Our active monthly players are rising at 100% per quarter.


The graceful and problem free gaming experience at Rummy Ardour has additionally efficiently attracted a large number
of people who find themselves not expertise
adept. Nevertheless, in contrast to Rummy golf equipment where most gamers are either
retired people or housewives, on-line gamers are largely professionals and enterprise
owners. The truth is, 60% of the players on Rummy Ardour are
males in the age group of 20 to 40 years. Another noticeable development has been that of
youthful players between 18 to 21 years being very lively. Nevertheless, on Rummy Ardour we see loads of
younger viewers on this bracket being drawn to on-line rummy, indicating their growing interest in skill based gaming,” provides Garg.


Log in to this Amazing website, Ace2Three - The oldest,
largest and essentially the most reliable on-line rummy portal
in India deccan rummy for online rummy india - cq00382-wordpre ss-16.tw1.ru: http://cq00382-wordpress-16.tw1.ru/profile.php?id=3078,
Ответить | Ответить с цитатой | Цитировать
# Tasha 13.09.2017 18:57
Hello admin, i must say you have high quality articles here.
Your page can go viral. You need initial traffic only.
How to get it? Search for: make your content go viral Wrastain's tools

my blog post; 73Damion: https://Yolandafat.blogspot.de
Ответить | Ответить с цитатой | Цитировать
# Shawna 14.09.2017 14:36
It's an remarkable article for all the internet users; they will get advantage from it I
am sure.

Here is my homepage; http://deficollagenserum.org/which-top-defi-skincare-ingredients-are-used/ (247prever.com: http://247prever.com/user.php?login=ashleyduna)
Ответить | Ответить с цитатой | Цитировать
# Naomi 14.09.2017 16:51
I see your page needs some fresh content. Writing manually takes a
lot of time, but there is tool for this time consuming
task, search for; Wrastain's tools for content

Also visit my weblog - PearlineX: https://Ron2009.blogspot.com
Ответить | Ответить с цитатой | Цитировать
# Rigoberto 14.09.2017 21:04
http://telegra.ph/5UeQMr-08-28
http://telegra.ph/vuGMv39Zv-08-28
http://telegra.ph/dLIj17O-08-28
http://telegra.ph/WvlE42-08-28
http://telegra.ph/2qPrxS-08-28
http://telegra.ph/QPot9aZR-08-28
http://telegra.ph/Qc8dd2Zu-08-28
http://telegra.ph/aS3uC9-08-28
http://telegra.ph/6CuNC2B-08-28
http://telegra.ph/0ESGMpboN-08-28
http://telegra.ph/FY44xb3dw-08-28
http://telegra.ph/SfGH9ZTW6-08-28
http://telegra.ph/ZLwP3s-08-28
http://telegra.ph/osRy56-08-28
http://telegra.ph/Rh0ogp-08-28
http://telegra.ph/9WJbo6m-08-28
http://telegra.ph/NPbN9Pf-08-28
http://telegra.ph/8Mf7Rh6-08-28
http://telegra.ph/0mGDxW-08-28
http://telegra.ph/1uEHNZfXj-08-28
http://telegra.ph/62Jov4nJ-08-28
http://telegra.ph/M7yY6Fhv-08-28
http://telegra.ph/A7vL1DpT-08-28
http://telegra.ph/7fXlmb9-08-28
http://telegra.ph/0hsOAHI-08-28
http://telegra.ph/soUi8u8I-08-28
http://telegra.ph/m93bZVEg-08-28
http://telegra.ph/vLz676Jp0-08-28
http://telegra.ph/9FmEH6O4-08-28
http://telegra.ph/9M193mdPx-08-28
Ответить | Ответить с цитатой | Цитировать
# Mario 15.09.2017 02:08
Wow! After all I got a web site from where I be able to genuinely get valuable data regarding my study and
knowledge.

Here is my web blog; femmes mature: http://skyfon-varna.eu/?option=com_k2&view=itemlist&task=user&id=1379368
Ответить | Ответить с цитатой | Цитировать
# Leonardo 15.09.2017 02:40
Hi there i am kavin, its my first occasion to commenting anywhere, when i read this paragraph i
thought i could also make comment due to this
good post.

My website ... ClarityX (http://supplyconceptsinc.com/?option=com_k2&view=itemlist&task=user&id=934190: http://supplyconceptsinc.com/?option=com_k2&view=itemlist&task=user&id=934190)
Ответить | Ответить с цитатой | Цитировать
# Jerrold 15.09.2017 22:24
Hi there would you mind sharing which blog platform you're using?
I'm planning to start my own blog soon but I'm having a difficult time deciding between BlogEngine/Word press/B2evoluti on and Drupal.
The reason I ask is because your design and style seems different then most blogs and
I'm looking for something unique. P.S Apologies for being off-topic but I
had to ask!

Here is my web site - Skin Care And Lifestyle (soulgroovesrad io.com: http://soulgroovesradio.com/component/k2/itemlist/user/602209)
Ответить | Ответить с цитатой | Цитировать
# Renate 16.09.2017 00:08
Thanks for another magnificent article. Where else may anyone get that kind of
information in such an ideal way of writing? I've a presentation next week, and I am on the search for such information.

Here is my blog - http://apexatropinpills.com/ (elsagames.com: http://elsagames.com/profile/grettarocha)
Ответить | Ответить с цитатой | Цитировать
# Juliann 17.09.2017 20:30
I have noticed that your blog needs some fresh posts.
Writing manually takes a lot of time, but there
is tool for this time consuming task, search for; Wrastain's tools for content

my web blog; MerriX: https://Sergio2009.blogspot.com
Ответить | Ответить с цитатой | Цитировать
# Zenaida 18.09.2017 15:01
Arizona Department of Well being Services - Medical Marijuana Program.
As that final bullet point alludes to, there are various other
ailments, problems, and conditions not listed here that qualify you for a medical marijuana
advice, so it may well't harm to talk with a health care provider about
your particular signs. In truth, the co-authors of Proposition 215 have publicly acknowledged that they made the invoice's wording intentionally liberal
such that anybody in California may get quick access to
medical hashish. And NuggMD makes it simpler than ever for sufferers to get
the reduction that they want. Now all you want is a device with
Internet entry to get began, and to visit After creating an account,
you may fill out customary medical types much like that of any abnormal doctor's
office, with the power to upload any medical documents that you could be have already got.


Your medical marijuana advice card is legitimate for
one 12 months, identical as it would be if you happen to were
to see a health care provider in-person, after which you
will must get a marijuana card renewal Simply remember that only California-issu ed
recommendation playing cards will likely be accepted at California dispensaries, and suggestions from different states will
not be accepted. Armed with a legitimate medical marijuana card, you can now safely and
legally enter marijuana dispensaries and make purchases,
or you can order marijuana delivery through online marketplaces like , which checklist the menus of
nearby dispensaries and assist you to place orders with out ever
choosing up the cellphone!

Bonus: should you use NuggMD to get your physician's recommendation, you'll immediately be credited with $20 to order supply by !
Medical marijuana (MMJ) has been very real in America since California voters accredited Proposition 215, The California Compassionate Use Act, in 1996.

Within the modern California medical” marijuana area—a quickly-to-be regulated, but otherwise seemingly recreational, free for
all: Telehealth tech—or using our present digital ability set and toolbox to care for our health,
fitness, and medical wants—empowers licensed weed medical doctors to attach online with, and provide
MMJ recommendations for, aspiring MMJ sufferers.

No. As long as your present doctor's recommendation and ID have not expired,
your standing as a verified affected person won't be affected.
Go to our telemedicine service, , to resume your doctor's
advice for only $49. You want a physician's recommendation so as to legally buy medical marijuana in any form within the State of
California. Luckily, a cannabis card isn't tremendous
hard to get, however the suggestion must be given by a licensed physician in California with a view
to be accepted by native California hashish dispensaries You can get one from your any osteopath, physician, or surgeon for a variety of medical issues, together with seizures, glaucoma, AIDS, cancer, and literally any other situation that comes with signs that can be handled
by medical marijuana.

For example, check out the net medical marijuana renewal course of NuggMD has for sufferers.
All a affected person has to do is add their present medical documents,
then have a fast face-to-face video chat with a licensed
doctor. After a speedy analysis, they're going to have
their cannabis recommendation utterly renewed and mailed out the same day (along with a short lived PDF copy which
turns into out there instantly via electronic mail).
Sufferers even have the option of renewing their card together with their rec, so they
can get all of it done in one go. The entire service is offered for
the same low worth of $39, and sufferers can do
it from the comfort of their own house.

Medical Marijuana Renewal San Jose - San Jose 420 Evaluations.

Yelp reviews say this place is nice for friendly and quick renewals, and a clean environment so that
you can go and get your paperwork taken care of. 342
rankings and almost 5 stars cannot be wrong! Medical Marijuana Renewal Los Angeles - 420
Evaluations. Hashish Card Renewal San Francisco - Inexperienced Evaluations.
Set up within the legendary Amoeba Data, Yelp sufferers have reported that
the employees within Green Evaluations are quick and informative, but
make sure to make an appointment beforehand! The California cannabis industry is booming
and, due to expertise, it's simpler than ever to change into a legal hashish patient (by getting your prop 215
card) and acquire access to all that this unbelievable herb has
to supply.

In fact, the writers of Prop 215 intentionally made the language such that most individuals in California could be eligible for medical hashish a method or
another. However, this does present a very totally different subject;
Giving a recommendation to a affected person is totally
up to the doctor's discretion, so stopping by your regular physician in your rec
would possibly truly find yourself leaving you strolling out empty handed.

And most primary care medical doctors within the U.S. nonetheless have not hopped aboard the pro-weed prepare.
Since it is a fairly common problem that patients encounter, some doctors have set
up offices that get straight to the purpose.

Whereas this service could appear easy, it will probably additionally prove to be
fairly troublesome for individuals who need to be more discreet.

If you want to know extra about them, we'll recommend a third occasion service within the
next sectoin that provides fully confidential cannabis evaluations, suggestions, and ID
playing cards for only $39. For those who're seeking to skip the wait (and the difficult course of) that comes together
with going to the weed doctor, just find any internet connected gadget and head on over to.

In the same amount of time it takes to seek for hashish
evaluations near me ,” you may get each your hashish recommendation and card on-line, and immediately
access the plethora of goodies out there for MMJ patients.


Should you bought your legal medical documents anywhere exterior of the state of California,
they won't be legally recognized. Sufferers are required
to have documentation that is issued officially by the state in an effort to qualify to be used in California.
Nonetheless, your California rec will probably be recognized by some states where hashish
has been legalized for medical use, and you do not have to
be a California resident to get a suggestion right here (any U.S.
issued ID will suffice). So there you might
have it people, find out how to get a weed card on-line ,
and how one can order hashish supply instantly afterwards (and don't forget you get a $20 free
credit score whenever you use NuggMD to your cannabis analysis).


Today we're proud to announce the unveiling of EazeMD, our on demand telemedicine service that pairs licensed physicians with potential patients seeking entry to medical marijuana.
Major well being care providers generally do not write hashish recommendations.

Utilizing the EazeMD platform, sufferers connect to a board-certified doctor from Nefertiti A.
Brown M.D. Inc for a dwell video consultation seven days every week
for a value of just $30. If the physician recommends medical marijuana after the evaluation, the affected person immediately receives a PDF
model of their MMID which can be utilized to order on demand
from the Eaze menu.

Dispensaries could resume utilizing the portal for level of sale functions.

The final day patients might visit a Nevada Departme nt of Motor Vehicles (DMV) workplace to course of medical marijuana playing cards was Thursday,
August eleven, 2016. The new procedure mails playing cards directly
to patients, eliminating the necessity for trips to
the DMV. The Medical Marijuana dispensaries of the State of Nevada are authorized to promote medical marijuana to card holders from the states
above if the patient presents a State or native government-issu ed
medical marijuana card. The Nevada Medical Marijuana Cardholders/Car egivers Program is a state registry program within the Nevada
Division of Health and Human Services, Nevada Division of Public and Behavioral Health.


Per the Illinois Division of Public Health's current emergency modification , a caregiver
card price is $25 for 1 year, $50 for 2 years, and $75 for three years.
Sufferers With Terminal Illness Expedited Utility. The appliance for
patients with terminal sickness might be found
here. Click on this hyperlink to learn the way to apply for an Arizona Medical Marijuana Card online.
Nevertheless, to entry this magical herb extra simply, we bring to our clients or patients lucrative methods in order
that they'll buy medical marijuana without any form of
problem. Also, the evaluation process allows you
to ask anything associated to the marijuana and products
comprised of it. You may also ask a number of right strains that may
be helpful for your health.

In particular states, equivalent to California , New-York , and Florida ,
the process could be completed online utilizing a Telehealth service.
This service is adopted by medical marijuana card providers
and provides sufferers easy access to licensed 420 docs.
When selecting a 420 evaluations on-line firm, it is important to make sure that the corporate is HIPAA compliant and
that your information is encrypted, so that you just won't
be present in any public information or databases.
Sadly, most states nonetheless act as if we live in the prehistoric era and subsequently don't allow
medical doctors to make use of the Telehealth
service.

MASSIVE is the time period to make use of when describing this 420 evaluation power-home They even class themselves as the Uber
for Weed.” Backed by $thirteen million in Sequence B funding from
Contemporary VC, DCM Ventures and Tusk Ventures, you may rest guarantee that
Eaze has received the 420 med evaluations process nailed down. Moreover, with this much capital behind them, you
possibly can only think about the number
of security precautions which have been positioned to make sure affected person privateness.
They supply a 420 on-line evaluation service and in addition do dwelling deliveries or weed.
In case your doctor agrees to offer you a medical marijuana advice, they might want to complete and submit an electronic affected person certification to the Medical Use of Marijuana Program.



There is no such thing as a age limit for acquiring a Nevada medical marijuana card
as long as a release form is signed, and
a primary caregiver is designated. Another situation accredited by the Division of Health and Human Companies.
Once your condition is established and confirmed by a physician,
the next step is to fill out a Nevada Medical Marijuana Registry application form Send
the appliance along with a $25 examine to the Nevada State
Well being Division. If you are not the affected person,
request a caregiver packet or minor release together with the name and deal with of the patient
you might be representing. Chances are you'll start visiting our
dispensaries straight away.

At solely $39 NuggMD is probably the most inexpensive online provider of 420 evaluations ; there are not any hidden costs or further charges, though you will have to pay extra when you go for the
non-compulsory medical hashish ID card. NuggMD medical doctors are available every
single day from 8a.m. to 10p.m. PST. As soon as permitted (you will
not be charged for those who aren't) you will instantly be
emailed a digital copy of your advice, which you should use at virtually any dispensary/coll ective that same day (name beforehand to verify, some will not accept the temporary model) till a signed, embossed paper copy arrives in the mail
a number of days later.

Feel free to visit my homepage: 420 evaluation coupons at mmjdoctoronline (bikersfirst.co m: http://bikersfirst.com/california-is-the-primary-state-to-go-marijuana-laws-to-permit-california-sufferers-to-fulfill-with-doctors-in-clinic-or-on-line-via-tele-medication-to-visit-with-420-docs-for-420-evaluations-online-f/)
Ответить | Ответить с цитатой | Цитировать
# Delila 19.09.2017 01:54
I see your blog needs some fresh content. Writing manually takes a lot of time, but there is tool
for this boring task, search for: Wrastain's tools for
content

My blog :: TracieX: https://Gloria2009.blogspot.com
Ответить | Ответить с цитатой | Цитировать
# Muhammad 19.09.2017 22:15
Awesome article it's really educational.

Here is my web-site :: free physic Reading
online now: http://www.collegian.psu.edu/users/profile/kristinfarrelly/
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий

Защитный код
Обновить