Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Вывод большого количества данных через uart

Пн мар 05, 2018 07:21:40

Здравствуйте! Возникла такая потребность выводить множество переменных через юарт,последовательно,друг за другом. Вопрос : как наиболее рационально организовать хранение данных? Просто куча переменных,или структура,или массив? Но в дальнейшем все эти переменные будут меняться,и будет менятся их количество. Как все организовать правильно,что бы в дальнейшем можно было изменить как саму переменную,так и их количество, и весь блок разом отправить в юарт, независимо от его размера? Спасибо за советы

Re: Вывод большого количества данных через uart

Пн мар 05, 2018 09:30:08

Очевидно же, напрашивается структура. И меняй что хочешь, и размер известен.

Re: Вывод большого количества данных через uart

Пн мар 05, 2018 16:22:20

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

Re: Вывод большого количества данных через uart

Пн мар 05, 2018 16:37:22

Думаю, фраза "в дальнейшем" означает добавление в программу.

Re: Вывод большого количества данных через uart

Пн мар 05, 2018 17:45:56

Я имел ввиду что размер будет изменятся в процессе отладки,и возможно во время дальнейшей модификации кода

Re: Вывод большого количества данных через uart

Пн мар 05, 2018 19:43:21

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

Re: Вывод большого количества данных через uart

Пн мар 05, 2018 20:29:06

Да это все понятно. Просто есть несколько переменных a b c...n которые отвечают за свои параметры. В процессе отладки их будут больше. Вот я и спрашиваю как их лучше упаковать,что бы удобно было их изменять,и по команде отправить в юарт

Re: Вывод большого количества данных через uart

Пн мар 05, 2018 22:25:41

vovik15 писал(а):Вот я и спрашиваю как их лучше упаковать,что бы удобно было их изменять,и по команде отправить в юарт

Аlex писал(а):Очевидно же, напрашивается структура.

Чем не нравится ?

Re: Вывод большого количества данных через uart

Пн мар 05, 2018 23:07:17

Просто есть несколько переменных a b c...n которые отвечают за свои параметры. В процессе отладки их будут больше.

Судя по ээээ "ушам" - речь идёт об изобретении очередной "трассировки для нищих", да? Если так - то само собой напрашивается первейший пункт-вопрос отчего-то не прозвучавший в вашем ТЗ - кто будет эти "твиты" читать? Если хуманоид-отладчик в терминалке - что может быть лучше CR-терминированных фреймов? <1/2/3-символьный префикс>:<значение>CR - и всё в шляпе, кроме траты ресурсов МК на форматирование. Если с приёмного конца програмка висит или другой МК - ещё проще - заводим массив структур { 1|2 -байта id; поле типа; union для всех возможных типов данных }. При отсылке берём начало массива и отстукиваем sizeof(массив) байтов наружу - и пусть писюшный программер со своими бесконечными гигагерцами парсится. Если повезёт и endiannes не совпадёт на устройстве и компе - прокачаем свои скилы в области байт-свапинга.

PS: Во втором случае, кстати, про #pragma pack не забудьте, или что там у вас заместо него. Причём на обоих коммуникационных "терминалах".

Re: Вывод большого количества данных через uart

Вт мар 06, 2018 07:25:36

Это будет прибор,который конфигурирования с помощью ПК. И по его запросу должен будет передавать все свои параметры назад. Такое вот тз

Re: Вывод большого количества данных через uart

Ср мар 07, 2018 17:33:00

При таких аппетитах неплохо бы узнать что такое "сериализация" и "десереализация" (переменных/структур/объектов/...) и если охота расширяемое нечто - про протокол лучше все-таки подумать заранее. На правах идеи можно что-то типа TLV, например. Да, потребуется некая конверсия из формата в проводе в то что в структурах в программе лежит. Но это может быть достаточно просто и быстро, если об этом подумать. Заодно у компьютера, или кто там на другой стороне UART может быть своя идея насчет типов данных и их размеров и даже endianess, уповать что они совпадут 1 в 1 - моветон и чревато приколами.

Например посмотрите как IE (information elements) в Wi-Fi сделаны. В базовом виде все довольно просто. Но постепенно там весьма серьезно расширили возможный ассортимент сведений передаваемых в служебных пакетах. Смысловой аналог чего-то такого не сильно сложно накодить.

Re: Вывод большого количества данных через uart

Ср мар 07, 2018 21:21:28

Я вам скажу больше, в планах обновлять прошивку мк,из управляющей программы на пк,через бутлоадер. Бут хочу взять готовый от ардуино.Проанализировать протокол обмена,и написать точно такой же обмен

Re: Вывод большого количества данных через uart

Чт мар 08, 2018 16:24:07

Ничему не противоречит. Я себе тоже бут корябаю, правда для STM32. Изначально не планировалось, но я не смог удобно раскидать лапки под требования STшного бута, значит придется делать свой. Правда протокол я сделаю как удобнее мне и как лучше работает :).

Re: Вывод большого количества данных через uart

Вс мар 25, 2018 21:38:18

Про самодельный бутлоадер и транспортный протокол обычного примитив-терминала в ПК с загрузчиком INTELhex8 файла:
viewtopic.php?p=3167597#p3167597
Модифицируем под требуемый МК и работаем.
8)

Re: Вывод большого количества данных через uart

Ср июн 27, 2018 12:23:50

Я за структуры), сам их использую, объявляю typedef struct любой сложности, потом объявляю указатель данного типа на буфере передачи и заполняю структуру... милое дело. В пределах одного компилятора до неприличия упрощает инкапсуляцию. Но... на С на ПК я на практике делаю десериализацию используя на С структуры того же типа, только с атрибутом packed. Канает, хотя и не совсем правильно так делать.

Но стоило поручить десериализацию программисту на Дельфи... вот ему не сладко...
По команде через UDP прибор выплевывает свои настройки, и потом их назад отправляю. По сути без разницы через что - LAN или UART.


Месяц как облизывался на бутлоадер.. мне его жизненно не хватало для завершения концепции. и вот сегодня типа торжество, худо-бедно, но запустил. И хотя вопросы по ходу реализации были самые идиотские, и сейчас еще остались, но написал его сам полностью, чего и Вам желаю.
Ответить