реклама на сайте
подробности

 
 
> Программное разделение, GSM и GPS
rat
сообщение Jul 11 2013, 10:49
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 497
Регистрация: 9-06-05
Из: Новосибирск
Пользователь №: 5 852



День добрый. В устройстве (трекер) есть несколько программных единиц: работа с GSM, GPS, опросы IO и т.д. Как правильно разделять работу с GSM и GPS в контроллере? Приоритетами прерываний, по времени? Кто как решает эту задачу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CADiLO
сообщение Jul 11 2013, 13:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



Хм.... Это что ж туда запихивать то собрались ? Операционку ???

Народ по сей день на PIC18 да PIC24 с 32К флеша нормальные железки делает....


--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 11 2013, 15:22
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(CADiLO @ Jul 11 2013, 16:47) *
Хм.... Это что ж туда запихивать то собрались ? Операционку ???

Народ запихивает.




Цитата(CADiLO @ Jul 11 2013, 16:47) *
Народ по сей день на PIC18 да PIC24 с 32К флеша нормальные железки делает....



Видел железки с 128/256/512 КБ флеша, но что можно на 32КБ сделать? Только printf туда и поместится и ничего больше...
Go to the top of the page
 
+Quote Post
alexdos
сообщение Jul 11 2013, 19:35
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(_Артём_ @ Jul 11 2013, 18:22) *
Видел железки с 128/256/512 КБ флеша, но что можно на 32КБ сделать? Только printf туда и поместится и ничего больше...

Много можно.
Если у Вас "printf туда и поместится и ничего больше..." вовсе не означает что у других та же ситуация. Согласен с CADiLO Народ по сей день на PIC18 да PIC24 с 32К флеша нормальные железки делает, добавлю что и на STM32.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 11 2013, 20:11
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(alexdos @ Jul 11 2013, 22:35) *
Народ по сей день на PIC18 да PIC24 с 32К флеша нормальные железки делает

И какой функционал у таких железок?

Если нужно GSM/SMS/CSD/GPRS/...GPS + ещё чего-нибудь, то 32К запросто может не хватить. Только если очень простые функции нужны тогда хватит.
Go to the top of the page
 
+Quote Post
sobr
сообщение Jul 12 2013, 00:00
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Цитата(_Артём_ @ Jul 12 2013, 03:11) *
И какой функционал у таких железок?

Если нужно GSM/SMS/CSD/GPRS/...GPS + ещё чего-нибудь, то 32К запросто может не хватить. Только если очень простые функции нужны тогда хватит.

Все, что вы перечислили, плюс работа с сетью различных устройств через юарт по своему протоколу, впритык влезло в 32К. Я считаю, что это очень не мало. В вашем случае (влезает только printf) надо просто взять printf поменьше. sm.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 12 2013, 04:54
Сообщение #7


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(sobr @ Jul 12 2013, 03:00) *
Все, что вы перечислили, плюс работа с сетью различных устройств через юарт по своему протоколу, впритык влезло в 32К. Я считаю, что это очень не мало. В вашем случае (влезает только printf) надо просто взять printf поменьше. sm.gif


Работа ссетью в 32 кБ?
Это будет что угодно но не сеть.


Цитата(firew0rker @ Jul 12 2013, 05:22) *
Мне удалось реализовать анемометр на PIC16F1827 c его 4Kслов Flash.

Описание Анемометра с передачей данных по каналу GSM...


Получить данные с АЦП и послать по AT командам в модуль это и 1 Kбайт не займет.
А чем заполнены остальные 3 кБ?
Почти уверен, что тем самым printf. wink.gif
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Jul 12 2013, 05:33
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Цитата(AlexandrY @ Jul 12 2013, 11:54) *
Получить данные с АЦП и послать по AT командам в модуль это и 1 Kбайт не займет.
А чем заполнены остальные 3 кБ?
Почти уверен, что тем самым printf. wink.gif

Много занимают строковые константы АТ-команд в виде retlw. Компилятор генерит громоздкий код для арифметики с типом long и, что странно, функции _delay.
Не использую printf, он не влез. Пришлось писать функции типа таких:
Код
//converts val to string of width digits.
//returns pointer to 0-terminating of buf
//if width is less than neccessary, string will be truncated at left!
char *
utoaa(char * buf, unsigned val, unsigned char width)
{
    char        c;
    char *    cp;

    buf += width;
    cp = buf;
    *buf-- = 0;
    do {
        c = val % 10;
        val /= 10;
        if(c >= 10)
            c += 'A'-'0'-10;
        c += '0';
        *buf-- = c;
        width--;
    } while(val && width);
    while(width--) *buf-- = '0';
    return cp;
}

