部件号:MSP-EXP432P401R
工具/软件:TI-RTOS
我正在使用最新的1.30 .00.40 SDK。 我将I2C主从示例加载到两个LaunchPad上,没有任何修改,一切都正常工作。 但只要我在从属端添加另一个线程,i2c通信就会中断。
我不知道我是否只是没有正确初始化新线程,但我基本上复制了主线程中的所有内容。 为了使其简单化,第二个线程所做的所有操作都是使LED闪烁。
另外,为什么不使用leep()或sleep()? 每当我叫这两个,似乎一切都停止了。
两个线程本身都能正常工作,只是不能一起工作。 我希望这只是我所忽视的一些愚蠢的事情,因为最终我需要两个i2c从属线程,一个i2c主线程(单独的总线),以及一些其他线程同时运行,如果我不能做这个简单的事情,我会有问题。 我已经在另一个项目中将i2c主线程正常运行,最终需要将所有内容集成到一起。 一次走一小步...
以下是从从属示例修改的main_tirtos.c,所有其他文件都保持不变:
/*
========= main_tirtos.c =========
*/
#include <stdint.h>
#include <unistd.h>
#include <ti/drivers/GPIC.h>/*
POSIX头文件*/
#include <pthread.h>/*
RTOS头文件*/
#include <ti/exterix BIOS/BIOS.h>/*
explet文件*/
#include "Board.h" sysn
void ximarg0*
线程中
的<void <ti/states#stack <ti/states#stack <void *0
#Define Delay 100万
int i;
/*调用驱动程序初始化函数*/
GPIO初始化();
而(1){
GPIO切换(Board_GPIO LED0);
//usleep (100万);//不起作用,为什么?? LED指示灯保持稳定
//睡眠(1);//也不工作,为什么?? LED指示灯保持稳定
对于(i=0; i<delay; i++){}//dusleydelay
}
}/*
==== 主====
*/
int main (void)
{
pthread_t 线程,虚拟线程;
pthread_attr_t. pAttrs,dummy_pAttrs;
结构sched_param priParam, dummy_priParam;
内部 Retc;
内部 分遣国;
/*调用驱动程序初始化函数*/
Board_initGeneral ();
/*设置优先级和堆栈大小属性*/
pthread_attr_init(&pAttrs);
pthread_attr_init(&dummy_pAttrs);
priParam.sched_priority = 1;
虚拟优先级Param.sched_priority = 1;
detachState = pthread_create_detach;
retc = pthread_attr_setdetachstate(&pAttrs, detachstate);
如果(retc !=0){
/* pthread_attr_setdetachstate()失败*/
同时(1);}
retc = pthread_attr_setdetachstate(&dummy_pAttrs, detachState);
如果(retc !=0){
/* pthread_attr_setdetachstate()失败*/
同时(1);}
pthread_attr_setschedparam(&pAttrs,&priParam);
pthread_attr_setschedparam(&Dummy_pAttrs,&dummy_priParam);
retc |= pthread_attr_setstacksize(&pAttrs, THREADSTACKSIZ);
如果(retc !=0){
/* pthread_attr_setstacksize()失败*/
同时(1);}
retc |= pthread_attr_setstacksize(&dummy_pAttrs, THREADSTACKSIZ);
如果(retc !=0){
/* pthread_attr_setstacksize()失败*/
同时(1);}
retc = pthread_create(&thread,&pAttrs, mainThread, NULL);
如果(retc !=0){
/* pthread_create()失败*/
同时(1);}
retc = pthread_create(&Dummy_Thread,&dummy_pAttrs,dummyThread,NULL);
如果(retc !=0){
/* pthread_create()失败*/
同时(1);}
BIOS_START();
返回(0);
}
谢谢。
另外,在另一篇文章中,我看到了SimpleLink学院中关于1.30 SDK的POSIX研讨会,但没有找到它。