0

我是创建任务的 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();

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

4

1 回答 1

0

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

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

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

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

您的代码在这里并没有真正的帮助,因为您正在正确启动任务。问题在于任务源代码。我假设您的第一个任务永远不会休眠/延迟/阻塞,它会消耗 100% 的处理时间。这就是为什么您的第二个任务永远没有机会运行的原因。

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

于 2017-10-24T10:35:51.597 回答