www.open-tager.ru
http://www.open-tager.ru/forum/

LTArmada
http://www.open-tager.ru/forum/viewtopic.php?f=5&t=3776
Страница 101 из 109

Автор:  Pingvin [ 06 июл 2017, 11:54 ]
Заголовок сообщения:  Re: LTArmada

DiBor писал(а):
Pingvin писал(а):
Ща начну тоже самое делать под радиомодули.
И... вуа-ля - будут беспроводные датчики! ;) :)
Пока в таких корпусах, да...

Радио модули будут использоваться для каких целей, вернее какие возможности Вы планируете с ними реализовать?


Как замена блютусу.
Облепился ими с ног до головы - топология то мультиточечная!
Лишь бы памяти и оперативки хватило.

Автор:  Pingvin [ 06 июл 2017, 19:03 ]
Заголовок сообщения:  Re: LTArmada

Не... f030 для радиомодуля не подходит, вот кандидат

STM32F042K6T6
Изображение

или вот
STM32F051K8T6

Автор:  Pingvin [ 11 июл 2017, 13:53 ]
Заголовок сообщения:  Re: LTArmada

Сенсор для бюджетной повязки.
Либо ws2812b + ИК диод + 5 проводков = RBG сенсор +ИК
Либо классика: 4 провода и красный светодиод вместо ИК

Вложения:
RGB-Sensor-Schematic.png
RGB-Sensor-Schematic.png [ 31.8 KiB | Просмотров: 9777 ]
RGB Sensor PCB_bot.png
RGB Sensor PCB_bot.png [ 14.7 KiB | Просмотров: 9777 ]
RGB Sensor PCB_top.png
RGB Sensor PCB_top.png [ 17.6 KiB | Просмотров: 9777 ]

Автор:  Pingvin [ 17 авг 2017, 06:40 ]
Заголовок сообщения:  Re: LTArmada

Снова занялся радиомодулями.
Получил два новых радиомодуля.
До этого один из двух имеющихся у меня радиомодулей сломался.
Радиомодули можно подключать к двум разным портам - к порту ЖКИ или к порту для датчиков.

Планирую сделать так - в оружии радиомодуль будет подключатся к порту датчиков, а в бандане - к порту ЖКИ.

Если подключенный к порту для сенсоров радиомодуль уже работает, то для того, чтобы использовать ЖКИ порт, нужно отключить драйвер ЖКИ.

При существующей структкре проекта это сделать непросто.
Основной код перегружен низкоуровневыми функциями для работы с железом.


А так как оборудование может быть разным (цветной или черно-белый ЖКИ, например), то ещё много макроопределений.
Код стал сложным для понимания.

Конечно - мне, в первую очередь - хотелось поскорее проверить работоспособность своих идей, качество кода было на втором плане.
Теперь, когда концепция в целом оправдала себя, пришло время занятся качеством кода.

Необходимо все низкоуроневые функции спрятать в драйверах.
Написать прослойку "middlware", чтобы был единый интерфейс для работы с подключаемыми устройствами и при использовании различных устройств код основной программы не менялся.

Вот такая непростая задача...

Автор:  Pingvin [ 23 авг 2017, 05:35 ]
Заголовок сообщения:  Re: LTArmada

Причёсываю код помаленьку.
Добился, казалось, невозможного - всего 3 предупреждения при сборке! :)

Код:
       [cc] E:\Repositories\ARMaDa\FirmWare\trunk\Projects\LaserTag\ARMada_from_git\rtos_103_SDIO_FAT_complite\main.c:2916:3: warning: implicit declaration of function 'memmem' [-Wimplicit-function-declaration]
       [cc]    if (memmem(record,record_len,parametersPointers[index],param_len)!='\0'/*NULL*/)
       [cc] E:\Repositories\ARMaDa\FirmWare\trunk\Projects\LaserTag\ARMada_from_git\rtos_103_SDIO_FAT_complite\FATFS\src\option\syscall.c:15:1: warning: "/*" within comment [-Wcomment]
       [cc]  ^
       [cc]  // ret = TRUE;     /* uITRON (nothing to do) */
       [cc] E:\Repositories\ARMaDa\FirmWare\trunk\Projects\LaserTag\ARMada_from_git\rtos_103_SDIO_FAT_complite\FATFS\src\option\syscall.c:61:20: warning: "/*" within comment [-Wcomment]
       [cc]  ^
       [cc]  /*------------------------------------------------------------------------*/

Два вообще не в моих файлах, а в syscall.c
Одно тоже непонятное, так как все что надо подключено, а компилятор говорит - не задекларирована функция.
Ну и сам код становиться куда более читабельным.
Было
Код:

