Part Number: CC3220SF
Tool/software: TI-RTOS
Hi,
I'm working for the first time with TI-RTOS. I'm creating simple multi-level thread program with "simplelink cc32xx sdk; Version :2_20_00_10".
I referred the examples in "simplelink_cc32xx_sdk_2_20_00_10\examples\rtos\CC3220SF_LAUNCHXL\drivers" and created the "main thread".
Inside the mainThread, i'm creating another thread(DU_ControlThread) using POSIX thread functions. Inside the thread i'm calling a simple function inside infinite while loop which will update a temperature value in HMI via UART . But this function is not updating properly.
If i call the same function from the mainThread itself, then it is working fine.
I've attached the code for your ref.
Can anyone help me what is going wrong
Regards,
Black
/*
* Copyright (c) 2016-2018, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* ======== main_tirtos.c ========
*/
#include <stdint.h>
/* POSIX Header files */
#include <pthread.h>
/* RTOS header files */
#include <ti/sysbios/BIOS.h>
/* Example/Board Header files */
#include "Board.h"
extern void *mainThread(void *arg0);
/* Stack size in bytes */
#define THREADSTACKSIZE 1024*4
/*
* ======== main ========
*/
int main(void)
{
pthread_t thread;
pthread_attr_t attrs;
struct sched_param priParam;
int retc;
int detachState;
/* Call driver init functions */
Board_initGeneral();
/* Set priority and stack size attributes */
pthread_attr_init(&attrs);
priParam.sched_priority = 1;
detachState = PTHREAD_CREATE_DETACHED;
retc = pthread_attr_setdetachstate(&attrs, detachState);
if (retc != 0) {
/* pthread_attr_setdetachstate() failed */
while (1);
}
pthread_attr_setschedparam(&attrs, &priParam);
retc |= pthread_attr_setstacksize(&attrs, THREADSTACKSIZE);
if (retc != 0) {
/* pthread_attr_setstacksize() failed */
while (1);
}
retc = pthread_create(&thread, &attrs, mainThread, NULL);
if (retc != 0) {
/* pthread_create() failed */
while (1);
}
BIOS_start();
return (0);
}
/*
* DU_Thread.c
*
* Created on: Mar 9, 2019
* Author: KarikalanKabilan
*/
#include "DU_Common.h"
#include "hmi_StateMachine/hmiNextionCfg.h"
extern eHMIScreen g_eHMIScreenState;
extern Display_Handle display;
extern void *hmiThread(void *arg0);
extern void DU_ThermoControlThread();
extern void DU_pHControlThread();
void *DU_ControlThread(void *arg0)
{
while(1)
{
sleep(1);
DU_ThermoControlThread();
// DU_pHControlThread();
}
}
void *mainThread(void *arg0)
{
pthread_t hmiThreadId;
pthread_t DU_ControlThreadId;
GPIO_init();
DU_UartInit();
DU_AdcInit();
g_eHMIScreenState = MainScreen;
// pthread_create(&hmiThreadId, NULL, hmiThread, NULL);
pthread_create(&DU_ControlThreadId, NULL, DU_ControlThread, NULL);
// pthread_join(hmiThreadId, NULL);
pthread_join(DU_ControlThreadId, NULL);
}
/*
* DU_Thread.c
*
* Created on: Mar 9, 2019
* Author: KarikalanKabilan
*/
#include "DU_Common.h"
#include "hmi_StateMachine/hmiNextionCfg.h"
extern eHMIScreen g_eHMIScreenState;
extern Display_Handle display;
extern void *hmiThread(void *arg0);
extern void DU_ThermoControlThread();
extern void DU_pHControlThread();
void *DU_ControlThread(void *arg0)
{
// while(1)
// {
// sleep(1);
// DU_ThermoControlThread();
// // DU_pHControlThread();
// }
}
void *mainThread(void *arg0)
{
pthread_t hmiThreadId;
pthread_t DU_ControlThreadId;
GPIO_init();
DU_UartInit();
DU_AdcInit();
g_eHMIScreenState = MainScreen;
// pthread_create(&hmiThreadId, NULL, hmiThread, NULL);
// pthread_create(&DU_ControlThreadId, NULL, DU_ControlThread, NULL);
while(1)
{
sleep(1);
DU_ThermoControlThread();
}
// pthread_join(hmiThreadId, NULL);
// pthread_join(DU_ControlThreadId, NULL);
}