char *
itoaa(char * buf, int val, unsigned char width)
{
    if(val < 0) {
        *buf++ = '-';
        val = -val;
    }
    return utoaa(buf, val, width);
}

Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 12 2013, 06:17
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(firew0rker @ Jul 12 2013, 08:33) *
Много занимают строковые константы АТ-команд в виде retlw. Компилятор генерит громоздкий код для арифметики с типом long и, что странно, функции _delay.
Не использую printf, он не влез. Пришлось писать функции...


Дела не меняет. Весь ли printf использовался или по кускам, факт что стандартные библиотеки С-и и другие либы промежуточного слоя занимают большую часть кода.
И вот для действительно развитых M2M и IoT приложений легко прикинуть сколько надо памяти программ не вникая особенно в функциональность дивайса.
Так вот для работы с облачными сервисами только парсер JSON или или уж подавно XML может съесть до 100 кБ.

SMS и доморощенные серверы это все таки уже в прошлом. Чтобы продвигать сейчас такие примитивные решения продавцам надо платить в несколько раз больше чем разработчикам. Вопрос уже не технический.

И функционал GPS, GSM, IO разделять нужно исключительно средствами RTOS.
Кстати не меньше пары десятков килобайт тоже займет. wink.gif



Цитата(megajohn @ Jul 12 2013, 09:01) *
Есть такая замечательная рекламная картинка, которая показывает как кортексы уделывают 8-битники


Кортексы тоже друг другу не равны.
Скажем серия Kinetis умеет делать аппаратное усреднение отсчетов АЦП.
Т.е. еще сжать и последующий код той самой фильтрации.
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение Jul 12 2013, 14:25
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643



Цитата(AlexandrY @ Jul 12 2013, 10:17) *
Дела не меняет. Весь ли printf использовался или по кускам, факт что стандартные библиотеки С-и и другие либы промежуточного слоя занимают большую часть кода.


Не большую. Есть прибор на PIC18, 128кБайт. Из них C-библиотека:

printf (sprintf, snprintf, vsnprintf...): 4875 байт.
scanf (и всё относящееся): 1445 байт
qsort: 584 байта
malloc: 3437 байт
strdup: 82
strsep: 180
поддержка unicode: 1650
всякой мелочи на: 3414 байт
---------------------------------
Итого: 15667 байт или 1/8 часть прошивки.

Раскладка на PIC24 по-серьёзнее будет. C-библиотека с float и всем таким под 40кБайт. Библиотека там, правда, далека от идеала, если -legacy-c (dinkumware судя по внутренностям). А если без -legacy-c, то лучше и не пробовать ("ничего не работает" несмотря на малый размер).


Цитата(AlexandrY @ Jul 12 2013, 15:35) *
Интересное мнение. На каком опыте основано?
Какую RTOS применяли и для каких задач?


Никаких в embedded. Из разумных считаю что-то вроде eCOS, например. Но в типичный МК оно не очень-то лезет. Остальное -- ещё те поделки, почему -- см. ниже. Интересна nuttx, но не дошло пока.

Цитата
И сколько это "небольшое количество изолированных задач"?
50 задач, например, это много или мало?


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

Цитата
Потом с трудом представляю себе большое количество одновременно выполняемых задач которым бы не требовался свой стек.
Можете хоть умозрительный пример привести?


Это как раз проще простого. Если там что-то вроде конечных автоматов по технологии Шалыто или Protothreads -- таких задач может быть очень много. И в таком стиле можно написать любой код, на самом-то деле. Стек, разумеется, у них есть. Во временном владении и общий на всех.

Здесь есть одна закавыка, правда, на которую я указал: при достаточно большом количестве таких задач CPU будет очень много времени тратить на проверки условий переходов (если по технологии Шалыто) или проверки выполнения условий блокировки (Protothreads). И жизненно необходим становится планировщик, хотя в виде той же RTOS. Не чтобы вытеснение, или стек раздельный. Ни то, ни другое жизненно не необходимо. Чтобы знать когда какие задачи требуют запуска и не вычислять условия переходов вхолостую. И второй аспект, я на него тоже указал. Что в большом количестве задач найдутся и такие, которые занимают CPU на большое время, и такие, которые требуют быстрой реакции. И здесь уже нужно вытеснение и, как следствие, раздельные стеки.

