rt-thread posix接口之pin设备使用
今年年中时在线听RTT全国技术大会,当时有关于posix接口的内容,关于其posix接口,之前一直有使用文件系统接口以及网络socket接口,这次尝试一下用posix接口操作普通外设,就用pin设备来试试吧
实践
1、硬件板
自己很早之前网购的 落灰牌GD32f450开发板
2、软件版本
RT-Thread 4.1.1,使用官方IDE以导入bsp的方式导入了gd32f450的bsp
2.1 posix接口操作pin示例
#include <stdio.h>
#include <rtthread.h>
#include <dfs_posix.h> /* 当需要使用文件操作时,需要包含这个头文件 */
#include <sys/ioctl.h>
#include <rtdevice.h>
#include "drv_gpio.h"
#define LED_PIN GET_PIN(C, 0)
rt_uint16_t pin;
rt_uint16_t status;
typedef struct {
uint16_t pin;
uint16_t mode;
} pin_mode_t;
typedef struct {
uint16_t pin;
uint16_t status;
} pin_value_t;
pin_value_t led_pin;
pin_mode_t led_mode;
int main(void)
{
/* 注意: pin 设备会自动注册在/dev目录下 */
int fd = open("/dev/pin", O_RDWR);
rt_kprintf("fd:%d\n ", fd);
/* 设置IO 模式 */
led_mode.pin = LED_PIN;
led_mode.mode = PIN_MODE_OUTPUT;
ioctl(fd, 0, &led_mode);
led_pin.pin = LED_PIN;
led_pin.status = 1;
while (1) {
rt_thread_delay(200);
led_pin.status ^= 0x01;
write(fd, &led_pin, sizeof(led_pin));
}
return 0;
}
2.2 相关工程配置
#define RT_USING_DFS_ELMFAT
/* elm-chan's FatFs, Generic FAT Filesystem Module */
#define RT_DFS_ELM_CODE_PAGE 437
#define RT_DFS_ELM_WORD_ACCESS
#define RT_DFS_ELM_USE_LFN_0
#define RT_DFS_ELM_USE_LFN 0
#define RT_DFS_ELM_LFN_UNICODE_0
#define RT_DFS_ELM_LFN_UNICODE 0
#define RT_DFS_ELM_MAX_LFN 255
#define RT_DFS_ELM_DRIVES 2
#define RT_DFS_ELM_MAX_SECTOR_SIZE 512
#define RT_DFS_ELM_REENTRANT
#define RT_DFS_ELM_MUTEX_TIMEOUT 3000
/* end of elm-chan's FatFs, Generic FAT Filesystem Module */
#define RT_USING_DFS_DEVFS
/* Device Drivers */
#define RT_USING_DEVICE_IPC
#define RT_USING_SYSTEM_WORKQUEUE
#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048
#define RT_SYSTEM_WORKQUEUE_PRIORITY 23
#define RT_USING_SERIAL
#define RT_USING_SERIAL_V1
#define RT_SERIAL_USING_DMA
#define RT_SERIAL_RB_BUFSZ 64
#define RT_USING_PIN
/* C/C++ and POSIX layer */
#define RT_LIBC_DEFAULT_TIMEZONE 8
/* POSIX (Portable Operating System Interface) layer */
#define RT_USING_POSIX_FS
#define RT_USING_POSIX_DEVIO
#define RT_USING_POSIX_STDIO
#define RT_USING_POSIX_POLL
#define RT_USING_POSIX_SELECT
#define RT_USING_POSIX_DELAY
#define RT_USING_POSIX_CLOCK
#define RT_USING_POSIX_TIMER
#define RT_USING_PTHREADS
#define PTHREAD_NUM_MAX 8
参考文件
两篇和此相关的pdf,具体见:https://gitee.com/jiezhi3200/docs
《RT-Thread 中的 POSIX 支持-2022 RTT全球技术大会.pdf》
《设备驱动及 POSIX 对接分析与实践-2022 RTT全球技术大会.pdf》