使用 RTXos 任务执行一次就挂了 ,请教各位帮忙分析[s:130]
部分代码如下- #include "sys.h"
- #include "delay.h"
- #include "usart1.h"
- #include "led.h"
- #include "esp8266.h"
- #include "RTL.h"
- u8 *str = "我就是esp8266!\n";
- static uint64_t AppTaskLEDStk[256/8*5];
- static uint64_t AppTaskStartStk[256/8*5];
- OS_TID HandleTaskLED = 0;
- __task void AppTaskStart(void);
- int main()
- {
- Stm32_Clock_Init(9);
- delay_init(72);
- LED_Init();
- usart1_init(460800);
- esp8266_apsta_mode1();
- esp8266_echo(OFF);
-
- os_sys_init_user( AppTaskStart,
- 3,
- &AppTaskStartStk,
- sizeof(AppTaskStartStk));
-
- while(1);
- }
- __task void AppTaskLED(void)
- {
- while(1)
- {
- LED1 = !LED1;
- esp8266_apsta_test(str);
- os_dly_wait(100);
- }
- }
- static void AppTaskCreate(void)
- {
- HandleTaskLED = os_tsk_create_user( AppTaskLED,
- 5,
- &AppTaskLEDStk,
- sizeof(AppTaskLEDStk));
- }
- __task void AppTaskStart(void)
- {
- AppTaskCreate();
-
- while(1)
- {
- LED0 = !LED0;
- os_dly_wait(50);
- }
- }
复制代码- void esp8266_apsta_test(u8 *p)
- {
- while(esp8266_send_cmd("AT+CIPSEND=15",">",20));//send a fixed-length data
- esp8266_send_data(p,"SEND OK",200);
- }
复制代码
【问题描述】
问题出在第 41 行代码 esp8266_apsta_test(str);
[li]工程中未加入 该函数,即未加入函数 esp8266_apsta_test(str) 到 AppTaskLED() 或 AppTaskStart() 任务中[/li]
1)整个工程运行正常, LED 闪烁。
2.将函数 esp8266_apsta_test(str) 放入 AppTaskLED() 或 AppTaskStart() 任务中
1)把任务延时函数os_dly_wait(n) 注释掉,则该函数所在任务运行正常,其他任务不执行。不论 AppTaskLED() 或 AppTaskStart()
哪个优先级高哪个低,但调试结果是高优先级任务并未打断低优先级任务而执行。
2)不注释任务延时函数os_dly_wait(n),从调试结果看所有的任务包括空闲任务依次执行一遍,然后系统就挂了。
【分析】
[li]由未加入函数 esp8266_apsta_test(str) 前调试结果,LED 闪烁工作正常,说明操作系统任务切换无问题[/li][li]由加入函数 esp8266_apsta_test(str) 后调试结果,推出函数 esp8266_apsta_test(str) 所在任务空间足够或系统栈空间不够[/li]
【已采取的解决办法】
[li]改变栈空间大小,系统栈和任务栈改变均无作用,结果依旧[/li] |