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

无锡网站建设培训学校网站开发与维护项目招标

无锡网站建设培训学校,网站开发与维护项目招标,网站网站开发不存储数据犯法吗,一个服务器做一样的网站文章目录 前言一、队列基本使用二、如何分辨数据源三、传输大块数据总结 前言 上篇文章我们已经讲解了队列的概念和队列相关的API函数#xff0c;那么本篇文章的话就开始带大家来学习使用队列。 一、队列基本使用 这个例子将会创建三个任务#xff0c;其中两个任务用来发送… 文章目录 前言一、队列基本使用二、如何分辨数据源三、传输大块数据总结 前言 上篇文章我们已经讲解了队列的概念和队列相关的API函数那么本篇文章的话就开始带大家来学习使用队列。 一、队列基本使用 这个例子将会创建三个任务其中两个任务用来发送数据到队列中另一个任务用来从队列中读取数据。 void Task1Function(void * param) {int val;while (1){val 100;xQueueSend(xQueueCalcHandle, val, 0);vTaskDelay(1000);} }void Task2Function(void * param) {int val;while (1){val 200;xQueueSend(xQueueCalcHandle, val, 0);vTaskDelay(1000);} }void Task3Function(void * param) {int val;const TickType_t xTicksToWait pdMS_TO_TICKS( 100UL );BaseType_t xStatus;while (1){xStatus xQueueReceive(xQueueCalcHandle, val, xTicksToWait);if( xStatus pdPASS ){/* 读到了数据 */printf( Received %d\r\n, val );} else{/* 没读到数据 */printf( Could not receive from the queue.\r\n );} } }xQueueCalcHandle xQueueCreate(5, sizeof(int));xTaskCreate(Task1Function, Task1, 100, NULL, 1, NULL); xTaskCreate(Task2Function, Task2, 100, NULL, 1, NULL); xTaskCreate(Task3Function, Task3, 100, NULL, 2, NULL); 运行效果 从运行效果中可以看出当队列中有数据的时候就能够从队列中读取到数据当队列中没有数据时超时后会返回pdFALSE。 这里使用百问网的一张图片来描述这个过程 二、如何分辨数据源 通过上面这个实验我们完成了队列数据的发送和队列数据的接收但是我们无法得知数据是哪个队列所发送的那么下面这个实验就带大家来完成分辨数据源的实验。 前面的实验中我们使用单独的一个int变量来代表数据这样的话只能接收到对应的数据而无法分辨是谁发过来的数据那么有什么办法来分辨是谁发来的数据呢 这里的解决方法是使用结构体 typedef enum {Task1,Task2 }ID_t;typedef struct data {ID_t id;int data; }Data_t;static Data_t senddata[2] {{Task1, 10},{Task2, 20} };void Task1Function(void * param) {while (1){xQueueSend(xQueueCalcHandle, senddata[0], 0);vTaskDelay(1000);} }void Task2Function(void * param) {while (1){xQueueSend(xQueueCalcHandle, senddata[1], 0);vTaskDelay(1000);} }void Task3Function(void * param) {Data_t mydata;const TickType_t xTicksToWait pdMS_TO_TICKS( 100UL );BaseType_t xStatus;while (1){xStatus xQueueReceive(xQueueCalcHandle, mydata, xTicksToWait);if( xStatus pdPASS ){/* 读到了数据 */if(mydata.id Task1){printf(this is Task1 data :%d\r\n, mydata.data);}else{printf(this is Task2 data :%d\r\n, mydata.data);}} else{/* 没读到数据 */printf( Could not receive from the queue.\r\n );} } }xQueueCalcHandle xQueueCreate(5, sizeof(Data_t));xTaskCreate(Task1Function, Task1, 100, NULL, 1, NULL); xTaskCreate(Task2Function, Task2, 100, NULL, 1, NULL); xTaskCreate(Task3Function, Task3, 100, NULL, 2, NULL);当接收到数据时会先判断结构体中的id通过id来判断是哪个任务发送过来的数据。 运行效果 三、传输大块数据 FreeRTOS 中的队列通常使用数据拷贝来传递数据。这意味着当你将数据发送到队列或从队列接收数据时队列会在内部复制数据的副本而不是传递指向原始数据的指针。 这种数据拷贝的方法确保了数据的安全性和一致性因为多个任务可以独立访问它们自己的副本而不会干扰其他任务。然而需要注意的是数据拷贝可能会引入一些性能开销尤其是在处理大量数据时。 那么当使用队列来传输大量数据时该怎么做呢 这里我们可以使用指针来解决这个问题传递大块数据的时候我们可以使用指针来解决这个问题在传输大块数据时可以先得到数据的地址将数据的地址作为数据传递过来当接收到数据的地址时就能够通过数据的地址来得到对应的数据了。 示例 char pcbuffer[100] Hello World;void Task1Function(void * param) {char* buffer;while (1){buffer pcbuffer;xQueueSend(xQueueCalcHandle, buffer, 0);vTaskDelay(1000);} }void Task2Function(void * param) {char* buffer;while (1){buffer pcbuffer;xQueueSend(xQueueCalcHandle, buffer, 0);vTaskDelay(1000);} }void Task3Function(void * param) {char* rebuffer;const TickType_t xTicksToWait pdMS_TO_TICKS( 100UL );BaseType_t xStatus;while (1){xStatus xQueueReceive(xQueueCalcHandle, rebuffer, xTicksToWait);if( xStatus pdPASS ){/* 读到了数据 */printf(recv buffer : %s\r\n, rebuffer);} else{/* 没读到数据 */printf( Could not receive from the queue.\r\n );} } }xQueueCalcHandle xQueueCreate(5, sizeof(char*)); if (xQueueCalcHandle NULL) {printf(can not create queue\r\n); }xTaskCreate(Task1Function, Task1, 100, NULL, 1, NULL); xTaskCreate(Task2Function, Task2, 100, NULL, 1, NULL); xTaskCreate(Task3Function, Task3, 100, NULL, 2, NULL);运行结果 这里有几个点需要注意 1. 由于队列传递数据是复制数据的副本所有传输数据时并不会影响到原来的数据但是在这里使用到了地址当改变这个地址空间的数据后原来的数据也会受到影响。 2. 由于传递的是地址空间那么这里的话就必须保证这个数据是全局数据因为局部数据会被释放释放后就无法进行使用了所有需要保证数据是全局数据。 总结 本篇文章就讲解到这里本篇文章主要给大家讲解了队列的具体代码和使用方法。
http://www.zqtcl.cn/news/381754/

