CC3200 RTOS MultiThreading

时间:2017-09-30 15:34:35

标签: c multithreading multitasking texas-instruments osi

我是创建任务的RTOS方法的新手。以前,我在Raspberry Pi上使用pthread,这使我能够同时运行2个任务,

1)每2秒通过套接字发送数据

2)每当从客户端发送数据时通过套接字接收数据

我想做同样的事情,但CC3200目前正在运行RTOS,我读到你只能暂停任务并运行另一个,但我需要同时运行。

我试着这样做:

osi_TaskCreate( WlanAPMode, \
                        (const signed char*)"wireless LAN in AP mode", \
                        OSI_STACK_SIZE, NULL, 1, NULL );
osi_TaskCreate( SendAnalogInputToClient, "Analog Input to Client",\
                                OSI_STACK_SIZE, NULL, 1, NULL );
osi_start();

但似乎我的第二项任务没有运行。有人有这方面的经验吗?

1 个答案:

答案 0 :(得分:0)

我认为您误解的是并发和执行任务/线程的一般概念。

Raspberry Pi和CC3200都有一个单核处理器 - 也就是说,它们的处理单元一次只能执行一条指令。与可能具有多个内核并且有时可以通过使用超线程执行两倍的线程的现代计算机不同,单核处理器由于其设计而不允许在任何给定时间执行多于一条指令。

你使用Raspberry Pi所做的只是运行多个“线程”,操作系统(我认为是Raspbian)“同时”执行。我把它们放在引号中,因为它们不是真正的线程,并发性并不真实。你只是给人一种并发的印象,因为两个程序共享处理器时间,尽管核心一次只执行一个程序。操作系统工作是在两个“线程”之间切换并给人以并发的印象。当处理单元切换到另一个任务并将其上下文加载到其寄存器时,它就是所谓的上下文切换。

CC3200和SYS / BIOS TI-RTOS的情况也是如此。在任何给定时刻只执行一项任务。程序员(或架构师)的工作是设计系统,以便为所有任务提供正确执行所需的处理时间。

您的代码在这里确实没有用,因为您正确地启动了任务。这是问题的任务源代码。我假设您的第一个任务从不睡眠/延迟/阻塞,它消耗100%的处理时间。这就是为什么你的第二个任务永远不会有机会跑。

这是一个很好的起点:http://processors.wiki.ti.com/index.php/SYS/BIOS_Online_Training