⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example-small.c

📁 Embedded Thread Library
💻 C
字号:
/** * This is a very small example that shows how to use * protothreads. The program consists of two protothreads that wait * for each other to toggle a variable. *//* We must always include pt.h in our protothreads code. */#include "pt.h"#include <stdio.h> /* For printf(). *//* Two flags that the two protothread functions use. */static int protothread1_flag, protothread2_flag;/** * The first protothread function. A protothread function must always * return an integer, but must never explicitly return - returning is * performed inside the protothread statements. * * The protothread function is driven by the main loop further down in * the code. */static intprotothread1(struct pt *pt){  /* A protothread function must begin with PT_BEGIN() which takes a     pointer to a struct pt. */  PT_BEGIN(pt);  /* We loop forever here. */  while(1) {    /* Wait until the other protothread has set its flag. */    PT_WAIT_UNTIL(pt, protothread2_flag != 0);    printf("Protothread 1 running\n");    /* We then reset the other protothread's flag, and set our own       flag so that the other protothread can run. */    protothread2_flag = 0;    protothread1_flag = 1;    /* And we loop. */  }  /* All protothread functions must end with PT_END() which takes a     pointer to a struct pt. */  PT_END(pt);}/** * The second protothread function. This is almost the same as the * first one. */static intprotothread2(struct pt *pt){  PT_BEGIN(pt);  while(1) {    /* Let the other protothread run. */    protothread2_flag = 1;    /* Wait until the other protothread has set its flag. */    PT_WAIT_UNTIL(pt, protothread1_flag != 0);    printf("Protothread 2 running\n");        /* We then reset the other protothread's flag. */    protothread1_flag = 0;    /* And we loop. */  }  PT_END(pt);}/** * Finally, we have the main loop. Here is where the protothreads are * initialized and scheduled. First, however, we define the * protothread state variables pt1 and pt2, which hold the state of * the two protothreads. */static struct pt pt1, pt2;intmain(void){  /* Initialize the protothread state variables with PT_INIT(). */  PT_INIT(&pt1);  PT_INIT(&pt2);    /*   * Then we schedule the two protothreads by repeatedly calling their   * protothread functions and passing a pointer to the protothread   * state variables as arguments.   */  while(1) {    protothread1(&pt1);    protothread2(&pt2);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -