当前位置: 首页 > wzjs >正文

英文网站建设网站独立站seo

英文网站建设网站,独立站seo,驾校做网站,成人学电脑培训班哪里有[8-2-2] 队列实验_多设备玩游戏(红外改造)_重录 在这节课程中,我们将通过改造之前的程序,引入队列来优化多设备交互的游戏体验。之前的程序使用的是环形缓冲区,这种方式CPU资源利用率较低。我们将通过引入队列,改进数据传输的效率…

[8-2-2] 队列实验_多设备玩游戏(红外改造)_重录

在这节课程中,我们将通过改造之前的程序,引入队列来优化多设备交互的游戏体验。之前的程序使用的是环形缓冲区,这种方式CPU资源利用率较低。我们将通过引入队列,改进数据传输的效率,并提高音乐播放和游戏控制的流畅度。接下来,我将带你逐步实现这个改进,讲解每个步骤的原理和改动。

1. 初始程序的分析

首先,我们回顾一下之前的程序框架。原程序的结构如下:

  • 球的链路:控制球的运动和与墙壁、挡板的碰撞。
  • 挡球板的链路:通过读取红外遥控器的按键,控制挡球板的左右移动。

1.1 使用环形缓冲区的问题

在原程序中,挡球板的控制链路是通过环形缓冲区来读取红外遥控器的数据。当读取不到数据时,它会一直循环等待,这导致了CPU的资源被浪费,从而影响了系统的响应时间,尤其是导致音乐播放卡顿。

2. 引入队列进行改造

我们决定将环形缓冲区替换为队列,这样可以解决CPU资源浪费的问题,并提高数据传输效率。队列不仅提供了阻塞和唤醒机制,还能够有效地管理任务间的数据传输。

2.1 队列的使用

我们将通过以下步骤改造程序:

  1. 创建队列:在程序中创建队列来替代环形缓冲区。
  2. 中断中写队列:在红外遥控器的中断服务程序中,将数据写入队列。
  3. 任务读取队列:挡球板的链路将从队列中读取数据,来控制挡球板的移动。

2.2 队列创建与操作

使用队列的基本步骤如下:

  • 创建队列:我们首先需要创建一个队列来存放数据。
  • 写入队列:在红外遥控器的中断服务程序中,将数据写入队列。
  • 读取队列:在挡球板的任务链路中读取队列数据,来控制挡球板的移动。
xQueueHandle queue;
queue = xQueueCreate(10, sizeof(int));  // 创建队列,最多存10个数据// 向队列写入数据
int data = 1;
xQueueSend(queue, &data, portMAX_DELAY);// 从队列读取数据
int receivedData;
xQueueReceive(queue, &receivedData, portMAX_DELAY);

3. 改造红外遥控器和旋转编码器的输入

3.1 红外遥控器的数据传输

在原程序中,红外遥控器的数据是通过环形缓冲区传递的。我们将其改为通过队列传递数据。在中断服务程序中解析出数据后,直接写入队列。

// 红外中断服务程序
void IR_ISR() {int data = read_ir_data();xQueueSend(queue, &data, portMAX_DELAY);  // 写入队列
}

3.2 旋转编码器的数据传输

为了进一步优化,我们还引入了旋转编码器。旋转编码器能够提供更高效的输入,减少响应延迟。旋转编码器的数据将通过另一个队列传递,避免与红外遥控器的数据冲突。

// 旋转编码器中断服务程序
void Encoder_ISR() {int speed = read_encoder_speed();xQueueSend(encoderQueue, &speed, portMAX_DELAY);  // 写入队列
}

3.3 任务读取旋转编码器的数据

为了实现更流畅的挡球板控制,我们将根据旋转编码器的速度来调整挡球板的移动。如果旋转速度快,我们将写入多个数据以增加挡球板的移动速度。

// 任务读取旋转编码器的数据并调整挡球板位置
void adjust_paddle_position() {int speed;if (xQueueReceive(encoderQueue, &speed, portMAX_DELAY)) {if (speed > THRESHOLD) {// 快速旋转,增加移动幅度move_paddle(speed);} else {// 慢速旋转,移动幅度小move_paddle(speed / 2);}}
}

4. 队列的改进:阻塞与唤醒机制

通过使用队列,我们能够提高系统的响应效率。队列的阻塞机制保证了当没有数据可读取时,任务会被阻塞,避免了不必要的CPU消耗。队列的唤醒机制确保了当数据可用时,阻塞的任务会被唤醒,继续执行。

4.1 队列阻塞与唤醒

  • 阻塞:当队列为空时,任务会被阻塞,等待数据的到来。
  • 唤醒:当队列有新数据时,任务会被唤醒并继续执行。

5. 最终效果:更流畅的游戏控制

通过改造后,队列的使用不仅提高了系统的效率,还使得游戏体验更加流畅。通过旋转编码器,我们减少了红外遥控器输入的延迟,使得挡球板的控制更加精确和快速。队列的阻塞与唤醒机制也确保了CPU的高效利用。

5.1 流畅的音乐播放与游戏控制

在程序改进后,音乐播放不再受到影响,同时也能顺利控制挡球板。每当我们按下红外遥控器的按钮或旋转编码器时,系统都会快速响应,控制挡球板的移动,而不会卡顿。

6. 总结

通过这次队列实验,我们成功地优化了原有的程序,使用队列替代了环形缓冲区,不仅提升了数据传输的效率,还改进了系统的响应时间。通过引入旋转编码器,我们进一步提高了挡球板控制的精度和流畅度。

希望通过这篇博客,你能够理解队列在多设备协作中的应用,并掌握如何利用队列优化任务间的数据传输。通过这些技巧,你可以为其他实时任务和多设备系统提供更高效的解决方案。


这篇博客详细介绍了队列的改造过程,并展示了如何通过队列优化游戏控制和音乐播放。希望你能够将这些概念应用到实际开发中,提升你在多任务和多设备环境下的编程能力。

http://www.dtcms.com/wzjs/209268.html

相关文章:

  • 导航网站开发工具seo深度解析
  • 制作公司网站教程适合小学生的最新新闻
  • wordpress已停止访问营销网站优化推广
  • 什么网站能免费做简历百度seo2022新算法更新
  • 备案通过网站还是打不开个人网站设计图片
  • 成都网站建设公司百度指数查询工具
  • 捡个校花做老婆是哪个网站的昆明seo工资
  • 医院网站建设多少钱网站推广方案有哪些
  • 建立网站需要准备的材料免费b站推广网站2022
  • 网站开发设计费用吸引人的软文标题
  • 做网站应规避的风险精准营销及推广
  • 英文网站怎么做一键生成app制作器
  • 江西建网站做优化seo价格是多少
  • 百度多久收录一次网站网站优化推广公司排名
  • 各大网站查重率比较最近有新病毒出现吗
  • 手把手做网站济宁网站建设
  • 手机门户网站开发太原seo服务
  • wordpress企业网站教程安卓排名优化
  • 网站生成软件湖北百度推广电话
  • seo顾问咨询网站seo推广计划
  • 高端做网站公司东莞做网站哪个公司好
  • 北京市怀柔区住房城乡建设委网站搜索引擎推广的关键词
  • 中文网站做google广告好吗免费的seo
  • 深圳企业网站建设公司windows优化大师是什么
  • 网站建设游戏网站制作的基本流程是什么
  • 网站开发现状及研究意义收录
  • 广州网站建设第一公司站长工具是什么意思
  • 硅塑胶 东莞网站建设南宁百度seo排名
  • 微信小程序开发注意事项seo网络推广培训班
  • 百度自助网站建设百度关键词搜索引擎