

Neo_Matrix
Участник-
Posts
145 -
Joined
-
Last visited
Reputation
0 ОбычныйAbout Neo_Matrix
-
Rank
Частый гость
- Birthday 08/10/1985
Recent Profile Visitors
-
Замена STM32 от Geehy Semiconductor
Neo_Matrix replied to makc's topic in STM
Я не обижаюсь, но вести бесполезную дискуссию не вижу смысла. Лучше поработать или почитать что то чем набивать рейт сообщений на форуме. -
Замена STM32 от Geehy Semiconductor
Neo_Matrix replied to makc's topic in STM
Пишите дальше... Вопрос был не вам задан, потому ответа жду не от вас. Удачи. -
Замена STM32 от Geehy Semiconductor
Neo_Matrix replied to makc's topic in STM
Не очень понятен сарказм, особенно как для "гуру с 3к+ сообщений". Взять паяльник, впаять и прошить, вы можете в своих поделках. Я задал вполне логичный вопрос, который позволяет сэкономить время перехода на другой чип не сравнивая 2 мануала. STM даже внутри своих серий дает Migration of applications from XXXX Series to YYYY Series, что позволяет быстро поправить код под другую серию, запустить в тест, а потом уже читать даташит, перед запуском в прод. -
Замена STM32 от Geehy Semiconductor
Neo_Matrix replied to makc's topic in STM
А есть ли апноут по переходу с STM на APM32F407? Так же не нашел ерраты или китайцы настолько круты, что не одной ошибки нет в узлах. -
Stm32f407 uart+dma+отслеживание ошибок линии
Neo_Matrix replied to Neo_Matrix's topic in ARM, 32bit
Jcxz успокойтесь, уже разобрался благодаря arlleex, который подсказал, что multibuffer и double buffer не одно и то же. Тему можно закрывать. -
Stm32f407 uart+dma+отслеживание ошибок линии
Neo_Matrix replied to Neo_Matrix's topic in ARM, 32bit
В целом понятно. Нужно просто попробовать включить прерывания, сделать ошибки каким либо образом и посмотреть что будет происходить, тогда будет точно ясно, как оно работает :) Ого, даже так. А я то думал, что мультибуфер это и есть двойная буферизация для uart -
Stm32f407 uart+dma+отслеживание ошибок линии
Neo_Matrix replied to Neo_Matrix's topic in ARM, 32bit
В rm сказано не двузначно, последовательным чтением sr -> dr или записью в rxne нуля. Так что если dma не вычитывает sr как утверждает arlleex тогда пишит 0 в rxne -
Stm32f407 uart+dma+отслеживание ошибок линии
Neo_Matrix replied to Neo_Matrix's topic in ARM, 32bit
Тогда не понятно как сбросить флаг ошибки и обязательно ли применять двойной буфер для этих целей? Думал использовать кольцевой без фифо. ПС. В каком байте произошла ошибка абсолютно не важно, важно знать их кол-во за промежуток времени. Как тогда dma сбрасывает флаги готовности? Записью 0 в sr? И если сбросить этот флаг заранее что будет с dma? Как сбросить в режиме мультибуфера нашел, записью 0 в rxne. Остается вопрос обязательно ли использовать мультибуфер? -
Stm32f407 uart+dma+отслеживание ошибок линии
Neo_Matrix posted a topic in ARM, 32bit
Возникла задача использовать dma для передачи данных по uart, но параллельно необходимо отслеживать ошибки ne, fe, так как линия сильно зашумлена. Это необходимо для дальнейшей подстройки некоторых параметров самой линии аналитически. Но если используется dma, тогда контроллер сам проверяет флаг статуса байта в регистре sr и читает регистр dr, что приводит к сбросу флагов ошибок. Можно конечно поставить высокий приоритет прерывания uart контроллера, но как тогда в нем очистить флаги ошибок? Если прочитать sr->dr тогда контроллер dma не примет текущий байт (который может быть вовсе не спорченным) или передача вовсе прекратится так как у контроллера dma из под носа очистять флаг в регистре sr. Какие есть варианты отследить ошибки линии ? -
Выделение памяти в LWIP API
Neo_Matrix replied to Neo_Matrix's topic in Программирование
Спасибо. В целом так и предполагал, просто первое что пришло на ум, это MPU -
Выделение памяти в LWIP API
Neo_Matrix replied to Neo_Matrix's topic in Программирование
Копировать весь код и содержимое всех макросов достаточно накладно, скопирую основное. Это структура, внутри нее объединение, так что размер не велик, хотя и выглядит ужасающе. 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) -
Функция с переменным числом параметров
Neo_Matrix replied to inventor's topic in Программирование
Как альтернатива можно Ваш log_printf написать в виде макроопределения. У меня сделано так, можете добавить в него свой семафор. Так же нужно подключить хидер с гитхаба: https://github.com/willwray/VA_OPT #define DEBUG_PRINTF(use, fmt, ...) do {if(use != 0U) printf(fmt, ##__VA_ARGS__);} while(0U) Возможно не будет работать на всех компиляторах. -
Выделение памяти в LWIP API
Neo_Matrix posted a topic in Программирование
Рассматривал реализацию работы в стеке 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? -
тарро started following Neo_Matrix
-
Спасибо. К сожалению Питер, это слишком далеко. Да и с растаможкой будут оч. большие проблемы если речь и о производстве.
-
Ищу производителя пластиковых корпусов для РЭА, так же приветствутся свои специалисты по проэктированию. Первый тираж предпологается около 500шт, при определенных условиях до 1000шт. Если производители есть в ветке, прошу указать ориетировочную цену(можно в личку) на прессформу и отдельно цену за проэктирование, если такая услуга предоставляется. Размер от 80х80х40 до 100х100х60, окончательного проэкта пока нет. Корпус без подвижных частей, будет жк-дисплей+сенсор. Предполотается что будет минималистичная лицевая панель и достаточно сложная нижняя часть(много разъемов для подключений).