“线程: CC3235SF”中讨论的其它部件
大家好。
使用 CC3235MOASF 模块的 TIRTOS 时出现以下问题。
我的代码很简单。 它以 AP 模式启动,在提供凭据后,它会自动切换到工作站模式,然后连接到互联网。之后,它会自动连接到 MQTT 服务器。
有效的代码 如下所示
主要内容-----------------
/*
*========= 主要=========
*
Int main (无效)
{
pthread_t 线程;
pthread_attr_t pAttrs;
结构 sched_param priParam;
内部延迟;
国际 detachState;/*呼叫板初始化函数*/
Board_init();/*设置优先级和堆栈大小属性*/
pthread_attr_init (&pAttrs);
priParam.sched_priority = 1;detachState = pthread_create_detached;
retc = pthread_attr_setdetachstate (&pAttrs,detachState);
IF (retc!= 0)
{
/* pthread_attr_setdetachstat()失败*/
while (1){}
}pthread_attr_setschedparam (&pAttrs,&prParam);
retc |= pthread_attr_setstacksize (&pAttrs,THREADSTACCKSIZE);
IF (retc!= 0)
{
/* pthread_attr_setstacksize()失败*/
while (1){}
}retc = pthread_create (&thread,&pAttrs,mainThread,NULL);
IF (retc!= 0)
{
/* pthread_create()失败*/
while (1){}
}BIOS_START();
返回(0);
}--- 然后在 threes.c 中------
/*
*========= 主要任务=========
*
void *主线程(void *arg)
{
pthread_attr 属性;
pthread_attr_t pattrs_spawn;结构 sched_param priParam;
内部延迟;/*初始化 GPIO,因为多个线程正在使用它*/
GPIO 初始化();I2C_INIT();
InitTerm ();
//为 UART 输出配置显示模块
display_init();Display = Display_open (Display_Type_host,空);
如果(显示== NULL)为{
//无法打开显示模块//
While (1);
}/*初始化应用程序变量*/
retc = initAppVariables();
/*使用默认值初始化属性结构
*每条线程
*数字越高,TI-RTOS 的优先级就越高。
*设置优先级,分离状态和堆栈大小属性
*
/*创建 SL_Task */pthread_attr_init (&pattrs_spawn);
priParam.sched_priority = spawn_task_priority;
retc = pthread_attr_setschedparam(&pattrs_spawn,&priParam);
retc |= pthread_attr_setstacksize (&pattrs_spawn,SL_TASKSTACKSIZE);
retc |= pthread_attr_setdetachstate (&pattrs_spawn,pthread_create_detached);
retc = pthread_create (&spawn_thread,&pattrs_spawn,SL_Task,NULL);
如果(retc!= 0){
//Display_printf (display,0,0,"[网络] wifi 初始化:无法创建简化任务\n\r\n 系统将重启\n");
mcuReboot();While (1);
}
pthread_attr_init(&atts);/*---- HTTP 服务器线程------------------------ *
priParam.sched_priority = 3;
pthread_attr_setschedparam (&atts,&priParam);
retc |= pthread_attr_setstacksize (&atts,HTTP_stack_size);
IF (retc)
{
//Display_printf (display,0,0,“无法配置置备任务线程参数\n");
While (1);
}
retc = pthread_create(&http_thread,&atts, httpserverTask, NULL);
如果(retc!= 0)为{
// pthread_create()失败
同时(1);
}
/*----- MQTT 客户端线程---------------------------------------------------- *priParam.sched_priority = 4;
pthread_attr_setschedparam (&atts,&priParam);
retc |= pthread_attr_setstacksize (&atts,MQTT_stack_size);
IF (retc)
{
//Display_printf (display,0,0,“无法配置置备任务线程参数\n");
While (1);
}
retc = pthread_create(&MQTT_thread,&atts, mqttTask, NULL);
IF (retc!= 0)
{
// pthread_create()失败
While (1);
}
/*------------- 网络线程------------------------ *priParam.sched_priority = 5;
pthread_attr_setschedparam (&atts,&priParam);
retc |= pthread_attr_setstacksize (&atts,netwrok_stack_size);
IF (retc)
{
//Display_printf (display,0,0,“无法配置置备任务线程参数\n");
While (1);}
retc = pthread_create (&network_thread,&atts,networkTask,NULL);
IF (retc!= 0)
{
// pthread_create()失败
While (1);
}
/*------------- ADC 线程----------------------- *
/*
priParam.sched_priority = 1;
pthread_attr_setschedparam (&atts,&priParam);
retc |= pthread_attr_setstacksize (&atts,adc_stack_size);
IF (retc)
{
//Display_printf (display,0,0,“无法配置置备任务线程参数\n");
While (1);}
retc = pthread_create (&ADC_THread,&atts,ADCThread,NULL);
IF (retc!= 0)
{
// pthread_create()失败
While (1);
}*
返回(0);
}
-----
现在的问题是:
如果 ADC 线程未注释,则代码不会连接到 MQTT 服务器。
即使 ADC 线程刚刚遇到一个哑指令,但该指令工作正常(就像闪烁的 LED)。
我尝试使用控制外围设备的其他线程,但与 MQTT 服务器的连接也停止工作。
有趣的是,如果您先断电再通电,该模块会自动进入工作站模式,并确实连接到 MQTT 服务器,所有线程都工作正常。
换言之,我需要的代码有效,除非我添加了一些额外的线程,如 ADC 或外设管理线程。 我无法快速访问真实原型中的重置按钮。
帮助。
此致,请提前感谢!