小编Flo*_*ian的帖子

如何在Linux GPIO中使用boost :: asio

我有一个使用boost :: asio进行异步输入/输出的单线程Linux应用程序.现在我需要扩展此应用程序以读入GPIO输入/sys/class/gpio/gpioXX/value.

在边沿触发的GPIO输入上使用boost :: asio :: posix :: stream_descriptor可以做到这一点吗?

我配置了GPIO输入,如下所示:

echo XX >/sys/class/gpio/export
echo in >/sys/class/gpio/gpioXX/direction
echo both >/sys/class/gpio/gpioXX/edge
Run Code Online (Sandbox Code Playgroud)

我设法编写了一个epoll基于GPIO文件描述符的基础测试应用程序,直到GPIO信号发生变化但boost::asio似乎无法正常阻塞.调用boost::asio::async_read总是立即调用处理程序(当然只在内部io_service.run()),使用EOF或 - 如果文件指针被设置回 - 2字节数据.

我不是boost::asio内部专家,但原因可能是boost::asioepoll反应器是水平触发而不是边缘触发的情况posix::stream_descriptor

这是我的代码:

#include <fcntl.h>

#include <algorithm>
#include <iterator>
#include <stdexcept>

#include <boost/asio.hpp>

boost::asio::io_service io_service;
boost::asio::posix::stream_descriptor sd(io_service);
boost::asio::streambuf streambuf;

void read_handler(const boost::system::error_code& error, std::size_t bytes_transferred)
{
    if (error.value() == boost::asio::error::eof) {
        // If we don't reset the file pointer we …
Run Code Online (Sandbox Code Playgroud)

c++ epoll boost-asio gpio

8
推荐指数
1
解决办法
1398
查看次数

标签 统计

boost-asio ×1

c++ ×1

epoll ×1

gpio ×1