小白今天又踩坑,又有一个填坑的经验
源码:
首先介绍一下关键源码的说明,加红色说明是需要注意的地方
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include " gpio_control_app.h"
#include "errno.h"
//static unsigned char gpio_pin;//define GPIOs to be use
static int gpio_dev_fd = -1;;
int mcu_gpio_pin = 12;
int work_gpio_pin = 18;
void mcu_gpio_release(int signal_no)
{
ioctl(gpio_dev_fd, GPIO_CONTROL_SET_IN, GPIO_IOCTL_PRAM(mcu_gpio_pin, 0));
//信号量响应,将相应的IO口设置输入
ioctl(gpio_dev_fd, GPIO_CONTROL_FREE_GPIO, GPIO_IOCTL_PRAM(mcu_gpio_pin, 0));
//信号量响应,释放相应的IO口资源
exit(0);
}
void bsp_gpio_init(void)
{
gpio_dev_fd = open(GPIO_CONTROL_DEVICE_PATH, O_RDWR);//open gpio device
if (gpio_dev_fd < 0)
{
printf("###open %s ERROR###\n", GPIO_CONTROL_DEVICE_PATH);
}
else
{
printf("***open %s success***\n", GPIO_CONTROL_DEVICE_PATH);
}
}
int set_work_gpio(void)
{
int ret = 0;
if(gpio_dev_fd == -1)
{
return -1;
}
printf("work_gpio_pin:%d\n", work_gpio_pin);
ret =ioctl(gpio_dev_fd, GPIO_CONTROL_REQUEST_GPIO, GPIO_IOCTL_PRAM(work_gpio_pin, 0));
printf("%s\n",strerror(errno));
printf("set_gpio ret = %d\n",ret);
if (ret < 0)
{
printf("###request GPIO %d error###", work_gpio_pin);
return -1;
}
ret = ioctl(gpio_dev_fd, GPIO_CONTROL_SET_OUT, GPIO_IOCTL_PRAM(work_gpio_pin, 0));
i