Jump to content

    

Neo_Matrix

Участник
  • Content Count

    136
  • Joined

  • Last visited

Everything posted by Neo_Matrix


  1. Спасибо. В целом так и предполагал, просто первое что пришло на ум, это MPU
  2. Копировать весь код и содержимое всех макросов достаточно накладно, скопирую основное. Это структура, внутри нее объединение, так что размер не велик, хотя и выглядит ужасающе. struct pppapi_msg_msg { ppp_pcb *ppp; union { #if PPP_NOTIFY_PHASE struct { ppp_notify_phase_cb_fn notify_phase_cb; } setnotifyphasecb; #endif /* PPP_NOTIFY_PHASE */ #if PPPOS_SUPPORT struct { struct netif *pppif; pppos_output_cb_fn output_cb; ppp_link_status_cb_fn link_status_cb; void *ctx_cb; } serialcreate; #endif /* PPPOS_SUPPORT */ #if PPPOE_SUPPORT struct { struct netif *pppif; struct netif *ethif; const char *service_name; const char *concentrator_name; ppp_link_status_cb_fn link_status_cb; void *ctx_cb; } ethernetcreate; #endif /* PPPOE_SUPPORT */ #if PPPOL2TP_SUPPORT struct { struct netif *pppif; struct netif *netif; API_MSG_M_DEF_C(ip_addr_t, ipaddr); u16_t port; #if PPPOL2TP_AUTH_SUPPORT const u8_t *secret; u8_t secret_len; #endif /* PPPOL2TP_AUTH_SUPPORT */ ppp_link_status_cb_fn link_status_cb; void *ctx_cb; } l2tpcreate; #endif /* PPPOL2TP_SUPPORT */ struct { u16_t holdoff; } connect; struct { u8_t nocarrier; } close; struct { u8_t cmd; void *arg; } ioctl; } msg; }; struct pppapi_msg { struct tcpip_api_call_data call; struct pppapi_msg_msg msg; }; Это некоторые макросы: #define PPPAPI_VAR_REF(name) API_VAR_REF(name) #define PPPAPI_VAR_DECLARE(name) API_VAR_DECLARE(struct pppapi_msg, name) #define PPPAPI_VAR_ALLOC(name) API_VAR_ALLOC_POOL(struct pppapi_msg, PPPAPI_MSG, name, ERR_MEM) #define PPPAPI_VAR_ALLOC_RETURN_NULL(name) API_VAR_ALLOC_POOL(struct pppapi_msg, PPPAPI_MSG, name, NULL) #define PPPAPI_VAR_FREE(name) API_VAR_FREE_POOL(PPPAPI_MSG, name) #define API_VAR_REF(name) (*(name)) #define API_VAR_DECLARE(type, name) type * name #define API_VAR_ALLOC_EXT(type, pool, name, errorblock) do { \ name = (type *)memp_malloc(pool); \ if (name == NULL) { \ errorblock; \ } \ } while(0) #define API_VAR_ALLOC(type, pool, name, errorval) API_VAR_ALLOC_EXT(type, pool, name, return errorval) #define API_VAR_ALLOC_POOL(type, pool, name, errorval) do { \ name = (type *)LWIP_MEMPOOL_ALLOC(pool); \ if (name == NULL) { \ return errorval; \ } \ } while(0) #define API_VAR_FREE(pool, name) memp_free(pool, name)
  3. Как альтернатива можно Ваш log_printf написать в виде макроопределения. У меня сделано так, можете добавить в него свой семафор. Так же нужно подключить хидер с гитхаба: https://github.com/willwray/VA_OPT #define DEBUG_PRINTF(use, fmt, ...) do {if(use != 0U) printf(fmt, ##__VA_ARGS__);} while(0U) Возможно не будет работать на всех компиляторах.
  4. Рассматривал реализацию работы в стеке LWIP API, при вызовах API функций LWIP, можно встретить следующий код: err_t pppapi_close(ppp_pcb *pcb, u8_t nocarrier) { err_t err; PPPAPI_VAR_DECLARE(msg); PPPAPI_VAR_ALLOC(msg); PPPAPI_VAR_REF(msg).msg.ppp = pcb; PPPAPI_VAR_REF(msg).msg.msg.close.nocarrier = nocarrier; err = tcpip_api_call(pppapi_do_ppp_close, &PPPAPI_VAR_REF(msg).call); PPPAPI_VAR_FREE(msg); return err; } Внутри макроса PPPAPI_VAR_ALLOC вызывается malloc с соответствующими проверками, далее идет вызов функции tcpip_api_call из контекста задачи TCPIP, после вызывается макрос PPPAPI_VAR_FREE который внутри вызывает free с соответствующими проверками. Из кода видно,что зона видимости(существования) переменной msg ограничивается текущей функцией, соответственно возникает вопрос, для чего создавать переменную в динамической памяти, с возможной фрагментацией оной, если можно просто создать переменную на СТЕКЕ задачи, с такой же областью видимости? Или это необходимо для процессоров с MPU?
  5. Спасибо. К сожалению Питер, это слишком далеко. Да и с растаможкой будут оч. большие проблемы если речь и о производстве.
  6. Ищу производителя пластиковых корпусов для РЭА, так же приветствутся свои специалисты по проэктированию. Первый тираж предпологается около 500шт, при определенных условиях до 1000шт. Если производители есть в ветке, прошу указать ориетировочную цену(можно в личку) на прессформу и отдельно цену за проэктирование, если такая услуга предоставляется. Размер от 80х80х40 до 100х100х60, окончательного проэкта пока нет. Корпус без подвижных частей, будет жк-дисплей+сенсор. Предполотается что будет минималистичная лицевая панель и достаточно сложная нижняя часть(много разъемов для подключений).
  7. Посмотрите на производителя Бахар.
  8. Алиэкспресс и продакшн на тысячи устройств, а тем более с циклом выпуска в 3-4 года явно не совместимы. Если даже контроллер поменяется и под него можно будет сделать новый драйвер, то делать новую плату, а тем более новый корпус+новую прессформу это уже не так просто. Банальные ncp551 на 2.8 вольта, когда пропали с продажи это был достаточно большой головняк, найти стабильную замену.
  9. Помогите подобрать серийный вариант дисплея с разрешением 320х240(можно больше) и диагональю 3.1-3.5", приоритетный размер 3.5". Наличие емкостного сенсора обязательно, можно рассмотреть как независимое устройство. Температурный диапазон от -5 до +70, готов и более узкий вариант. Стоимость до 30, максимум 50$
  10. Подыму старую тему. На данных макетках этот эффект проявляется почти со всеми припоями, потому как отверстия у них слишком большого диаметра и туда попадает припой с флюсом. Флюс закипает и начинает пузырится, паять их достаточно сложно, потому не рекомендую их для использования, точно такие же макетки на одностороннем тектолите без метализации ведут себя адекватно, может будет кому то полезным.
  11. За лазерный маркировщик спасибо, узнаю, может есть у монтажной организации. А счего вдруг после едкого натра выбрасывать плату? Он медь не должен разъедать. Сколько плат дома переделал, сначала лутом, потом перешел на фоторезит, остатки которого смывал едким натром, ни разу нечего не окислилось после него. И я же не сказал, что всю плату засунуть в него, а заказать высечку со скотча по форме КП и снять локально каплей, остатки промыть водой, локально можно протереть одипинкой, лимонкой.
  12. К сожалению платы не "колхозные", 4х слойные. Маска с них очень плохо слазит, а плат порядка 100штук, первая крупная пробная партия устройств. На самой первой просмотрели ошибку, так как керамика 0603 быстренько отгорала от перенапряжения, а на вход подавалось нормально фильтрованное напряжение. Зачисть скальпелем 100 плат не оч. приятное занятие, думал может каплей едкого натра повытравливать маску? Можно со скотча заказать высечку в виде посадочного места наклеить и залить натром? Или есть растворитель для маски? К сожалению не выйдет, мы не в России работаем.
  13. Произошла ошибка при трассировке платы и вместо конденсатора в корпусе C(тантал) было сделанно посадочное место под 0603(керамика). Плат достаточно много, потому выбрасывать дорого, все платы предназначены под автоматический монтаж. В том месте где должен припаиватся конденсатор расположены полигоны достаточной ширины для напаивания тантала. Проблема в маске, каким образом можно снять частично маску с полигонов для ручного домонтажа конденсатора?
  14. Подскажите, имеется ли у чипа AT91SAM9G25 защита от чтения прошивки? Если таковой нет подскажите недорогие чипы аналогичного уровня с такой возможностью и желательно продающиеся в виде готового модуля, например как эти: https://www.acmesystems.it/catalog_aria
  15. Прошивал бутлоадер из этого репа ранее. Как ни странно перепрошил его еще раз и он стал определятся, как и должен версии 9,5. Но SPI флешки по прежнему не прошивает. Может что то выгорело ранее, а я не заметил этого. Так как STM.... прошивает без проблем. Или лицензии не хватает.... Вот фото платы:
  16. Версии 9.2 и 9.5 отличаются по схемотехнике, не принципиально, прошивка у них одинаковая. У вас, вероятнее всего, при прошивке изменился серийный номер. Если весе работает - оставляйте как есть. Серийный понятное дело что слетел, но я восстановил прежний, что там был. И добавил лицензии. Работает как то странно, через несколько включений/выключений к ЮСБ софтина выдает что прошивка испорчена и требует восстановления, после перепрошивает и некоторое время работает нормально, потом цикл повторяется. Отладка по swd/o работает нормально. Но вот сегодня пробовал прошить spi флеху, так он с нее читает ff ff ff и пишет, что неизвестный чип памяти.
  17. Версия 9.5, вчера уже нашел ваше сообщение, попробовал выполнить команды, естественно не к чему это не привело и я перепрошил линк. Правда после перепрошивки он стал версии 9.2, стоит ли морочится с другой версией или оставить 9.2? Что она вообще дает?
  18. Подскажите есть ли возможность откатить команду exec addfeature? Добавил случайно бредовую лицензию, теперь пишет, что corrupted.
  19. Спасибо. За развернутый ответ. Тогда остаемся на sim800c.
  20. Питание от батареи даже не предполагается, только от сети, потому потребление не важно, кроме того не допустим режим сна так как наш сервер в любой момент может отправить команду. Выигрыша как раз и не нужно, для наших целей отлично подходят sim800c, однако их скоро снимут с производства, а этот отлично становится на посадочное место, без переделки платы, корпуса, трафаретов.... Мы юрлицо, с 3мя операторами уже есть контракты. Т.е. как я понял в этот модуль установить обычные карточки не возможно? И в обычных сетях 2г,3г,4г он работать не будет?
  21. Есть несколько вопросов к Cadilo и другим представителям simcom. На данный момент у нас есть готовая разработка на sim800c, на базе EAT. Проект уже работает но в скором времени старые модуля исчезнут с продажи, а SIM7020E идеально вписывается в старую плату после корректировки ОС на stepdown стабилизаторе и пары делителей. Так вот вопросы: 1) Будет ли под SIM7020E выпущен EAT, если да то когда? Или уже есть? 2) Как я понял в Украине Nb-Iot пока не сильно распространен, будет ли этот модем регестрироватся и работать на старых БС? В частности в селах где о "новых" 3г и 4г даже не слышали? Для информации, устройсто получает питание от сети и в энергосбережении особо не нуждается, по сути оно постоянно держит подключение с нашим сервером.
  22. Сбросьте пожалуйста в ЛС ссылку на самую новую версию(из доступных). Или расскажите как получить доступ к здешнему FTP.
  23. Спасибо, то что нужно. Странно, что расширение файла большой буквой S должно автоматически интерпретироваться как препроцессинг, но что то пошло не так. Более подробно: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0773a/chr1383143887630.html
  24. Кто нибудь пробовал собирать проект в такой связке: ChibiOS + KEIL + ARM COMPILER V6? Связка ChibiOS + KEIL + ARMСС V5 нормально компилируется. А вот с новым компилятором возникают проблемы с ассемблерными файлами, такими как: cstartup.s, vectors.s....... Внутри которых есть куски СИшного кода из ИНКЛУДОВ и ДЕФАЙНОВ: #if CH_DBG_ENABLE_STACK_CHECK && PORT_ENABLE_GUARD_PAGES bl _port_set_region #endif #if CH_DBG_SYSTEM_STATE_CHECK bl _dbg_check_unlock #endif #if CH_DBG_STATISTICS bl _stats_stop_measure_crit_thd #endif #if CORTEX_SIMPLIFIED_PRIORITY cpsie i #else movs r3, #0 /* CORTEX_BASEPRI_DISABLED */ msr BASEPRI, r3 #endif mov r0, r5 blx r4 movs r0, #0 /* MSG_OK */ bl chThdExit _zombies b _zombies ENDP Может у armclang есть опция которая разрешает использовать такие конструкции?
  25. У Вас есть конкретная ошибка, вот и решайте проблемы с выделением памяти в куче, зачем сейчас разбираться с энтропией. Для теста можете написать простую функцию энтропии, которая в цикле заполняет массив константами, после перепишите под аппаратный RNG. Функции выделения памяти MBEDTLS_PLATFORM_CALLOC_MACRO MBEDTLS_PLATFORM_FREE_MACRO по скольку я помню Вы должны переопределить сами. Если используете ФриРТОС, это будет vPortFree и нужно написать врапер над pvPortMalloc для calloc. Что то вроде этого: void *pvPortCalloc(size_t nmemb, size_t size) { void *x = pvPortMalloc(nmemb * size); if (x != NULL) { memset(x, 0, nmemb * size); } return x; }