seismostation on cc3200 ucontroller
-
Работа программы переписана для работы на FreeRTOS
-
Изменен протокол на новый
-
Измерены размеры Кучи и стека в файле linker.cmd
-
Уменьшил размер кучи и памяти под буферы в RTOS. Размер кучи теперь 65535 Байт
-
Размер буфер под пинг или понг - 24000 байта максимум.
-
Перекомпилированы библиотеки fat_fs rtos и др.
-
Добавил поддержку WiFi - пока только функции подключения к AP
-
Добавил команду RESET_MCU
-
Сделал по прерыванию - собирает 4 данных только потом отправляет
-
В ini сделал размер буфера стека 2048 - было в 2 раза меньше - могло вызвать ошибку - размер файла не должен быть больше 2к!!!
-
изменил структуру каталогов - разбил по папкам: очень много файлов, неудобно.
-
Изменил utils.h/utils.c на userfunc.* - иначе конфликтовали названия с системными файлами
-
Lобавил расчет углов, но драйверы микросхем для сс3200 пока не написаны - не работает плата
-
Версию поменял на 5
-
Изменил названия файлов во избежании конфликтов с системными: spi, udma и пр.
-
Сделал децимацию "всегда" на 8. т.е для получения частоты 250 - запускаем на 2 кГц и прореживаем.
-
убрал из прерывания АЦП массив данных на стеке, перенес в статическую память.
-
Создаются объекты, который занимаются обработкой данных
-
Изменил ads131.c - фильтрация/децимация по 8-ми точкам.
-
В прерывании только сбор данных! 21 Вернул ads131.c - в прерывании обработка данных, иначе сбоит прием/передача!
-
Сделал один файл для всех сенсоров, которые сидят на шине twi (i2c) - нет смысла для каждой микросхемы создавать отдельную задачу. Опрос проводится последовательно, раз в несколько секунд будет достаточно.
-
В файле TWI.c создал объект блокировки, пронаблюдать за созданием/удалением - возможна ошибка, так как объект удаляется внутри неудаленной задачи
-
Поставил в UART размер приемного FIFO 2/8. Т.е. 4 байта
-
Убрал delay_ms и заменил на TaskDelay в конце каждой задачи
-
Заменил подсчет наносекунд в timertick.c
-
Уменьшил размер кучи и буферов ping-pong до 0x4000!
-
Так как появлся нормальный процессор - увеличил кучу до 64к. Для Ping-Pong сразу выделяется буфер 24000 байта
-
Сделал буферы статические для Ping-pong. Проверяю.
-
Сделал поток для заполнения кольцевого буфера - буфер заполняется не в прерывании
-
Выключение ненужных каналов ADS131
-
Добавил установку битов в GPS_STATE_t
-
Добавил команды управления SD картой: картридер и CPU
-
Максимальная длина строки в ini файле - 128 символов
-
Убрал "тестовый режим", так как он не использовался
-
Исправлена ошибка сенсоров - статусы не были готовы, а данные уже читалсиь
-
Cоздаю 1 раз объекты в ads131.c - иначе память фрагментируется и исчерпывается из-за этого! 37-a. Exception - невыровненный memcpy в модуле circbuf.c - в функции ADS131_get_pack->cb_read если включен TWI и SD карта вылетает на 75 элементе elem->start (75) - исправил
-
Инициалитзация кольцебуфера в START
-
Поменял simple timer с TIMERA1 на TIMERA3
-
Инициализация обмена по порту сразу - если нет WiFi ранее завершалось ошибкой
-
Добавил обнаружение файла lock.fil - для запуска по часам
-
В любом режиме определить имя станции и параметры подключения
-
Добавил функцию select в ожидании данных сокета для выхода из ожидаия, в случае разрыва соединения.
-
Переписал синхронизацию. Нужно понаблюдать в какой момент синхронизировать.
-
Записываю свой IP адрес в исходящем пакете поле device_id в структуре DEV_ID_h
-
Переделываю заголовки по новому требованию. Размер пакета с данными уменшен до 160 байт
-
Поменял NO_DATA на EMPTY. Команда RESET_MCU идет последней
-
Изменил поля структур, не проверено пока.
-
Написал тест по UDP - исправил получение по этому протоколу (была проверка ver, которая теперь меняется)
-
Объединил в select 2 сокета
-
Select работает криво - сделал 2 задачи для 2-х сокетов. Нужно проверить пересоединение при потере связи. одинаковый порт берется из задания на SD карте. UDP и TCP порты не перекрываются.
-
Переключение SD карты при передергивании USB кабеля
-
? Добавил ожидание while (Osi_twi_obj_lock() != OSI_OK); в sdreader.c - может привести к зависанию?
-
Отждельно UDP и TCP порты2
-
Убрал частоту АЦП 125 - увеличил sample_rate на единицу, чтобы не переделывать весь код: par.sps = (ADS131_FreqEn) adcp.sample_rate + 1; /* частота - будет на 1 больше! */
/* В командном режиме отмечаем что частота на ступень меньше - нет 125! */
pack->adc_freq = adc_pars_struct.sps_code - 1; /* частота дискретизации */
par->sample_rate -= 1;/* на 1 меньше */
- Добавил board_reset(); /* Сбросим плату */ - при заверение Normal
- Добавил сброс платы при переключении кабеля к 52-му
- Не запускать сетевые задачи если имя сети "None". Только COM порт. Сейчас нет WiFi сети
- Добавил временно TickHook - для миллисекундных таймаутов. Работает тока во FreeRTOS!!! файл timertick.c
- Отключение USB кабеля проверяется в потоке для сенсоров каждую секунду.
- Сбросим автомат при приеме COM порта, если длина не соответсвует команде (START_PREVIEW и WRITE_PARAMS)
- Если длина в команде не соответвует команде - сброс автомата приема в NET (START_PREVIEW и WRITE_PARAMS)
- Упорядочить приоритеты прерываний. Определить более высокоприоритетные - таймер и АЦП ADS131 - LVL_1 DMA - LVL_1 PPS - LVL_2 - Прерывания PPS MTimer - LVL_3 - Главный таймер, считает время STimer - LVL_4 - Простой таймер, считает время пока не подстроен главный таймер COM - LVL_5 - Прерывания по COM порту
- Добавил подсчет дрифта: pAdc_hdr->Drift = timer_get_drift(); timertick.c - проверить эту функцию
- Выходить с ошибкой если время старта и финиша "ушло". Перезагрузка! Если нет хотя бы 10 минут на запись! - сбросим плату
- Подавать разные PGA на каждый канал при работе CMD
- PGA - подается прямое значение при командном режиме
- Убрал отладочные сообщения: "Enter task" и "leave task"
- Убрал отладочные сообщения при настройке АЦП - теперь пишутся в log
- PGA в режиме Normal на 4 канала
- Имя платы задается в командном файле как GNS'НОМЕРПЛАТЫ'._uart._tcp.local через mDNS
- При отсылке сигнала в ver вставлять последовательно увеличивающиеся значения
- Убрал функцию ADS131_get_data() - просто вызывала ADS131_get_pack()
- pTxBuf->hdr.ver увеличивается в preview и сбрасывается при стопе измерений
- Упорядочил приоритеты задач. Проверить, повысить вверх если необходимо!
- Отладка идет только когда остановлены измерения
- Поставил таймаут на прием по COM порту. 10 мс-прием заканивается или если длинная команда или если команда не завершилась
- в РЕЖИМЕ normal - оставил отладку
- Добавил команду - выдать счетчики обмена
- Добавил очистку буферов в com_init()
- Значение датчика напряжение увеличил втрое
- Вывожу значение дрифта в тиках в поле tAcc
- Моргаю битом self_test_on во время подстройки генератора по GPS
- Исправил ошибки PGA - не выводилось значение каждого канала
Ошибки
- В UART не снимается ошибка OVERRUN! Если попадает в обработку этой ошибки - то ее невозможно снять вообще!
- При перезагрузке выдергиванием кабеля, шина I2C остается в непонятном состоянии и устойства на ней не работают. Помогает только полное обесточивание платы.
Необходимо!
- Проверить синхронизацию часов. Фаза PPS подстраивается правильно, но само время не проверено
- поставить таймаут на чтение/запись/посылка команды на SD карту иначе при невозможности записать блок - задача подвисает. Должно возвращаться с ошибкой!
- Так как нет часов RTC - необходимо брат время с модуля GPS. Как только разберемся в правильной разводке GPS модуля. Сейчас при включении время GPS идёт с 1970 года
- Проверить значение датчика влажности