相关文章:

  • 网站建设朋友圈怎么写深圳宝安区松岗
  • 苏州网站的建设哪个网站上做自媒体最好
  • 传送门网站是怎么做的wordpress seo标题
  • 曲靖 曲靖网站建设软件(app)开发视频一页网站怎么做
  • 互联网公司网站建设ppt模板下载wordpress 图片2m
  • 箱包官方网站模板平台开发软件
  • 佛山网站改版动漫视频制作软件
  • 易企互联网站建设创办公司需要多少资金
  • wordpress主题页脚添加联系信息百度seo优化排名软件
  • 深圳微信商城网站设计价格广东省自然资源厅事务中心
  • 云服务器做网站视屏工程建设最好的网站
  • 宁夏建设工程质量安全监督网站电商网站需求分析
  • wordpress函数教程十堰seo优化哪家公司好
  • 直播app开发哪家好东莞整站优化火速公司
  • 平江高端网站建设wordpress如何添加广告
  • 网站建设得多钱搜索引擎推广网站
  • 建立网站的流程多少钱网站建设不用备案的
  • 广州城市建设档案网站扬州工程建设招标网
  • 邦策网站建设dedecms医院网站wap模板(橙色)4512345
  • 阿里云空间可以做网站吗专业的传媒行业网站开发
  • 网站制作新报价橄榄树网站建设
  • 网站建设及服务合同小程序代码教程
  • 晋城网站建设公司淘宝店铺网站建设
  • 赣州网站建设流程上海重大新闻
  • html网站架设ui设计用的软件有哪些
  • 有没有做培养基的网站58同城淄博网站建设
  • 承德做网站的公司专业平台建设网站关了吗
  • 自己做网站的成本要哪些东西wordpress resize
  • 网站建设总体流程wordpress 浮窗音乐
  • 福州网站建设公司哪个网站可以做前端项目