пятница, 25 декабря 2015 г.

RTOS и режим SSX

Существует модель выполнения процесса SSX (Single shot execution).
Идея ее проста - процесс представляет из себя функцию, из которой обязан выйти по истечении короткого времени.
Никаких while недопускается (почти).
Для реализации такой концепции, необходимо особым образом реализовывать потоки, но оно того стоит, так как экономится память, процессорное время и код становится намного проще.
Давайте сначала представим данную модель на очень примитивном примере, а затем будем ее совершенствовать.
Пример будет такой, у нас есть основной поток, или как его принято называть super loop.
В нем мы будем проверять нашажие кнопки, и включать красный светодиод.
И еще один поток, мигающий светодиодом.
Кроме потоков нам нужен планировшик, он должен запускать потоки, останавливать и так далее.
К планировщику нужен таймер.
Перед началом работы, запускам таймер, который должен генерировате прерывание раз  в какойто квант времени.

В обработчике прерывания от таймера прячется планировщик:

OnTimer1OVF()
{
  IF(Флаг_выполнения_потока)
  {
      //Сейчас мы не можем обрабатывать другие потоки
  }
  ELSE
  {
      FOR(i=0, i < Количество_потоков, i++)
      {
            IF(потоки[i].зазор >= потоки[i].период)
           {
            //Время с момента завершения предыдущего вызова потока, превысило или равно,                        желаемуму периоду выполнения потока, можно вызывать снова.
                Флаг_выполнения_потока = 1;              
                потоки[i].зазор = 0;
                потоки[i].shot();
                return();
           }
      }
  }
}
Завтра допишу!

пятница, 19 сентября 2014 г.

пятница, 27 июня 2014 г.

CTS-PHD-1080P12X Flex PCB или шлейф для камеры Cisco / Tandberg

Пришли мне две камеры с порванными шлейфами, думал купить шлейф - оказалось очень сложно - его нет нигде.
Правда один, заказчик сам нашел, второй не понадобился но я все же спроектировал шлейф и отправил оценить стоимость изготовления:
10 штук около 2000 - 2500$ - один примерно так же :-)
Выкладываю проект в OrCAD PCB Editor и в Gerber файлах.
Может кому пригодиться - кто закажет 10 - пришлите мне один, в качестве благодарности :-)
http://www.powerc.ru/instrukcii/FlexPCB.zip?attredirects=0&d=1

понедельник, 10 декабря 2012 г.

Глобальные флаги в стиле Renesas

Для удобства работы как с отдельными битами так и целиком с байтом или скажем словом, удобно использовать вот такую конструкцию:


typedef struct {
union {
unsigned char BYTE;
struct{
unsigned char DUMMY: 5;
unsigned char FLAGFORFUTURE: 1;
unsigned char ADCBUSY: 1;
unsigned char UARTBUSY : 1;
}BIT;
}DATA;
}_GLOBAL_FLAGS;


Затем мы создаем эту структуру:

_GLOBAL_FLAGS GLOBAL_FLAGS;

Ну и теперь с ней можно работать например так (побайтно):

GLOBAL_FLAGS.DATA.BYTE = 0;

или так (побитно):

GLOBAL_FLAGS.DATA.BIT.UARTBUSY = 1;

четверг, 25 октября 2012 г.

TCP/IP стек для Renesas RX62N

Продвигается писанина стека протоколов TCP/IP для микроконтроллера Renesas RX62N.
Пока добился вот такого:


Reader 1 и Reader 2 - это считыватели RFID подключенные по Wiegand 26
Ну а Card number соответственно последние считанные карточки.

Еще не одолел TCP таймауты, быстрый повтор и т.д.