CC3200 RTOS 多线程

标签 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();

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

最佳答案

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

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

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

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

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

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

关于CC3200 RTOS 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46504263/

相关文章:

c - va_arg 不适用于 double

c - _IOR的第三个参数的真正含义

Java同步-IllegalMonitorStateException

java - java中防止死锁的技巧

C++ 持有多个线程

objective-c - iOS后台任务完成编程

iOS 检查辅助应用程序是否滑过

c++ - 对 `sqlite3_open' 的 undefined reference 。我没主意了

ios - iOS中的后台录音

c++ - glibc 检测到错误