bool configure_bluetooth(void)//настраиваем блютус модуль
{

   bool at_res;
#ifdef    COLOR_LCD
   static volatile TextParamStruct TS;
   TS.XPos =  0;
   TS.YPos = 10;
   TS.Size = 0;
   TS.Font = StdFont;
   TS.TxtCol = iWhite;//iGreen;//iRed;
   TS.BkgCol =iBlack;//iWhite;
#endif


   USART_DeInit(USART1);
   InitCOM1(38400);
   bt_set_at_commands_mode(true);
   vTaskDelay(100);
   bt_reset();
   BL_ON;

   at_res = send_test_at_command();
   if(!at_res){
#ifndef    COLOR_LCD
      lcd8544_putstr(0, 8, "38400 тест не прошел", 0); // вывод первой строки
      if (!screen_auto_refresh) lcd8544_dma_refresh(); // вывод буфера на экран ! без этого ничего видно не будет !
#else


      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
      {
         while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
         while (SPI3->SR & SPI_SR_BSY);
         init_spi3();
         SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
         PStr("38400: Test error", &TS);
         xSemaphoreGive(xColorLCDSemaphore);
      }
#endif
      USART_DeInit(USART1);
      InitCOM1(9600);
      vTaskDelay(100);
   }
   if(strlen(armadaSystem.bluetooth.name))//если строка с именем не пустая
   {

#ifndef    COLOR_LCD
      lcd8544_putstr(0, 16, "Имя: ", 0); // вывод первой строки
      lcd8544_putstr(8, 16, armadaSystem.bluetooth.name, 0); // вывод первой строки
      if (!screen_auto_refresh) lcd8544_dma_refresh(); //
#else
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
      {
         while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
         while (SPI3->SR & SPI_SR_BSY);
         init_spi3();
         SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
         TS.XPos =  0;
         TS.YPos +=10;
         PStr( "Name: ", &TS);
         PStr(armadaSystem.bluetooth.name, &TS);
         xSemaphoreGive(xColorLCDSemaphore);
      }
#endif


      at_res = send_set_at_command(at_name,armadaSystem.bluetooth.name);
#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  if (at_res) PStr( "OK", &TS);
                  else PStr( "ERROR", &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }

#else
      if (at_res)
            {

               lcd8544_putstr(0, 24, "Имя успешно задано ", 0); // вывод первой строки
               if (!screen_auto_refresh) lcd8544_dma_refresh(); //


            }

#endif
   }
   if(strlen(armadaSystem.bluetooth.cmode))//если строка с именем не пустая
   {
#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  PStr( at_cmode, &TS);
                  PStr( "=", &TS);
                  PStr( armadaSystem.bluetooth.cmode, &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }
#endif
      at_res = send_set_at_command(at_cmode,armadaSystem.bluetooth.cmode);

#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  if (at_res) PStr( "OK", &TS);
                  else PStr( "ERROR", &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }
#endif



   }
   if(strlen(armadaSystem.bluetooth.role))//если строка с именем не пустая
   {
#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  PStr( at_role, &TS);
                  PStr( "=", &TS);
                  PStr( armadaSystem.bluetooth.role, &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }
#endif


      at_res = send_set_at_command(at_role,armadaSystem.bluetooth.role);
#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  if (at_res) PStr( "OK", &TS);
                  else PStr( "ERROR", &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }
#endif



   }
   if(strlen(armadaSystem.bluetooth.mac_adress_for_bind))//если строка с именем не пустая
   {

#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  PStr( "BIND:", &TS);
//                  PStr( "=", &TS);
                  PStr( armadaSystem.bluetooth.mac_adress_for_bind, &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }
#endif
      at_res = send_set_at_command(at_bind,armadaSystem.bluetooth.mac_adress_for_bind);
#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  if (at_res) PStr( "OK", &TS);
                  else PStr( "ERROR", &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }
#endif

   }
   if(strlen(armadaSystem.bluetooth.pswd))//если строка с именем не пустая
      {
#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  PStr( "PASSWORD:", &TS);
//                  PStr( "=", &TS);
                  PStr( armadaSystem.bluetooth.pswd, &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }
#endif

         at_res = send_set_at_command(at_pswd,armadaSystem.bluetooth.pswd);
#ifdef COLOR_LCD
      if(xSemaphoreTake(xColorLCDSemaphore, (portTickType)(TIC_FQR*2)/*600*/ )== pdTRUE)//если LCD занят, ждем 2 с
               {
                  while (!(SPI3->SR & SPI_SR_TXE)); // Wait for bus free
                  while (SPI3->SR & SPI_SR_BSY);
                  init_spi3();
                  SB(0x36, Reg); //Set Memory access mode
#if          LCD_MODUL_VERSION == 2
         SB((0x08 |(1<<7)|(1<<6)), Dat);
#elif    LCD_MODUL_VERSION == 1
         SB((0x08 /*|(1<<7)*/), Dat);
#endif
                  TS.XPos =  0;
                  TS.YPos +=10;
                  if (at_res) PStr( "OK", &TS);
                  else PStr( "ERROR", &TS);
                  xSemaphoreGive(xColorLCDSemaphore);
               }
#endif

      }
   bt_set_at_commands_mode(false);
   USART_DeInit(USART1);
   if(armadaSystem.bluetooth.baudrate) InitCOM1(armadaSystem.bluetooth.baudrate);
   else InitCOM1(BAUDRATE);
   bt_reset();
   vTaskDelay(TIC_FQR*2);
#ifndef    COLOR_LCD
   BL_OFF;
#endif
}



