[软件资料] 多线程系统

[复制链接]
874|4
 楼主| jf101 发表于 2024-7-23 09:00 | 显示全部楼层 |阅读模式

多线程系统的事件响应也是在中断中完成的,但事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执行。
当一个紧急的事件在中断被标记之后,如果事件对应的线程的优先级足够高,就会立马得到响应。相比其他裸机系统,多线程系统的实时性又被提高了。
多线程系统大概的伪代码具体见代码清单所示:
  1. int flag1 = 0;
  2. int flag2 = 0;
  3. int flag3 = 0;

  4. int main(void)
  5. {
  6. /* 硬件相关初始化 */
  7. HardWareInit();

  8. /* OS 初始化 */
  9. RTOSInit();

  10. /* OS 启动,开始多线程调度,不再返回 */
  11. RTOSStart();

  12. while(1);/* 程序不会执行到这里 */
  13. }

  14. void ISR1(void)
  15. {
  16. /* 置位标志位 */
  17. flag1 = 1;
  18. }

  19. void ISR2(void)
  20. {
  21. /* 置位标志位 */
  22. flag2 = 2;
  23. }

  24. void ISR3(void)
  25. {
  26. /* 置位标志位 */
  27. flag3 = 1;
  28. }

  29. void DoSomething1(void)
  30. {
  31. /* 无限循环,不能返回 */
  32. for (;;) {
  33.    /* 线程实体 */
  34.    if (flag1) {

  35.    }
  36. }
  37. }

  38. void DoSomething2(void)
  39. {
  40. /* 无限循环,不能返回 */
  41. for (;;) {
  42.    /* 线程实体 */
  43.    if (flag2) {

  44.    }
  45. }
  46. }

  47. void DoSomething3(void)
  48. {
  49. /* 无限循环,不能返回 */
  50. for (;;) {
  51.    /* 线程实体 */
  52.    if (flag3) {

  53.    }
  54. }
  55. }

相比前后台系统中后台顺序执行的程序主体,在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程。
每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,我们在编程的时候不需要精心地去设计程序的执行流,不用担心每个功能模块之间是否存在干扰。
加入了操作系统,我们的编程反而变得简单了。整个系统随之带来的额外开销就是操作系统占据的那一丁点的FLASH和RAM。现如今,单片机的 FLASH和RAM是越来越大,完全足以抵挡RTOS那点开销。

中国龙芯CDX 发表于 2024-7-26 22:52 | 显示全部楼层
每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。
szt1993 发表于 2024-7-27 12:45 | 显示全部楼层
多线程系统中,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程
forgot 发表于 2024-7-30 14:33 | 显示全部楼层
单片机的 FLASH和RAM是越来越大,完全足以抵挡RTOS那点开销。
LOVEEVER 发表于 2024-8-12 13:39 | 显示全部楼层
每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

262

主题

1929

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部