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

andrewlekar

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

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

  • Посещение

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


  1. 6,5$ мелким оптом. Можно ещё STM подыскать похожий или даже MTK, да если ещё оптом, то вообще с запасом уложиться. Если без производства, то в эти рамки не уложиться. Нужно брать RasPi или роутер перешивать.
  2. Задача нереальная, разве что у китайцев SoC заказать с 100К годовым потреблением (цифру взял от балды :)). Более-менее похожее решение: LPC1788 + SDRAM 128MB + разъём для SD карты + ETH PHY. Если руки прямые, то реально сделать на двухслойке, корпуса есть все выводные, PHY и SDRAM можно отковырять от компа (если нужно наколенное решение), вместо полноценного линукса будет ucLinux.
  3. Вы вроде в самом начале перечисляли имеющиеся прошивки и там был 6.57g для dwlwin. Я поэтому и не стал высылать. 6.57g для терминала у меня тоже есть, но там, кажется, нет отдельной A&D init версии, поэтому я не знаю, зальётся ли она в Q2406B. Не совсем так. Я говорил, что после обновления ОС загрузчик уже нельзя будет обновить, а он может использоваться для новых приложений и т.п. На всякий случай лучше лить заранее. Кстати, я использую версию загрузчика поновее - 2.чё-то-там.F
  4. Прикольно. Буду знать. :) Можете реанимировать модуль при помощи Dwlwin. Выслал тоже. Тока не пробовал никогда его в деле. Логично, чёрт возьми. :) Если вы успешно обновились до 6.57d, то тупо залейте wipsoft_311 и рестартаните. Если всё-таки решитесь обновляться до 6.57g, то заливайте wipsoft_321. 201 тоже где-то валялся если сильно надо.
  5. Q2406B вполне можно прошить прошивкой 6.57g через Dwlwin. Однако есть нюанс. Если ДО обновления не обновить загрузчик, то ПОСЛЕ обновления, новый загрузчик в модуль уже не лезет. Если же залить сразу новый загрузчик, то можно обновляться спокойно и может даже через терминал получится (без Dwlwin). Могу дать Dwlwin погонять, а также 6.57g для заливки через терминал, а также свежий загрузчик. Однако не гарантирую, что WIPLib будет активирован после этого. Однако гарантирую, что через OpenAT можно будет изнутри модуля использовать WIP функции. "Плюсовые" прошивки для этого модуля не подходят. Нужны прошивки именно с названием 2406b. PS: .e2p файлы как раз для Dwlwin. Для заливки через терминал .dwl файлы.
  6. Всё равно в устройстве должна быть печатная плата. Ну 4 слойка вместо 2 слойки погоды не сделает. СМД и так все паяют уже. Настроим! Зачем нам приборы? +CSQ будем смотреть и резистор крутить :) Да мы и нелегально можем... А программы можно писать и причёсывать ещё до окончательного улаживания всех вопросов. К тому же если SDK даёт стандартные AT команды, то и вообще делать ничё не надо (хотя если весь софт тащим внутрь модуля, то надо).
  7. А зачем ещё нужен SDK, если не для того, чтобы "писать какие-то дополнительные пользовательские приложения-утилиты"?
  8. Тоже по 4 бакса? Вопрос: к этому чипсету нужна какая-то обвязка ещё или это законченное устройство GSM модуль?
  9. нюансы sem_timedwait()

    Хороший вопрос по REALTIME_CLOCK. Я как-то тоже использовал этот таймер для организации паузы и тоже была мысль насчёт перевода времени. К счастью, в том софте это никак бы не отразилось на работе софта. С другой стороны, в ucOS я тоже решил реализовать чтение и установку времени и там тоже встал вопрос о переводе времени, на этот раз серьёзнее. Я сделал так, что есть коллбэк на системный тик, а системное время соответствует некоторому количеству тиков. Соответственно можно получать/устанавливать системное время, а необходимые задержки для потоков получать от тиков, а не от системного времени. Можно попробовать воспроизвести этот подход в вашем случае.
  10. Лучшее решение в вашем случае - не делать ничего. Залили неправильную прошивку - несут вам для восстановления. Случай это достаточно редкий, да и за восстановление функционала можно денег брать дополнительно. К тому же при нормально использовании бутлоадер не дохнет при перешивке, поэтому можно просто-напросто по телефону проконсультировать, как вручную перевести железку в загрузчик и передать правильную прошивку.
  11. Вот реализация posix совместимого gettime.c для винды. Не знаю, правда, как у этого кода с совместимостью со старыми виндами... #include "gettime.h" #ifdef __cplusplus extern "C" { #endif static LARGE_INTEGER getFILETIMEoffset() { SYSTEMTIME s; FILETIME f; LARGE_INTEGER t; s.wYear = 1970; s.wMonth = 1; s.wDay = 1; s.wHour = 0; s.wMinute = 0; s.wSecond = 0; s.wMilliseconds = 0; SystemTimeToFileTime(&s, &f); t.QuadPart = f.dwHighDateTime; t.QuadPart <<= 32; t.QuadPart |= f.dwLowDateTime; return (t); } int clock_gettime(clockid_t clk_id, struct timespec *tp) { LARGE_INTEGER t; FILETIME f; double microseconds; static LARGE_INTEGER offset; static double frequencyToMicroseconds; static int initialized = 0; static BOOL usePerformanceCounter = 0; (void)clk_id; if (!initialized) { LARGE_INTEGER performanceFrequency; initialized = 1; usePerformanceCounter = QueryPerformanceFrequency(&performanceFrequency); if (usePerformanceCounter) { QueryPerformanceCounter(&offset); frequencyToMicroseconds = (double)performanceFrequency.QuadPart / 1000000.; } else { offset = getFILETIMEoffset(); frequencyToMicroseconds = 10.; } } if (usePerformanceCounter) QueryPerformanceCounter(&t); else { GetSystemTimeAsFileTime(&f); t.QuadPart = f.dwHighDateTime; t.QuadPart <<= 32; t.QuadPart |= f.dwLowDateTime; } t.QuadPart -= offset.QuadPart; microseconds = (double)t.QuadPart / frequencyToMicroseconds; t.QuadPart = (LONGLONG)microseconds; tp->tv_sec = (long)(t.QuadPart / 1000000); tp->tv_nsec = (t.QuadPart % 1000000) * 1000; return (0); } #ifdef __cplusplus } #endif
  12. http://www.cplusplus.com/reference/ctime/ Но вообще вопрос непростой. Функции для работы с временем обычно достаточно сильно завязаны на используемую ось. Если это линукс, то там есть clock_gettime и usleep. Если это windows, то QueryPerformanceFrequency и Sleep. Если оси нет вообще, то можно использовать просто временные задержки или портировать функции из time.h - для этого нужно написать свою реализацию функций __time32 и/или __time64.
  13. Выкиньте putString и сделайте просто через puts.
  14. Да, вот этот вариант плюсую. Только это не эмуляция модема, а эмуляция последовательного порта. Сделать композитное устройство и Mass Storage разблокировать после ввода пароля.
  15. Всякое бывает и такое может случиться. Но в таком случае мы хотя бы клиентов сможем оповестить, что эти симки не работают с этими версиями приборов, а не как раньше с вейвкомом было: 4 разновидности модулей и 10 вариантов прошивок.
  16. Ага. А я волевым решением зафиксировал версию прошивки навсегда. Для SIM900 B09, для SIM900R B04. Всё предсказуемо и надёжно работает с разными симками.
  17. Я же говорю, если будет копия векторов по 0 адресу, то загрузчик перестанет запускаться.
  18. Стоит задать себе вопрос, кому нужно иметь сразу все 30000 строк? Вы их всё равно все сразу не увидите и они нужны как правило либо по какому-то критерию, либо постранично. Короче, я ничё не знаю про InnoDB (можете попробовать другой бэкенд использовать, вдруг быстрее будет), но средствами SQL с заданными условиями ничё ускорить не получится. Остаются средства аппаратные (поставить проц шустрее), попробовать другой движок БД (даже если и ускорит, то незначительно).
  19. Вопрос, конечно, интересный, но по-моему сделать так, как хочет ТС нереально. Если даже что-то получится, то бинарнику придётся затирать загрузчик, так как в начале находятся вектора загрузчика, а ТС желает, чтобы после загрузки по ISP стартовало приложение - придётся затирать вектора и загрузчик похерится. Если делать приложение совмещённое с загрузчиком, то будет всё равно как загружать, через ISP или через бутлоадер, однако нужно будет организовать релокацию приложения в ОЗУ (что накладывает серьёзные ограничения на размер приложения), либо делать хитрый загрузчик с подменой адресов (тут я себе плохо представляю как организовать), либо размещать в ОЗУ только часть, связанную с загрузкой приложения. Все варианты одинаково плохи.
  20. Вроде бы проблема была в заниженном питании чипа. Выставили номинальное напряжение и за ночь модуль вполне пристойно себя показал. С пассивной антенной даже не пробовали работать.
  21. Да, разница есть. Как правило чуть-чуть различаются регистры PHY, иногда выставлен другой адрес, часть настроек может задаваться программно или аппаратно подтягивающими резисторами - у разных PHY могут быть назначены разные настройки несмотря на одинаковое аппаратное подключение.
  22. Рад, что у вас всё заработало, но вот как раз из-за обвязки симки было такое, что одна симка не работала, а остальные работали.
  23. У меня со скрипом, но собралось (в вижуал студии). Верните в макрос extern как в примере. Все ссылки на другие меню Next, Previous должны быть описаны с помощью MAKE_MENU иначе линкер будет ругаться. Вот как у меня получилось: #define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Text) \ extern menuItem Next; \ extern menuItem Previous; \ extern menuItem Parent; \ extern menuItem Child; \ menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, { Text }} menuItem Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, {0x00}}; #define NULL_ENTRY Null_Menu enum { MENU_CANCEL=1, MENU_RESET, MENU_MODE1, MENU_MODE2, MENU_MODE3, MENU_SENS1, MENU_SENS2, }; MAKE_MENU(Level1Item1, Level1Item2, Level1Item3, NULL_ENTRY, Level1Item1Sub1, 0, "Запуск"); MAKE_MENU(Level1Item2, Level1Item3, Level1Item1, NULL_ENTRY, NULL_ENTRY, 0, "Запуск2"); MAKE_MENU(Level1Item3, Level1Item1, Level1Item2, NULL_ENTRY, NULL_ENTRY, 0, "Запуск3"); MAKE_MENU(Level1Item1Sub1, NULL_ENTRY, NULL_ENTRY, Level1Item1, NULL_ENTRY, 0, "Запуск4"); int _tmain(int argc, _TCHAR* argv[]) { return 0; }
  24. У вас может и складируются в прерывании. У меня лично складируются в самой задаче. :) Я по максимуму вытаскиваю из обработчиков прерываний в код задачи. Для этого можно, например, считать в прерывании значение ацп, положить в буфер, запретить прерывания от ацп (все прерывания запрещать не обязательно), просигнализировать семафором задаче. Задача просыпается, перемещает значение в свой буфер и восстанавливает прерывания от ацп. В современных процессорах как правило входить в прерывание вообще не обязательно - достаточно поллить флаг наличия данных или получать данные по дма.
×
×
  • Создать...