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

英文网站建设网站龙岗网站推广

英文网站建设网站,龙岗网站推广,做网络写手赚钱的网站,重庆城乡建设委员会[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/493164.html

相关文章:

  • 网站建设小程序开发合肥网站seo公司
  • 成都 网站建设培训哪里做网站便宜
  • 泸州大浪科技做网站免费推广网址
  • 爱站网是怎么回事百度云搜索
  • 简述如何对网站进行推广?爱站网关键词搜索
  • 网店设计方案计划书北京网站建设东轩seo
  • 宝塔怎么做两个网站苏州网站建设书生商友
  • 深圳罗湖网站建设企点
  • jsp怎么做网站的删除如何注册域名网站
  • 东莞市建设质量监督站代写文章兼职
  • .net网站开发实例百度一下下载安装
  • app专业定制开发seo技巧与技术
  • 做网站公司大连seo网站培训
  • wordpress标题太长南宁白帽seo技术
  • 网站怎么做值班表舆情服务网站
  • 在网站上做教学直播平台多少钱宁波seo优化流程
  • 让别人做网站需要注意什么问题信阳搜索引擎优化
  • 加强部门网页建设网站优化建设
  • 长沙网站制作公司有哪些sem和seo有什么区别
  • 做外卖的网站2023重大新闻事件10条
  • 网页电子书在线阅读器wordpressseo关键词快速排名介绍
  • 网站上如何做相关推荐铁力seo
  • 湛江网站建设皆选小罗24专业广告网络
  • 百度做网站刷排名2024很有可能再次封城吗
  • 龙溪营销型网站制作百度一下官网页
  • 网站建设大量定制阶段想学网络营销怎么学
  • 网页版梦幻西游仙玉做什么划算深圳关键词推广优化
  • 徐州企业免费建站seo咨询解决方案
  • 旅游网站规划设计宁波网站推广营销
  • web.py网站开发seo外包公司优化