Соответственно, как можно поступить. Большое количество задач (автоматов, protothreads, без стека) размещается в меньшем количестве "процессов" обладающих стеком. Размещение по принципу разной максимально допустимой задержки в обработке сообщения и по функциональному различию. И в каждом "процессе", со своим стеком, нужен механизм обработки очереди событий. Общий для всех "процессов" и задач. Вот это мне кажется хорошим вариантом. Но, к сожалению, доступные RTOS для МК не предполагают "событийно-ориентированного программирования". В частности почти все из них обладают заметной проблемой: невозможно ожидать наступления более одного события. Некоторые (TNKernel, например) имеют такую возможность -- флаги событий, их количество весьма ограничено и требует много ручной работы. Скорей следовало бы для RTOS оставить вытесняющую многозадачность и в дополнении к RTOS нужна библиотека обработки очереди событий...

Потом ещё один вопрос, обычно оставляемый без внимания. Для полноценной многозадачности библиотека C должна это поддерживать. Если мы используем newlib, например, это возможно (библиотека явно имеет поддержку многопоточности). А если библиотеку dinkumware, то скорей нет. Проблемы начинаются с errno, который не должен быть переменной в таком случае. С функциями вроде strtok. Это из очевидного. Из не очевидного: нет гарантий, что какие-либо функции не хранят в себе статических переменных. Для ряда функций (strtok) это очевидно, для остальных -- без гарантий.

И, наконец, ещё момент. RTOS должна давать что-то вроде Thread Local Storage, дабы иметь возможность различать данные конкретного потока (процесса, задачи). Либо полностью изолировать процессы (как это делает nuttx). Но многие популярные RTOS для МК не изолируют процессы (скорей, это аналог использования потоков при программировании для ПК) и при этом не имеют TLS. Как следствие -- невозможна параллельная работа C-библиотеки (нельзя различить errno в разных потоках). Как следстие этого -- вообще нельзя использовать математические функции (из math.h), которые могут возращать ошибки в errno. Это лишь один пример из многих.

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


Цитата(sobr @ Jul 12 2013, 16:54) *
Не с сетью, а с сетью устройств. Их может быть до двух десятков. Если вам не нравится слово "сеть" в данном контексте, назовите стайкой.


Если изделия "Вега-Абсолют" ваши -- то вызывает уважение. Хотя, честно говоря, не понятно как можно всё упихнуть в такой маленький контроллер (PIC18F65J15: 48КБайт ПЗУ, 2КБайт ОЗУ) без жёсткого ассемблера, вряд ли оправданного экономически (за спиной спрашивают когда будет проект готов, а я им про ассемблер, ага). С другой стороны там модем Sierra Wireless WMP100 и всё может быть (в его прошивке).

Сообщение отредактировал Frolov Kirill - Jul 12 2013, 15:12
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 12 2013, 15:53
Сообщение #11


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Frolov Kirill @ Jul 12 2013, 17:25) *
... Никаких в embedded.
... Интересна nuttx, но не дошло пока. ...


Т.е. опыта нет, но есть твердые убеждения. wink.gif

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


