From a6cd872df1e863e6155d93f1ce0e8fcbc1a959a9 Mon Sep 17 00:00:00 2001 From: acevest Date: Thu, 9 Jan 2020 23:04:28 +0800 Subject: [PATCH] fix usart irq handler not in safe area --- board/TencentOS_tiny_EVB_LX/BSP/Src/usart.c | 4 +-- .../TOS_CONFIG/tos_config.h | 2 +- .../eclipse/tencent_os_mqtt/main.c | 29 ++++++++++--------- examples/tencent_os_mqtt/mqtt_config.h | 14 ++++----- examples/tencent_os_mqtt/mqtt_example.c | 11 +++++-- platform/hal/gd/gd32vf1xx/src/tos_hal_uart.c | 21 +++++++------- 6 files changed, 45 insertions(+), 36 deletions(-) diff --git a/board/TencentOS_tiny_EVB_LX/BSP/Src/usart.c b/board/TencentOS_tiny_EVB_LX/BSP/Src/usart.c index 2be4e63b..c36810e9 100644 --- a/board/TencentOS_tiny_EVB_LX/BSP/Src/usart.c +++ b/board/TencentOS_tiny_EVB_LX/BSP/Src/usart.c @@ -69,7 +69,7 @@ void usart1_init(int baud) void usart2_init(int baud) { - eclic_irq_enable(USART2_IRQn, 1, 0); + //eclic_irq_enable(USART2_IRQn, 1, 0); /* enable GPIO clock */ rcu_periph_clock_enable(RCU_GPIOB); @@ -98,7 +98,7 @@ void usart2_init(int baud) usart_enable(USART2); - usart_interrupt_enable(USART2, USART_INT_RBNE); + //usart_interrupt_enable(USART2, USART_INT_RBNE); } diff --git a/board/TencentOS_tiny_EVB_LX/TOS_CONFIG/tos_config.h b/board/TencentOS_tiny_EVB_LX/TOS_CONFIG/tos_config.h index e007b9ec..4bba2d58 100644 --- a/board/TencentOS_tiny_EVB_LX/TOS_CONFIG/tos_config.h +++ b/board/TencentOS_tiny_EVB_LX/TOS_CONFIG/tos_config.h @@ -20,7 +20,7 @@ #define TOS_CFG_MMHEAP_EN 1u // 配置TencentOS tiny动态内存池大小 -#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 8192 +#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 16384 // 配置TencentOS tiny是否开启互斥锁模块 #define TOS_CFG_MUTEX_EN 1u diff --git a/board/TencentOS_tiny_EVB_LX/eclipse/tencent_os_mqtt/main.c b/board/TencentOS_tiny_EVB_LX/eclipse/tencent_os_mqtt/main.c index 1be52bde..daa53fe9 100644 --- a/board/TencentOS_tiny_EVB_LX/eclipse/tencent_os_mqtt/main.c +++ b/board/TencentOS_tiny_EVB_LX/eclipse/tencent_os_mqtt/main.c @@ -1,5 +1,6 @@ #include "mcu_init.h" #include "tos_k.h" +#include "tos_hal.h" #define BLED_TASK_SIZE 1024 #define WIFI_TASK_SIZE 4096 @@ -10,28 +11,29 @@ uint8_t k_wifi_stk[WIFI_TASK_SIZE]; void USART0_IRQHandler() { -#if 0 + tos_knl_irq_enter(); if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){ uint8_t data = usart_data_receive(USART0); - printf("%c\n", data); + printf("%c\n", data); } -#endif + tos_knl_irq_leave(); } void USART1_IRQHandler() { + tos_knl_irq_enter(); if(RESET != usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE)){ uint8_t data = usart_data_receive(USART1); - //tos_at_uart_input_byte(data); - printf("-%c\n", data); + tos_at_uart_input_byte(data); } + tos_knl_irq_leave(); } void USART2_IRQHandler() { + tos_knl_irq_enter(); if(RESET != usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE)){ uint8_t data = usart_data_receive(USART2); - tos_at_uart_input_byte(data); } - //printf("usart2\n"); + tos_knl_irq_leave(); } void task_bled(void *pdata) @@ -40,17 +42,18 @@ void task_bled(void *pdata) while (1) { printf("blink led task cnt: %d\n", cnt++); gpio_bit_write(LED_GPIO_PORT, LED_PIN,cnt % 2 ? SET : RESET); - tos_task_delay(1000); + tos_task_delay(1000); } } extern void mqtt_demo(); - +extern void mqtt_set_esp8266_port(hal_uart_port_t port); void task_wifi(void *pdata) { while(1) { - mqtt_demo(); - tos_task_delay(500); + mqtt_set_esp8266_port(HAL_UART_PORT_1); + mqtt_demo(); + tos_task_delay(500); } } @@ -60,10 +63,8 @@ void main(void) { tos_knl_init(); - usart0_init(115200); - tos_task_create(&k_task_bled, "bled", task_bled, NULL, 5, k_bled_stk, BLED_TASK_SIZE, 0); - tos_task_create(&k_task_wifi, "wifi", task_wifi, NULL, 3, k_wifi_stk, WIFI_TASK_SIZE, 0); + tos_task_create(&k_task_wifi, "wifi", task_wifi, NULL, 4, k_wifi_stk, WIFI_TASK_SIZE, 0); tos_knl_start(); diff --git a/examples/tencent_os_mqtt/mqtt_config.h b/examples/tencent_os_mqtt/mqtt_config.h index f8c28e04..83fe2543 100644 --- a/examples/tencent_os_mqtt/mqtt_config.h +++ b/examples/tencent_os_mqtt/mqtt_config.h @@ -3,13 +3,13 @@ #define MQTT_SERVER_IP "111.230.189.156" #define MQTT_SERVER_PORT "1883" -#define MQTT_PRODUCT_ID "Z774IYDTH0" -#define MQTT_DEV_NAME "ChinaMobileStandardBoard" -#define MQTT_CLIENT_ID "Z774IYDTH0ChinaMobileStandardBoard" -#define MQTT_USR_NAME "Z774IYDTH0ChinaMobileStandardBoard;12010126;RJW8Z;1614485713" -#define MQTT_PASSWORD "83c5188935eb67708ca5cf3245f4eb3f19b78004e6a0e7d438206939705fc808;hmacsha256" -#define MQTT_SUBSCRIBE_TOPIC "Z774IYDTH0/ChinaMobileStandardBoard/cmd" -#define MQTT_PUBLISH_TOPIC "Z774IYDTH0/ChinaMobileStandardBoard/gps" +#define MQTT_PRODUCT_ID "RUAP1R610V" +#define MQTT_DEV_NAME "supowang" +#define MQTT_CLIENT_ID "RUAP1R610Vsupowang" +#define MQTT_USR_NAME "RUAP1R610Vsupowang;21010406;12365;4294967295" +#define MQTT_PASSWORD "1371ae55cd1036f088bd7e39d230712bc3c32c40;hmacsha1" +#define MQTT_SUBSCRIBE_TOPIC "RUAP1R610V/supowang/data" +#define MQTT_PUBLISH_TOPIC "RUAP1R610V/supowang/data" #endif diff --git a/examples/tencent_os_mqtt/mqtt_example.c b/examples/tencent_os_mqtt/mqtt_example.c index bfe8fff4..dba436a6 100644 --- a/examples/tencent_os_mqtt/mqtt_example.c +++ b/examples/tencent_os_mqtt/mqtt_example.c @@ -4,6 +4,13 @@ #define USE_ESP8266 +static hal_uart_port_t esp8266_port = HAL_UART_PORT_0; + +void mqtt_set_esp8266_port(hal_uart_port_t port) { + esp8266_port = port; +} + + void mqtt_demo(void) { int count = 1; @@ -35,8 +42,8 @@ void mqtt_demo(void) sub_opt.topic = MQTT_SUBSCRIBE_TOPIC; #ifdef USE_ESP8266 - esp8266_sal_init(HAL_UART_PORT_1); - esp8266_join_ap("AceiPhone", "12345678"); + esp8266_sal_init(esp8266_port); + esp8266_join_ap("SheldonDai", "srnr6x9xbhmb0"); #endif #ifdef USE_NB_BC35 diff --git a/platform/hal/gd/gd32vf1xx/src/tos_hal_uart.c b/platform/hal/gd/gd32vf1xx/src/tos_hal_uart.c index 93732517..d12ae682 100644 --- a/platform/hal/gd/gd32vf1xx/src/tos_hal_uart.c +++ b/platform/hal/gd/gd32vf1xx/src/tos_hal_uart.c @@ -4,7 +4,7 @@ #include "usart.h" typedef struct __UART_HandleTypeDef { - hal_uart_port_t port; + hal_uart_port_t port; } UART_HandleTypeDef; @@ -19,20 +19,20 @@ __API__ int tos_hal_uart_init(hal_uart_t *uart, hal_uart_port_t port) } if (port == HAL_UART_PORT_0) { - uart->private_uart = &huart0; - usart0_init(115200); + uart->private_uart = &huart0; + usart0_init(115200); } else if (port == HAL_UART_PORT_1) { - uart->private_uart = &huart1; - usart1_init(115200); + uart->private_uart = &huart1; + usart1_init(115200); } else if (port == HAL_UART_PORT_2) { - uart->private_uart = &huart2; - usart2_init(115200); + uart->private_uart = &huart2; + usart2_init(115200); } else { - return -1; + return -1; } - uart->port = ((UART_HandleTypeDef*)(uart->private_uart))->port; + uart->port = ((UART_HandleTypeDef*)(uart->private_uart))->port; @@ -54,7 +54,8 @@ __API__ int tos_hal_uart_write(hal_uart_t *uart, const uint8_t *buf, size_t size uart_handle = (UART_HandleTypeDef *)uart->private_uart; for(size_t i=0; iport, buf[i]); + usart_data_transmit(uart_handle->port, buf[i]); + tos_task_delay(1); }