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 провода и красный светодиод вместо ИК
|
Автор: | 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/ |