From bc6128bad7ee5d28fcbeba7ae41c7e12a130e1d5 Mon Sep 17 00:00:00 2001 From: binsir Date: Tue, 30 Nov 2021 16:47:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9cmsis=5Frtos=E7=9A=84?= =?UTF-8?q?=E9=98=9F=E5=88=97=E6=8E=A8=E9=80=81=E4=B8=8D=E4=BC=9A=E8=A6=86?= =?UTF-8?q?=E7=9B=96=E9=97=AE=E9=A2=98=EF=BC=9Bkeil=E5=B7=A5=E7=A8=8B.bin?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E7=94=9F=E6=88=90=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=EF=BC=9Bcan.c:can=5Ffilter=5Fnone=E8=BF=94=E5=9B=9E=E5=80=BC?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/freertos_action.c | 40 +++++++++++++++++++++- App/freertos_action.h | 2 +- BSP/bsp_common.c | 6 ++-- BSP/insifhtica_QOAR1271.c | 14 ++++---- Core/Src/can.c | 5 +-- MDK-ARM/proximity_uavcan_converter.uvprojx | 15 ++++---- MDK-ARM/startup_stm32f103xb.lst | 10 +++--- UAVCAN/uavcan.c | 2 +- 8 files changed, 65 insertions(+), 29 deletions(-) diff --git a/App/freertos_action.c b/App/freertos_action.c index d736fb4..79e92f7 100644 --- a/App/freertos_action.c +++ b/App/freertos_action.c @@ -4,6 +4,8 @@ extern uint32_t last_rev_usart1_tick; extern uint32_t last_rev_usart2_tick; +osStatus_t handleQueuePutErrorResource(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout); + void task_usart_rev_action(void) { usart_data_t data = {0}; @@ -100,7 +102,7 @@ void task_default_action(void) send_data.id = UAVCAN_NODE_STATUS_DATA_TYPE_ID; uavcan_node_status_t data = {0}; memcpy(&send_data.content.node_state, &data, sizeof(uavcan_node_status_t)); - osMessageQueuePut(uavcan_send_queueHandle, &send_data, 0, 10); + myOsMessageQueuePut(uavcan_send_queueHandle, &send_data, 0, 10); } } osDelay(200); @@ -201,4 +203,40 @@ uint16_t min(uint16_t one, uint16_t two) return one < two ? one : two; } +osStatus_t myOsMessageQueuePut(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) +{ + osStatus_t osStatus = osMessageQueuePut(mq_id, msg_ptr, msg_prio, timeout); + switch (osStatus) + { + case osOK: + return osOK; + case osErrorTimeout: + return osErrorTimeout; + case osErrorResource: + return handleQueuePutErrorResource(mq_id, msg_ptr, msg_prio, timeout); + case osErrorParameter: + return osMessageQueuePut(mq_id, msg_ptr, msg_prio, 0); + default: + return osError; + } +} +osStatus_t handleQueuePutErrorResource(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) +{ + uint32_t size = osMessageQueueGetMsgSize(mq_id); + if (size <= 0) + { + size = 100; + } + uint8_t *temp = pvPortMalloc(size); + osStatus_t osStatus = osMessageQueueGet(mq_id, temp, &msg_prio, timeout); + osStatus = myOsMessageQueuePut(mq_id, temp, msg_prio, timeout); + vPortFree(temp); + // osMemoryPoolId_t mpid_MemPool = osMemoryPoolNew(1, size, NULL); + // uint8_t *temp = osMemoryPoolAlloc(mpid_MemPool, 0); + // osStatus_t osStatus = osMessageQueueGet(mq_id, temp, &msg_prio, timeout); + // osStatus = myOsMessageQueuePut(mq_id, temp, msg_prio, timeout); + // osStatus = osMemoryPoolFree(mpid_MemPool, temp); + // osStatus = osMemoryPoolDelete(mpid_MemPool); + return osStatus; +} diff --git a/App/freertos_action.h b/App/freertos_action.h index 366a200..760ee53 100644 --- a/App/freertos_action.h +++ b/App/freertos_action.h @@ -27,7 +27,7 @@ void task_usart2_rev_action(void); void task_usart_send(void); void task_proximity(void); uint16_t min(uint16_t one, uint16_t two); - +osStatus_t myOsMessageQueuePut(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout); #ifdef __cplusplus } #endif diff --git a/BSP/bsp_common.c b/BSP/bsp_common.c index 94a2a96..01ca921 100644 --- a/BSP/bsp_common.c +++ b/BSP/bsp_common.c @@ -56,7 +56,7 @@ void avtion_do_can_back(CAN_HandleTypeDef *hcan) { if (uavcan_rev_queueHandle != NULL) { - osStatus status = osMessageQueuePut(uavcan_rev_queueHandle, &can_rev, 0U, 0U); + osStatus status = myOsMessageQueuePut(uavcan_rev_queueHandle, &can_rev, 0U, 0U); } } } @@ -106,7 +106,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) if (usart_rev_queueHandle != NULL && msg.len > 0) { - osMessageQueuePut(usart_rev_queueHandle, &msg, NULL, 0U); + myOsMessageQueuePut(usart_rev_queueHandle, &msg, NULL, 0U); } memset(&hart1_rev_buff[0], 0, sizeof(hart1_rev_buff)); @@ -128,7 +128,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) if (usart_rev_queueHandle != NULL && msg.len > 0) { - osMessageQueuePut(usart_rev_queueHandle, &msg, NULL, 0U); + myOsMessageQueuePut(usart_rev_queueHandle, &msg, NULL, 0U); } memset(&hart2_rev_buff[0], 0, sizeof(hart2_rev_buff)); diff --git a/BSP/insifhtica_QOAR1271.c b/BSP/insifhtica_QOAR1271.c index f73546c..b6a3407 100644 --- a/BSP/insifhtica_QOAR1271.c +++ b/BSP/insifhtica_QOAR1271.c @@ -84,14 +84,14 @@ void decode_ar1271(char c,uint8_t index){ { if (proximity1_queueHandle != NULL) { - osMessageQueuePut(proximity1_queueHandle, &proximity_data, 0, 10); + myOsMessageQueuePut(proximity1_queueHandle, &proximity_data, 0, 10); } } else if (index == 2) { if (proximity2_queueHandle != NULL) { - osMessageQueuePut(proximity2_queueHandle, &proximity_data, 0, 10); + myOsMessageQueuePut(proximity2_queueHandle, &proximity_data, 0, 10); } } } @@ -208,7 +208,7 @@ void data_process(void){ data.d315 = range_arr[7]; if (proximity1_queueHandle != NULL) { - osMessageQueuePut(proximity1_queueHandle, &data, 0, 10); + myOsMessageQueuePut(proximity1_queueHandle, &data, 0, 10); } for (uint8_t i = 0; i < 8; i++) { @@ -317,7 +317,7 @@ void request_qoar1271_by_step(uint8_t step, uint8_t usart_index) send_data.data[1] = 0x11; send_data.data[2] = 0x02; send_data.data[3] = 0x4C; - osMessageQueuePut(usart_send_queueHandle, &send_data, NULL, 0); + myOsMessageQueuePut(usart_send_queueHandle, &send_data, NULL, 0); break; case 2: @@ -326,7 +326,7 @@ void request_qoar1271_by_step(uint8_t step, uint8_t usart_index) send_data.data[1] = 0x31; send_data.data[2] = 0x03; send_data.data[3] = 0xE5; - osMessageQueuePut(usart_send_queueHandle, &send_data, NULL, 0); + myOsMessageQueuePut(usart_send_queueHandle, &send_data, NULL, 0); break; case 3: @@ -336,7 +336,7 @@ void request_qoar1271_by_step(uint8_t step, uint8_t usart_index) send_data.data[2] = 0x02; send_data.data[3] = 0x01; send_data.data[4] = 0xDF; - osMessageQueuePut(usart_send_queueHandle, &send_data, NULL, 0); + myOsMessageQueuePut(usart_send_queueHandle, &send_data, NULL, 0); break; case 4: @@ -346,7 +346,7 @@ void request_qoar1271_by_step(uint8_t step, uint8_t usart_index) send_data.data[2] = 0x03; send_data.data[3] = 0x03; send_data.data[4] = 0xC4; - osMessageQueuePut(usart_send_queueHandle, &send_data, NULL, 0); + myOsMessageQueuePut(usart_send_queueHandle, &send_data, NULL, 0); break; default: break; diff --git a/Core/Src/can.c b/Core/Src/can.c index 93f0dce..b8b219f 100644 --- a/Core/Src/can.c +++ b/Core/Src/can.c @@ -174,9 +174,6 @@ HAL_StatusTypeDef can_filter_none(void) filter1.FilterFIFOAssignment = CAN_FILTER_FIFO0; //FIFO0 filter1.FilterActivation = ENABLE; - if (HAL_CAN_ConfigFilter(&hcan, &filter1) != HAL_OK) - { - Error_Handler(); - } + return HAL_CAN_ConfigFilter(&hcan, &filter1); } /* USER CODE END 1 */ diff --git a/MDK-ARM/proximity_uavcan_converter.uvprojx b/MDK-ARM/proximity_uavcan_converter.uvprojx index e2be66f..4c4356d 100644 --- a/MDK-ARM/proximity_uavcan_converter.uvprojx +++ b/MDK-ARM/proximity_uavcan_converter.uvprojx @@ -10,13 +10,13 @@ proximity_uavcan_converter 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060960::V5.06 update 7 (build 960)::.\ARMCC 0 STM32F103T8 STMicroelectronics - Keil.STM32F1xx_DFP.2.2.0 + Keil.STM32F1xx_DFP.2.3.0 http://www.keil.com/pack/ IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ @@ -82,7 +82,7 @@ 1 0 - fromelf --bin -o "$Lpriximity.bin" "#L" + fromelf --bin -o "$Lzrzk.proxi.bin" "#L" 0 0 @@ -185,6 +185,7 @@ 0 0 0 + 0 0 0 8 @@ -351,7 +352,7 @@ 0 0 0 - 0 + 4 @@ -565,7 +566,7 @@ 2 2 2 - 2 + 0 @@ -1479,7 +1480,7 @@ 2 2 2 - 2 + 0 @@ -1609,7 +1610,7 @@ 2 2 2 - 2 + 0 diff --git a/MDK-ARM/startup_stm32f103xb.lst b/MDK-ARM/startup_stm32f103xb.lst index 05b7398..7edbfb5 100644 --- a/MDK-ARM/startup_stm32f103xb.lst +++ b/MDK-ARM/startup_stm32f103xb.lst @@ -476,11 +476,11 @@ ARM Macro Assembler Page 8 Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw ork --depend=proximity_uavcan_converter\startup_stm32f103xb.d -oproximity_uavca n_converter\startup_stm32f103xb.o -I..\Core\Inc -I.\RTE\_proximity_uavcan_conve -rter -I"D:\Program Files (x86)\Keil_v5\Arm\Packs\ARM\CMSIS\5.6.0\CMSIS\Core\Inc -lude" -I"D:\Program Files (x86)\Keil_v5\Arm\Packs\Keil\STM32F1xx_DFP\2.2.0\Devi -ce\Include" --predefine="__UVISION_VERSION SETA 529" --predefine="_RTE_ SETA 1" - --predefine="STM32F10X_MD SETA 1" --list=startup_stm32f103xb.lst startup_stm32 -f103xb.s +rter -IC:\Users\ZRZK\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\CMSIS\Core\Include + -IC:\Users\ZRZK\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Includ +e --predefine="__UVISION_VERSION SETA 536" --predefine="_RTE_ SETA 1" --predefi +ne="STM32F10X_MD SETA 1" --predefine="_RTE_ SETA 1" --list=startup_stm32f103xb. +lst startup_stm32f103xb.s diff --git a/UAVCAN/uavcan.c b/UAVCAN/uavcan.c index 79c3bd4..5afa0b4 100644 --- a/UAVCAN/uavcan.c +++ b/UAVCAN/uavcan.c @@ -457,7 +457,7 @@ void send_uavcan_proximity(uavcan_proximity_t *data) { msg.id = ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID; memcpy(&msg.content.proximity, data, sizeof(uavcan_proximity_t)); - osMessageQueuePut(uavcan_send_queueHandle, &msg, NULL, 10U); + myOsMessageQueuePut(uavcan_send_queueHandle, &msg, NULL, 10U); } }