volatile int16_t quantity = 100; // 食物的剩余数量
volatile int16_t eatenCount=0; // 总共吃掉的实物数量
// 吃货线程
void foodie_task(void *param_t){
int16_t eaten = 0; // 吃掉的食物累计
while(1){
int16_t qua = quantity; // 取得剩余库存
vTaskDelay(pdMS_TO_TICKS(random(10,100)));
if(quantity>0){
// 吃掉食物
quantity = qua-1;
eaten ++;
eatenCount++;
}else{
// 没有实物了,吃货离开
printf("------> 没食物了,我一共吃掉: %d个\n",eaten);
vTaskDelete(NULL);
}
}
}
// 厨师,随时查看食物的剩余情况
void chef_task(void *param_t){
while(1){
printf("食物剩余量 : %d\n", quantity);
printf("吃掉的食物 :%d\n", eatenCount);
if(quantity<=0){
printf("---=== 店铺打烊 ===---\n");
printf("被吃掉的食物 :%d\n", eatenCount);
printf("-----------------------\n");
vTaskDelete(NULL);
}
vTaskDelay(pdMS_TO_TICKS(100));
}
}
void setup() {
Serial.begin(115200);
xTaskCreate(foodie_task, "Foodie1", 1024*4, NULL, 1, NULL);
xTaskCreate(foodie_task, "Foodie2", 1024*4, NULL, 1, NULL);
xTaskCreate(chef_task, "Chef", 1024*4, NULL, 1, NULL);
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1