在PIC18上使用C的多线程

M3.*_*M3. 7 c embedded multithreading pic pic18

在编写PIC18时,如何创建并行运行的线程,因为没有操作系统?

jan*_*anm 12

不要使用线程,使用事件循环.

PIC18是一个小型处理器,基于事件循环的风格意味着您不必保留许多深层堆栈.您需要根据事件循环编写代码,但这可能是合理的.

如果确实有一些长时间运行的任务,请使用不同的中断优先级,以允许更高优先级的事件循环抢占低优先级事件循环,并将适当类型的工作放入适当的事件队列中.


Wer*_*sey 9

您可以尝试合作多任务处理.

对于PIC解决的问题类型,如果您尝试使用中断或轮询而不是多线程的其他设计,您可能会更好.


Mar*_*off 6

你可以在那里放一个RTOS(有一个非官方的ucOS端口,或者你可以查看FreeRTOS的PIC18端口).

否则,您可以尝试使用和在C中实现协同程序.setjmplongjmp


unw*_*ind 5

如果根本没有操作系统,你(显然)必须自己重新创建必要的功能.

最简单的方法可能是安装以某个合适频率运行的定时器中断(可能取决于您的实际时钟速度,但可能在100-1000 Hz范围内).在中断处理程序中,您需要检查当前线程的状态,并确定是否应该进行切换.

然后诀窍是在必要时进行切换,并从中断处理程序返回到另一个线程.

当然,当线程本身可能使用中断时,让它工作并不一定容易.

您还可以考虑安装一些内核,也许是Contiki.

以下是PIC18的"protothreads"示例,看起来像是一个合理数量的代码.但是不确定语义.

更新:这可能需要你在汇编程序中执行一些最低级别的代码(我不确定,在PIC上没有使用C,所以我不确切知道你得到了多少控制权).您将需要控制程序计数器的寄存器,而这些不是C概念.