Стало
Код:

void configure_bluetooth(void)//настраиваем блютус модуль
{

   bool at_res;
   unsigned char line_counter=0;
   unsigned char line_on_screen=display_vertical_screen_resolution()/display_standard_symbol_height();


   USART_DeInit(USART1);
   InitCOM1(38400);
   bt_set_at_commands_mode(true);
    vTaskDelay(100);
    bt_reset();
    BL_ON;
   display_put_string(0,line_counter++, (const unsigned char *)"Set BT");

    at_res = send_test_at_command();

    if(!at_res){
       if(!(line_counter<line_on_screen)){
           vTaskDelay(150);
           line_counter=0;
           display_clear_screen();
       }
       display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"38400: Test error");

       USART_DeInit(USART1);
       InitCOM1(9600);
       vTaskDelay(100);
    }
   if(strlen((const char*)armadaSystem.bluetooth.name))//если строка с именем не пустая
   {

       if(!((line_counter+1)<line_on_screen)){
           vTaskDelay(150);
           line_counter=0;
           display_clear_screen();
       }
      at_res = send_set_at_command((char*)at_name,(char*)armadaSystem.bluetooth.name);
      display_put_string(0,display_standard_symbol_height()*(line_counter),(const unsigned char*)"Name: ");
      display_put_string(display_standard_symbol_width()*5,display_standard_symbol_height()*(line_counter++),(const unsigned char*)armadaSystem.bluetooth.name);

      if (at_res)
         {
            display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"OK");
         }
      else
         {
            display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"ERROR");
         }
   }
   if(strlen((const char*)armadaSystem.bluetooth.cmode))//если строка с именем не пустая
   {

      if(!((line_counter+1)<line_on_screen)){
           vTaskDelay(150);
           line_counter=0;
           display_clear_screen();
       }

      at_res = send_set_at_command((char*)at_cmode,(char*)armadaSystem.bluetooth.cmode);
      display_put_string(0,display_standard_symbol_height()*(line_counter),at_cmode);
      display_put_string(display_standard_symbol_width()*8,display_standard_symbol_height()*(line_counter),(const unsigned char*)"=");
      display_put_string(display_standard_symbol_width()*9,display_standard_symbol_height()*(line_counter++),(const unsigned char*)armadaSystem.bluetooth.cmode);
      if (at_res)
               {
                  display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"OK");
               }
            else
               {
                  display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"ERROR");
               }
   }
   if(strlen((const char*)armadaSystem.bluetooth.role))//если строка с именем не пустая
   {
      if(!((line_counter+1)<line_on_screen)){
           vTaskDelay(150);
           line_counter=0;
           display_clear_screen();
       }
      at_res = send_set_at_command((char*)at_role,(char*)armadaSystem.bluetooth.role);
      display_put_string(0,display_standard_symbol_height()*(line_counter),at_role);
      display_put_string(display_standard_symbol_width()*7,display_standard_symbol_height()*(line_counter),(const unsigned char*)"=");
      display_put_string(display_standard_symbol_width()*8,display_standard_symbol_height()*(line_counter++),(const unsigned char*)armadaSystem.bluetooth.role);
      if (at_res)
               {
                  display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"OK");
               }
            else
               {
                  display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"ERROR");
               }
   }
   if(strlen((const char*)armadaSystem.bluetooth.mac_adress_for_bind))//если строка с именем не пустая
   {
      if(!((line_counter+1)<line_on_screen)){
           vTaskDelay(150);
           line_counter=0;
           display_clear_screen();
       }
      at_res = send_set_at_command((char*)at_bind,( char*)armadaSystem.bluetooth.mac_adress_for_bind);
      display_put_string(0,display_standard_symbol_height()*(line_counter),(const unsigned char*)"BIND:");
      display_put_string(display_standard_symbol_width()*5,display_standard_symbol_height()*(line_counter++),(const unsigned char*)armadaSystem.bluetooth.mac_adress_for_bind);
      if (at_res)
         {
            display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"OK");
         }
      else
         {
            display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"ERROR");
         }
   }
   if(strlen((const char*)armadaSystem.bluetooth.pswd))//если строка с именем не пустая
      {

      if(!((line_counter+1)<line_on_screen)){
           vTaskDelay(150);
           line_counter=0;
           display_clear_screen();
       }
         at_res = send_set_at_command((char*)at_pswd,(char*)armadaSystem.bluetooth.pswd);
         display_put_string(0,display_standard_symbol_height()*(line_counter),(const unsigned char*)"PASSWORD:");
         display_put_string(display_standard_symbol_width()*9,display_standard_symbol_height()*(line_counter++),(const unsigned char*)armadaSystem.bluetooth.pswd);
         if (at_res)
         {
            display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"OK");
         }
         else
         {
            display_put_string(0,display_standard_symbol_height()*(line_counter++),(const unsigned char*)"ERROR");
         }
      }
   bt_set_at_commands_mode(false);
   GPIO_ResetBits(GPIOC, GPIO_Pin_4);//
   USART_DeInit(USART1);
   if(armadaSystem.bluetooth.baudrate) InitCOM1(armadaSystem.bluetooth.baudrate);
   else InitCOM1(BAUDRATE);
