Перейти к содержанию
    

andrewlekar

Участник
  • Постов

    836
  • Зарегистрирован

  • Посещение

Весь контент andrewlekar


  1. Поставил на ночь точно такой же девайс с той же самой антенной GPS/GLONASS, но с модулем L70. Результаты показывает значительно симпатичнее. Вот 2 скриншота. Обратите внимание на масштаб карты для L76.
  2. Нет, не на проводочках. Детальный лог может на днях получится снять: GPGGA и GNRMC будет достаточно? Вот у меня подозрение, что из-за размеров какой-то фильтр просто убрали...
  3. Детального лога нет, потому что поставили чип в уже готовое устройство. Сводный лог показывает, что внезапно у прибора появилась скорость порядка 10 узлов, потом высота над уровнем моря стала опускаться примерно на 10 метров в секунду. Количество спутников менялось от 8 до 6, иногда с выбросами в 0. Вот что записалось: ----- GPS PACKET START ----- DATE: 220713 TIME: 150507.000 LATITUDE: 5509.2174 INDEX: N LONGITUDE: 06121.0154 INDEX: E SATTELITE: 6 HDOP: 8.93 COURSE: 228.82 ALTITUDE: -371.6 SPEED: 30.88 STATE: 1000030000089200000000000000000 ----- GPS PACKET END ----- ~ GPRS_SendDataDirectMultiple: Send request ~ Send multiple ~ Protect_GPS_Data: New GPS point accquired ~ AdcHdl: ADC value is 890 ~ Now writing adc1 and adc2 command ~ I2C write: OK ~ CsqHdl: GSM level is 29 ~ AdcHdl: ADC value is 892 ~ Now writing adc1 and adc2 command ~ I2C write: OK ----- GPS PACKET START ----- DATE: 220713 TIME: 150516.000 LATITUDE: 5509.1504 INDEX: N LONGITUDE: 06120.9110 INDEX: E SATTELITE: 6 HDOP: 8.88 COURSE: 228.73 ALTITUDE: -513.4 SPEED: 33.89 STATE: 1000029000089200000000000000000 ----- GPS PACKET END -----
  4. Попробовали L76 с глонасс антенной (из МТ-Систем MT-Precision). Видим ужасные выбросы, скорости до 100 км/ч и высоты до -2000 м над уровнем моря. Антенна лежит плохо - на окне, но с EB-500/EB-230 таких выбросов в тех же условиях не наблюдали. Кто в курсе, в чём именно причина больших выбросов? Дело в антенне, в глонассе или в чипе?
  5. Вообще возможно. Но нужно ли?
  6. Вы про линукс для встраиваемых применений слышали вообще? Я предложить отладить проблему на компе, а потом тупо перенести на вашу плату, которая всё равно без линукса ни на что не годится. Только гигабита вы на ней не получите никогда.
  7. Поставьте комп с линуксом и 2-мя сетевыми платами. Создаёте мост br0. Добавьте в br0 eth0 и eth1. Посмотрите, работает ли так как задумывалось. Дальше надо гуглить, как с моста данные сливать для анализа - тут я не силён.
  8. Что делать? Ставить на плату линукс и поднимать соединение bridge. Должно удовлетворить условиям вашей задачи.
  9. С переводом тоже не понятно :) ICE - это чо? Ну нет на проце функциональности свитча, выкиньте этот проц и поставьте PHY свитча и функциональность появится. Или вы уже мёртво на этот проц подсели? Вот тут обсуждается реализация функциональности свитча: http://ubuntuforums.org/archive/index.php/t-1888419.html. Просто делается соединение мост и всё пересылается с интерфейса на интерфейс прозрачно. Посмотрел девайс по ссылке - да как раз PHY свитча. Суппорт, насколько я понял, отмазывается, что у них на отладке ничо не работает, а самим писать не стоит (видимо из-за геммороя с PRU). Я бы всё-таки посоветовал уйти от AM33xx на AM17xx например или ещё ниже, где MAC работает без всяких PRU. А, нет, TLK100 это просто PHY. На плате их пара стоит что ли?
  10. Можно поставить проц практически любой достаточно шустрый с RMII/MII, подцепить PHY свитча с нужным количеством портов, настроить зеркалирование данных на портах свитча и на MII проца.
  11. В общем да, обязательно ставить линукс для разработки. Винда, увы, не слишком для этого приспособлена: нет пакетного менеджера, нет мейка, нет стандартных линуксовых путей, нет баша. Почти весь опенсорс заточен под сборку мейком как минимум. Можно использовать cygwin или mingw, но это как секс в гамаке и линукс для разработчика - это практически стандарт.
  12. baud rate uart LPC2148

    Макросом дробный делитель сложновато считать. У меня кодом считается при необходимости: #ifdef USE_CALC_FRACTIONAL_DIVIDER //расчёт дробного делителя UART для минимизации процента ошибок. //19200 и 115200 позволяет использовать с 0 ошибкой для кварца 11,0592. static void uart_calc_divisors(uint_fast32_t baudrate, int *pDiv, int *pAddDiv, int *pMul, int *error) { uint_fast32_t uClk; uint_fast32_t calcBaudrate = 0; uint_fast32_t temp = 0; int mulFracDiv, dividerAddFracDiv; int diviser = 0; int mulFracDivOptimal = 1; int dividerAddOptimal = 0; int diviserOptimal = 0; int relativeError = 0; int relativeOptimalError = 10000; uClk = CPU_PERIPH_CLOCK >> 4; // div by 16 // In the Uart IP block, baud rate is calculated using FDR and DLL-DLM registers // The formula is : // BaudRate= uClk * (mulFracDiv/(mulFracDiv+dividerAddFracDiv) / (16 * (DLL) // It involves floating point calculations. That's the reason the formulae are adjusted with // Multiply and divide method. // The value of mulFracDiv and dividerAddFracDiv should comply to the following expressions: // 0 < mulFracDiv <= 15, 0 <= dividerAddFracDiv <= 15 for (mulFracDiv = 1; mulFracDiv <= 15;mulFracDiv++) { for (dividerAddFracDiv = 0; dividerAddFracDiv <= 15;dividerAddFracDiv++) { temp = (mulFracDiv * uClk) / ((mulFracDiv + dividerAddFracDiv)); diviser = temp / baudrate; if ((temp % baudrate) > (baudrate / 2)) diviser++; if ((diviser > 2) && (diviser < 65536)) { calcBaudrate = temp / diviser; if (calcBaudrate <= baudrate) relativeError = baudrate - calcBaudrate; else relativeError = calcBaudrate - baudrate; if ((relativeError < relativeOptimalError)) { mulFracDivOptimal = mulFracDiv; dividerAddOptimal = dividerAddFracDiv; diviserOptimal = diviser; relativeOptimalError = relativeError; if (relativeError == 0) break; } } } if (relativeError == 0) break; } *pDiv = diviserOptimal; *pAddDiv = dividerAddOptimal; *pMul = mulFracDivOptimal; *error = relativeOptimalError; } #else //!USE_CALC_FRACTIONAL_DIVIDER //UART baudrate formula : PCLK / (16 * UART1_MAIN_DIV * (1 + (FRACTIONAL_UART1_DIV / FRACTIONAL_UART1_MUL))) //For 11.0592 MHz , CCLK = 99532800, PCLK = 24883200 //Baudrate = 115200 #if (UART1_BAUDRATE == 115200) #define FRACTIONAL_UART1_DIV 1 #define FRACTIONAL_UART1_MUL 2 #define UART1_MAIN_DIV 9 #endif //Baudrate = 19200 #if (UART1_BAUDRATE == 19200) #define FRACTIONAL_UART1_DIV 0 #define FRACTIONAL_UART1_MUL 1 #define UART1_MAIN_DIV 81 #endif //wrong baudrate #if ((UART1_BAUDRATE != 115200) && (UART1_BAUDRATE != 19200)) #error "Wrong UART1 baudrate" #endif #endif //USE_CALC_FRACTIONAL_DIVIDER
  13. Во-первых, Вам нужно избавиться от суперлупа и воткнуть ртос. Это увеличит производительность Вашего процессора без изменения логики работы. Во-вторых, код с отправкой сообщений интересный. Мне нравится. В-третьих, я для себя тоже сделал многопоточную очередь сообщений - для того, чтобы перетаскивать обработку данных из контекста одного потока в контекст другого. Сразу скажу, на си это выглядит довольно криво, съедает избыточную память и в большинстве случаев очередь как таковая не требуется - создаётся очередь из одного элемента. Для того, чтобы не было переполнения при отсутствии приёмника сообщений, я сделал ограничение размера в конструкторе очереди. Для того, чтобы не было фрагментации памяти, память под очередь выделяется статически на этапе компиляции. Да, кстати, аналогичный Вашему код есть и у меня в проекте. По сути это защищенная от многопоточного доступа переменная. У нас вместо SendMessage и GetMessage используется WriteRegister и ReadRegister.
  14. А чо нельзя поприличнее PHY поставить и не заморачиваться с тактированием от проца? LAN8720 мы используем например.
  15. Надо, потому что внешний адрес будет у роутера, а вам надо до локалки достучаться. У вас в итоге 2 проблемы нужно решить: выяснить как пробить провайдерский нат или взять внешний айпи; перенаправить данные с аплинка роутера на заданный комп в локалке.
  16. У провайдера попросите внешний адрес. У роутера включите перенаправление портов или по UPnP пробейте. Без внешнего адреса будет сложно, потому что нужно, чтобы порты пробрасывало оборудование провайдера и вряд ли оно это делает по умолчанию.
  17. По-моему, webtoolkit - это вообще что-то левое. Самый прямолинейный способ - это взять apache или nginx и к нему прикрутить обработчики по CGI. Самый экономный способ - написать веб-сервер на Си. Там не очень сложно, если не требуется богатый функционал. Если вопрос о том, на чём делать веб морду, то это к веб разработчикам. Чё-нибудь типа JQuery вполне подойдёт.
  18. Да. Впрочем, боюсь на две копии софта не хватит флэша, поэтому придётся откатиться к традиционной схеме.
  19. Ещё про бутлоадер

    Нужно сделать очередной USB бутлоадер, но с некоторыми особенностями. Имеющиеся в природе бутлоадеры загружают софт с фиксированного адреса и стартуют независимо от основного приложения (по кнопке или перемычке). Мне же хочется, чтобы прямо из USB приложения на ПК можно было перевести устройство в режим бута и тут же безопасно залить свежую прошивку. У меня созрела вот такая схема бутлоадера: Загрузка новой прошивки происходит при работающем приложении, а новая прошивка спокойно заливается в свободную область памяти. После загрузки ещё одна область флэша патчится и меняет местами указатель на новую и на старую прошивки. При сбросе проца бут проверяет наличие прошивки по основному адресу и по запасному в случае сбоя. Всё это должно работать при условии позиционно независимого кода прошивки. Кто-нибудь работал с позиционно независимыми прошивками (IAR мой софт с ходу не смог собрать как позиционно независимый)? Прокомментируйте предложенную схему работы бутлоадера. В обычных бутах не устраивает, что для прошивки приходится что-то дополнительно нажимать на плате и то, что устройство перецепляется к ПК (требует повторного подключения). Для сравнения, в U-Boot этого не требуется.
  20. Ну CMSIS тоже тот ещё образец индусского кода. Я когда в gpio.c заглянул (для LPC178x), то не знал, то ли плакать, то ли смеяться. Абсолютно левый код, с которым просто невозможно управлять выводами.
  21. Это для SIM900 прошивка будет? В будущем под какой ревизией пойдёт? B02?
  22. "И что, обеспечит 10000 соединений? Дайте потестить." Нет, не обеспечит. Я же говорю, там всякая ересь. Но если нужен образец, от чего плясать, то очень даже подойдет. Там пул соединений добавить, потюнить винду на предмет ограничения сокетов, может и вытянет в итоге.
  23. Мне что-то так чудится, что Вы и без HTTP не сможете отдавать данные каждые 3-9 сек. Подумайте на досуге, что Ваши устройства будут делать в те моменты, когда связи не будет. Что-то мне подсказывает, что данные они должны накапливать, а передавать при появлении связи. Так что мешает и по HTTP аналогично работать: данные накапливать, а передавать блоками с заданным интервалом?
  24. Да топик стартеру эффективности большой не требуется - до 10000 клиентов, а отдавать данные можно раз в 10 минут, например. Нагрузка детская. Это конечно. Но вот сделать хороший сервер хоть TCP, хоть HTTP на C задача очень нетривиальная. Неопытный программист сделает в лоб по потоку на клиента и сразу же проиграет решению на эрланге. Тем не менее, я не советую топикстартеру браться за эрланг (хотя для самообразования очень даже советую), а порекомендую: 1. Поискать готовый сервис и присоседиться к нему. 2. Если не найдёт и решение нужно долгоиграющее и расширяемое, то взять веб сервер и прикрутить свой обработчик. Данные складировать сразу в БД картографического сервера. 3. Если совсем нет времени и хочется TCP, могу дать свой сервер на C#. Там по потоку на клиента, винда, бинарный протокол и прочая ересь, зато TCP сервер сразу заработает.
×
×
  • Создать...