А библиотеки C-и без внимания никто не оставляет.
Есть такой процесс при написании софта под RTOS - называется retargeting. Описывается в компиляторах. Это адаптация стандартных библиотек под среду исполнения, в частности под RTOS.
Там все специфицировано. Волноваться не стоит. biggrin.gif





Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- rat   Программное разделение   Jul 11 2013, 10:49
- - megajohn   очередь сообщений. к примеру одной задаче нужно оп...   Jul 11 2013, 11:06
- - _Артём_   Цитата(rat @ Jul 11 2013, 13:49) Как прав...   Jul 11 2013, 11:50
- - molecul   Цитата(rat @ Jul 11 2013, 14:49) День доб...   Jul 11 2013, 12:39
- - CADiLO   Не всегда удобно - GSM можно уложить спать или отк...   Jul 11 2013, 12:52
|- - _Артём_   Цитата(CADiLO @ Jul 11 2013, 15:52) Так в...   Jul 11 2013, 13:30
|||- - megajohn   Цитата(firew0rker @ Jul 12 2013, 09:33) К...   Jul 12 2013, 06:01
|||- - alexdos   Сколько программистов, и столько мнений. И это х...   Jul 12 2013, 06:44
|||- - Frolov Kirill   Цитата(AlexandrY @ Jul 12 2013, 19:53) Т....   Jul 15 2013, 16:55
|||- - AlexandrY   Цитата(Frolov Kirill @ Jul 15 2013, 19:55...   Jul 15 2013, 19:40
|||- - sobr   Цитата(AlexandrY @ Jul 16 2013, 02:40) В ...   Jul 16 2013, 02:16
|||- - Frolov Kirill   Цитата(AlexandrY @ Jul 15 2013, 23:40) Се...   Jul 16 2013, 12:05
|||- - AlexandrY   Цитата(Frolov Kirill @ Jul 16 2013, 15:05...   Jul 17 2013, 06:28
||- - sobr   Цитата(AlexandrY @ Jul 12 2013, 11:54) Ра...   Jul 12 2013, 12:54
||- - AlexandrY   Цитата(sobr @ Jul 12 2013, 15:54) Не с се...   Jul 12 2013, 13:11
||- - sobr   Цитата(AlexandrY @ Jul 12 2013, 20:11) Да...   Jul 12 2013, 14:49
|- - firew0rker   Цитата(CADiLO @ Jul 11 2013, 20:47) Хм......   Jul 12 2013, 02:22
- - Harbinger   На MSP430 о 60К - тоже. С операционкой. Для совсем...   Jul 11 2013, 15:21
- - _Pasha   Качества софта о 32кбайтах определяется архитектур...   Jul 11 2013, 17:23
|- - Harbinger   Цитата(_Pasha @ Jul 11 2013, 20:23) В дан...   Jul 11 2013, 18:22
- - Aner   Используйте STM32F1xx, ...STM32F4xx и все проблемы...   Jul 11 2013, 20:20
- - ArtemKAD   ЦитатаИ какой функционал у таких железок? Страниц ...   Jul 11 2013, 21:20
- - rat   Проект на STM32F105, иногда подвисает, судя по все...   Jul 12 2013, 08:13
- - Aner   не наблюдал такое, разве что в коде недосмотрели ....   Jul 12 2013, 09:11
|- - AlexandrY   Цитата(Aner @ Jul 12 2013, 12:11) не набл...   Jul 12 2013, 09:21
- - Aner   Так это года как 3-4 назад было выявлено с первыми...   Jul 12 2013, 09:36
|- - rat   Цитата(Aner @ Jul 12 2013, 16:36) Так это...   Jul 12 2013, 09:42
|- - Aner   QUOTE (rat @ Jul 12 2013, 12:42) А можно ...   Jul 12 2013, 12:49
- - Frolov Kirill   Цитата(rat @ Jul 11 2013, 14:49) День доб...   Jul 12 2013, 10:13
|- - AlexandrY   Цитата(Frolov Kirill @ Jul 12 2013, 13:13...   Jul 12 2013, 11:35
- - vassabi   Цитата('Frolov Kirill')Вы новичёк и недоуч...   Jul 12 2013, 11:00
- - Aner   Вот привыкли все к LwIP и нормальных стеков в глаз...   Jul 12 2013, 12:56
- - ArtemKAD   Цитата, не понятно как можно всё упихнуть в такой ...   Jul 12 2013, 14:43
|- - Frolov Kirill   Цитата(ArtemKAD @ Jul 12 2013, 18:43) С ж...   Jul 12 2013, 14:53
|- - sobr   Цитата(Frolov Kirill @ Jul 12 2013, 21:53...   Jul 12 2013, 15:21
- - ArtemKAD   ЦитатаИ с ассемблерами в 8кБайт дело обстоит так ж...   Jul 12 2013, 16:49
- - zöner   Цитатаесть несколько программных единиц: работа с ...   Jul 15 2013, 17:18
|- - Aner   QUOTE (zцner @ Jul 15 2013, 20:18) распар...   Jul 15 2013, 18:35
- - ArtemKAD   ЦитатаТак вот в мире PC не пытаются строить програ...   Jul 16 2013, 22:13
- - rat   Вопрос в продолжение темы: прошу общих рекомендаци...   Aug 7 2013, 03:30
- - Falkon_99   Писали про UART, DMA - рулит, и забыть про прерыва...   Aug 7 2013, 09:04
- - =F8=   Цитата(rat @ Aug 7 2013, 06:30) Вопрос в ...   Aug 7 2013, 10:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 06:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01531 секунд с 7
ELECTRONIX ©2004-2016