|
|
  |
Программное разделение, GSM и GPS |
|
|
|
Jul 12 2013, 02:22
|
Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716

|
Цитата(CADiLO @ Jul 11 2013, 20:47)  Хм.... Это что ж туда запихивать то собрались ? Операционку ???
Народ по сей день на PIC18 да PIC24 с 32К флеша нормальные железки делает.... Мне удалось реализовать анемометр на PIC16F1827 c его 4Kслов Flash. Описание Анемометра с передачей данных по каналу GSM 1. Замеры. - скорость ветра - направление ветра - температура - расстояние от датчиков до Анемометра до 50м. 2. Регулируемые параметры 2.1. локально, записываются на SIM КАРТУ - Телефон админа (с которого могут производиться настройки) - Параметры соединения с оператором GSM по каналу GPRS - Параметры для доступа к WEB – серверу 2.2. дистанционно SMS-сообщениями - Перезагрузка устройства (комманда) - Интервал накопления оценки 3. Выводимые данные на сервер 3.1. Скорость ветра - Максимальная за интервал - Средняя за интервал - Минимальная за интервал 3.2. Температура средняя за интервал
|
|
|
|
|
Jul 12 2013, 04:54
|

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

|
Цитата(sobr @ Jul 12 2013, 03:00)  Все, что вы перечислили, плюс работа с сетью различных устройств через юарт по своему протоколу, впритык влезло в 32К. Я считаю, что это очень не мало. В вашем случае (влезает только printf) надо просто взять printf поменьше.  Работа ссетью в 32 кБ? Это будет что угодно но не сеть. Цитата(firew0rker @ Jul 12 2013, 05:22)  Мне удалось реализовать анемометр на PIC16F1827 c его 4Kслов Flash.
Описание Анемометра с передачей данных по каналу GSM... Получить данные с АЦП и послать по AT командам в модуль это и 1 Kбайт не займет. А чем заполнены остальные 3 кБ? Почти уверен, что тем самым printf.
|
|
|
|
|
Jul 12 2013, 05:33
|
Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716

|
Цитата(AlexandrY @ Jul 12 2013, 11:54)  Получить данные с АЦП и послать по AT командам в модуль это и 1 Kбайт не займет. А чем заполнены остальные 3 кБ? Почти уверен, что тем самым printf.  Много занимают строковые константы АТ-команд в виде 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); }
|
|
|
|
|
Jul 12 2013, 06:17
|

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. Кстати не меньше пары десятков килобайт тоже займет. Цитата(megajohn @ Jul 12 2013, 09:01)  Есть такая замечательная рекламная картинка, которая показывает как кортексы уделывают 8-битники Кортексы тоже друг другу не равны. Скажем серия Kinetis умеет делать аппаратное усреднение отсчетов АЦП. Т.е. еще сжать и последующий код той самой фильтрации.
|
|
|
|
|
Jul 12 2013, 10:13
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643

|
Цитата(rat @ Jul 11 2013, 14:49)  День добрый. В устройстве (трекер) есть несколько программных единиц: работа с GSM, GPS, опросы IO и т.д. Как правильно разделять работу с GSM и GPS в контроллере? Приоритетами прерываний, по времени? Кто как решает эту задачу? Не понял вопроса. Звучит он скорей "какова архитектура программ выполняющих параллельно множество задач". Вообще ответ есть в статье "Embedded system" в Wikipedia. Подходов несколько, суть одна. Последовательно исполняются разные программные модули обслуживающие разные задачи. Вопрос, чем эта последовательность определяется. От программиста (super/big loop), до RTOS. Не обязательно RTOS с вытеснением, можно и кооперативная. Впрочем и RTOS не обязательна. Если RTOS (с отдельными стеками для каждой задачи) нет, то отдельные модули строятся так, что в какой-то переменной хранят своё состояние (google://Шалыто), например. Может быть событийно-управляемая архитектура, когда возникновение каких-либо событий приводит к запуску их обработчиков (в которых могут быть те же автоматы): это лучше чем big loop, потому, что если последний достаточно big, то слишком много процессорного времени тратится на ненужные проверки условий и, кроме того, с big loop трудно перевести процессор в спящий режим когда не нужно. Вообще если параллельных задач очень много, то подход с RTOS не реализуем без костыпей и подпорок -- не хватит памяти (стек и т.п.) на каждую. Всё сведётся скорей к событийно-ориентированному программированию (именно такая модель применяется в GUI, где тоже есть множество относительно независимых "задач" работающих параллельно). А RTOS скорей полезна для создания небольшого количества изолированных задач, причём именно вытесняющая RTOS. В основном ввиду возможности вытеснения. Т.к. рано или позвно в событийно-ориентированной архитектуре найдутся задачи требующие малого времени реакции и другие, обрабатываемые слишком медленно. Цитата(_Артём_ @ Jul 11 2013, 19:22)  Видел железки с 128/256/512 КБ флеша, но что можно на 32КБ сделать? Только printf туда и поместится и ничего больше... Вы новичёк и недоучка, вам сейчас объяснят. Профессионалы пишут на ассемблере, а C для ламиров. Цитата(megajohn @ Jul 12 2013, 10:01)  Есть такая замечательная рекламная картинка, которая показывает как кортексы уделывают 8-битники Этот ваш кортекс для ламиров и недоучек ниасиливших ассемблер из 35 простых инструкций, которые легко выучить ©
|
|
|
|
|
Jul 12 2013, 11:00
|

Частый гость
 
Группа: Свой
Сообщений: 156
Регистрация: 18-02-13
Из: Киев
Пользователь №: 75 678

|
Цитата('Frolov Kirill') Вы новичёк и недоучка, вам сейчас объяснят. Профессионалы пишут на ассемблере, а C для ламиров. Цитата('Frolov Kirill') Этот ваш кортекс для ламиров и недоучек ниасиливших ассемблер из 35 простых инструкций, которые легко выучить © О, пришел Frolov, ща начнется (уже началось)... Kirill, у вас по ходу наклонности проповадника. Никогда не думали, что другие тоже умеют "программировать", а некоторые даже лучше вас и, самое главное, не так как вы?
Сообщение отредактировал vassabi - Jul 12 2013, 11:13
|
|
|
|
|
Jul 12 2013, 11:35
|

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

|
Цитата(Frolov Kirill @ Jul 12 2013, 13:13)  Вообще если параллельных задач очень много, то подход с RTOS не реализуем без костыпей и подпорок -- не хватит памяти (стек и т.п.) на каждую. Всё сведётся скорей к событийно-ориентированному программированию (именно такая модель применяется в GUI, где тоже есть множество относительно независимых "задач" работающих параллельно). А RTOS скорей полезна для создания небольшого количества изолированных задач, причём именно вытесняющая RTOS. Интересное мнение. На каком опыте основано? Какую RTOS применяли и для каких задач? И сколько это "небольшое количество изолированных задач"? 50 задач, например, это много или мало? Потом с трудом представляю себе большое количество одновременно выполняемых задач которым бы не требовался свой стек. Можете хоть умозрительный пример привести?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|