Adam Taylor玩转MicroZed:FreeRTOS.doc

Adam Taylor玩转MicroZed:FreeRTOS.doc

ID:27502612

大小:25.50 KB

页数:4页

时间:2018-12-04

Adam Taylor玩转MicroZed:FreeRTOS.doc_第1页
Adam Taylor玩转MicroZed:FreeRTOS.doc_第2页
Adam Taylor玩转MicroZed:FreeRTOS.doc_第3页
Adam Taylor玩转MicroZed:FreeRTOS.doc_第4页
资源描述:

《Adam Taylor玩转MicroZed:FreeRTOS.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、AdamTaylor玩转MicroZed:FreeRTOS  在上一篇博客中成功地演示了FreeRTOS并在基于Zynq的MicroZed板上运行之后,显然我们想要能够编写我们自己的应用程序。因此,我们将首先举一个简单的例子。我们将配置ZynqSoC的XADC并且在串行链路上输出结果。应用程序检查接收到的值,如果这个值超过预设值,代码就会点亮LED作为警报。  代码开发的第一步就是创建一个函数,在我们启动RTOS调度程序前用来初始化XADC。这将允许我们在这个例子里运行的两个任务之一中使用XADC。这个函数会是一个标准函数,正如我们在这个系列中之前创建了许多次一样。  这个例子使用了两个任

2、务。第一个任务是读取XADC温度,将获得的值添加到队列里。第二个任务是从队列里读取值并执行温度检验。在这个应用程序里,第二个任务也会在串行链路上输出数据,这样我们就可以看到发生的情况。这两个任务展示了我们怎样在ZynqSoC中在硬件外设之间通信,使用一个任务从硬件获得值,然后在第二个任务里使用这些获得的值。任务间通信是嵌入式系统中使用RTOS的重要方面。  带来的两个例子中非常有帮助的FreeRTOS演示代码:完整演示和更简单的闪烁演示。闪烁LED演示是通过在main.c里设置预处理器声明来控制的:#definemainCREATE_SIMPLE_BLINKY_DEMO_ONLY1  设置

3、这个标志位并重建应用程序得到一个简单的例子——MicroZed板载LED闪烁。通过在两个任务之间以预定义的速率并使用队列来传递数据。这个代码正好能够达到我们需要的目的,所以这个简单的演示带给我们想要开发的应用代码的有用启示。  正如上面提到的,我们首先要创建的事情是一个配置例程,用于初始化ZynqSoC的XADC,使其可用。记住要添加需要的包含文件和访问ZynqSoC的XADC必要的声明。我们在这篇博客里做了很多次,所以这对你来说已经很习惯了。  下一步就是修改传输任务,读取XADC温度,将得到的值放在队列里,供接收进程读取。实现这个的代码如下:staTIcvoidprvQueueSend

4、Task(void*pvParameters){TIckType_txNextWakeTIme;unsignedlongulValueToSend=100UL;(void)pvParameters;xNextWakeTIme=xTaskGetTickCount();printf(“tasktx”);for(;;){vTaskDelayUntil(&xNextWakeTime,mainQUEUE_SEND_FREQUENCY_MS);ulValueToSend=XAdcPs_GetAdcData(&XADCInst,XADCPS_CH_TEMP);  xQueueSend(xQueue,&u

5、lValueToSend,0U);}  接收进程从队列中取出这个值。然后我们将接收到的值与期望值做比较,当接收到的值大于期望值时切换LED。staticvoidprvQueueReceiveTask(void*pvParameters){unsignedlongulReceivedValue;unsignedlongulExpectedValue=43000;(void)pvParameters;printf(“taskrx”);for(;;){xQueueReceive(xQueue,&ulReceivedValue,portMAX_DELAY);printf(“RawValue=%lu

6、”,ulReceivedValue);if(ulReceivedValue==ulExpectedValue){vParTestToggleLED(mainTASK_LED);ulReceivedValue=0U;}}}  从上面的代码可以看出,这个简单的应用就是当温度超过警戒值时,LED点亮。但是,在很多情况下会导致LED不断闪烁,因为边界温度值会快速地在高于和低于阈值之间摆动。我们通过引入滞后现象来解决这个问题,这样LED只会在温度充分下降且停止波动时才会熄灭。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。