//   bt_reset();
   vTaskDelay(TIC_FQR*2);
#ifndef    COLOR_LCD
   BL_OFF;
#endif
}





Работы ещё много, но процесс идет...
;) :)

Автор:  Pacifist [ 23 авг 2017, 09:48 ]
Заголовок сообщения:  Re: LTArmada

Pingvin писал(а):
Причёсываю код помаленьку.
Добился, казалось, невозможного - всего 3 предупреждения при сборке! :)
....
....
...Одно тоже непонятное, так как все что надо подключено, а компилятор говорит - не задекларирована функция....


Возможно функция есть в *.с-файле, но не задекларирована в *.h

Автор:  Pingvin [ 23 авг 2017, 10:32 ]
Заголовок сообщения:  Re: LTArmada

Pacifist писал(а):
Pingvin писал(а):
Причёсываю код помаленьку.
Добился, казалось, невозможного - всего 3 предупреждения при сборке! :)
....
....
...Одно тоже непонятное, так как все что надо подключено, а компилятор говорит - не задекларирована функция....


Возможно функция есть в *.с-файле, но не задекларирована в *.h

Она как то хитро задекларирована
Код:
_PTR    _EXFUN(memmem, (const _PTR, size_t, const _PTR, size_t));


рядом же
Код:
_PTR    _EXFUN(mempcpy,(_PTR, const _PTR, size_t));


на mempcpy не ругается.

Автор:  Pingvin [ 24 авг 2017, 10:12 ]
Заголовок сообщения:  Re: LTArmada

Я возвращаюсь к тем скриптов.
Есть задумка: пишем скрипты-обработчики разных событий (язык можно придумать самим).
Скрипты компилятся в байт-код, который скидываем на SD карту.
Отводим в оперативке массивы под это безобразие - благо оперативки 64 кило, хватит.
В самой прошивке при включении загружаем с SD карты байт-коды в эти массивы и обработчики событий при наступлении таковых выполняют свой байт-код (из оперативки).

Причешу исходники, буду думать в этом направлении.

Автор:  Pacifist [ 24 авг 2017, 23:55 ]
Заголовок сообщения:  Re: LTArmada

Сделайте как в Qt сигнально-слотовый механизм. Слоты заранее определены и зависят от железа (те же таймеры, ИК приёмник, выходные GPIO и т.д.).
А в данных "программы устройства" задавайте им правила что с чем соединить :)

Автор:  Pingvin [ 25 авг 2017, 10:15 ]
Заголовок сообщения:  Re: LTArmada

Pacifist писал(а):
Сделайте как в Qt сигнально-слотовый механизм. Слоты заранее определены и зависят от железа (те же таймеры, ИК приёмник, выходные GPIO и т.д.).
А в данных "программы устройства" задавайте им правила что с чем соединить :)

Совершенно верно.

Страница 101 из 109 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/