数据方向
轮询模式可以与 FreeRTOS_read() 和 FreeRTOS_write() 同时使用。
说明
在轮询模式下,数据传输是通过对外设状态位的忙碌等待来
执行的。 未使用中断。
轮询传输模式
|
优点
|
缺点
|
-
非常简单的使用模型
-
在大多数情况下,FreeRTOS_read() 或 FreeRTOS_write()
操作只有在分别读取或写入所有数据后才会返回
。
-
FreeRTOS-Plus-IO 驱动程序不需要任何 RAM 进行
数据缓冲。
|
-
执行读取或写入操作的任务在读取或写入期间会保持在
“就绪”或“正在运行”状态,
即便没有待执行操作
(原因是外设状态位自上次轮询以来未发生更改)
时也是如此。 结果是,
轮询任务浪费了 CPU 时间,
耽搁了另一个本可以立即执行处理操作的任务。
-
无内置的互斥方法。 如果
多个任务需要访问同一个外围设备,
则应用程序编写者必须保证采用互斥(例如,
使用互斥锁)。
-
目前(还)不可能更改读取
或写超时。
|
开启外围设备后默认启用轮询模式。 并非所有外围设备都会提供一种方法,
以便在退出轮询模式后返回轮询模式。
轮询写入仅在所有字节均已写入外围设备后返回,
发生错误时除外。
轮询读取仅在从外围设备读取请求的字节数后返回,
发生错误时除外。
示例用法
#include "FreeRTOS_IO.h"
void vAFunction( void )
{
Peripheral_Descriptor_t xOpenedPort;
BaseType_t xBytesTransferred;
xOpenedPort = FreeRTOS_open( "/SPI2/", NULL );
if( xOpenedPort != NULL )
{
xBytesTransferred = FreeRTOS_write( xOpenedPort, ucBuffer, 10 );
configASSERT( xBytesTransferred == 10 );
xBytesTransferred = FreeRTOS_read( xOpenedPort, ucBuffer, 10 );
configASSERT( xBytesTransferred == 10 );
}
else
{
}
}
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.