中级会员
- 积分
- 299
- 金钱
- 299
- 注册时间
- 2015-10-21
- 在线时间
- 52 小时
|
本帖最后由 打洞者 于 2017-8-25 18:34 编辑
[mw_shl_code=c,true]
#include "includes.h"
/*
**********************************************************************************************************
函数声明
**********************************************************************************************************
*/
static void vTaskTaskUserIF(void *pvParameters);
static void vTaskLED(void *pvParameters);
static void AppTaskCreate (void);
/*
**********************************************************************************************************
变量声明
**********************************************************************************************************
*/
static TaskHandle_t xHandleTaskUserIF = NULL;
static TaskHandle_t xHandleTaskLED = NULL;
/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: 标准c程序入口。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
u8 *str = (u8*)"我就是esp8266!\n";
int main(void)
{
/* 硬件初始化 */
bsp_Init();
/* 关闭全局中断 */
__set_PRIMASK(1);
/* 创建任务 */
AppTaskCreate();
/* 启动调度,开始执行任务 */
vTaskStartScheduler();
while(1)
{
};
}
/*
*********************************************************************************************************
* 函 数 名: vTaskTaskUserIF
* 功能说明: 接口消息处理,这里用作LED闪烁
* 形 参: pvParameters 是在创建该任务时传递的形参
* 返 回 值: 无
*********************************************************************************************************
*/
static void vTaskTaskUserIF(void *pvParameters)
{
while(1)
{
bsp_LedToggle(1);
esp8266_apsta_test(str); //esp8266发送数据
vTaskDelay(500);
}
}
/*
*********************************************************************************************************
* 函 数 名: vTaskLED
* 功能说明: LED闪烁
* 形 参: pvParameters 是在创建该任务时传递的形参
* 返 回 值: 无
* 优 先 级: 2
*********************************************************************************************************
*/
static void vTaskLED(void *pvParameters)
{
while(1)
{
bsp_LedToggle(2);
vTaskDelay(200);
}
}
/*
*********************************************************************************************************
* 函 数 名: AppTaskCreate
* 功能说明: 创建应用任务
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void AppTaskCreate (void)
{
xTaskCreate( vTaskTaskUserIF, /* 任务函数 */
"vTaskUserIF", /* 任务名 */
512, /* 任务栈大小,单位word,也就是4字节 */
NULL, /* 任务参数 */
4, /* 任务优先级*/
&xHandleTaskUserIF ); /* 任务句柄 */
xTaskCreate( vTaskLED, /* 任务函数 */
"vTaskLED", /* 任务名 */
512, /* 任务栈大小,单位word,也就是4字节 */
NULL, /* 任务参数 */
2, /* 任务优先级*/
&xHandleTaskLED ); /* 任务句柄 */
__set_PRIMASK(0); //开启全局中断
}
[/mw_shl_code]
[mw_shl_code=c,true]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);
}[/mw_shl_code]
【问题描述】
问题出在第 68 行代码 esp8266_apsta_test(str);
工程中未加入 该函数,即未加入函数 esp8266_apsta_test(str) 到 vTaskTaskUserIF() 或 vTaskLED() 任务中
1)整个工程运行正常, LED 闪烁。
2.将函数 esp8266_apsta_test(str) 放入 vTaskTaskUserIF() 或 vTaskLED() 任务中
1)把任务延时函数 vTaskDelay(n) 注释掉,则该函数所在任务运行正常,其他任务不执行。不论 vTaskTaskUserIF() 或 vTaskLED()
哪个优先级高哪个低,但调试结果是高优先级任务并未打断低优先级任务而执行。
2)不注释任务延时函数 vTaskDelayt(n),从调试结果看所有的任务包括空闲任务依次执行一遍,然后系统就挂了。
【分析】
由未加入函数 esp8266_apsta_test(str) 前调试结果,LED 闪烁工作正常,说明操作系统任务切换无问题
由加入函数 esp8266_apsta_test(str) 后调试结果,推出函数 esp8266_apsta_test(str) 所在任务空间足够或系统栈空间不够
【已采取的解决办法】
改变栈空间大小,系统栈和任务栈改变均无作用,结果依旧
|
|