如何点灯,使用rtsmart+linux SDK

Viewed 167

问题描述


我们使用的库rtsmart+linux SDK

在 /k230_sdk/src/big/rt-smart/userapps进行用户态开发,想要进行点灯操作,遇到了困难,不知道怎么进行。
观察仓库的k230_sdk / src / big / rt-smart / kernel / rt-thread / components / drivers / include / drivers / pin.h

可不可以为我提供,帮助,我应该如何使用呢?

观察仓库的k230_sdk / src / big / rt-smart / kernel / bsp / maix3 / board / interdrv / gpio / drv_gpio.h

这个用于一个指向性较强的测试gpio读写功能的文件

观察 庐山派的原理图,存在用户可以调用的RGB指示灯。

image.png

首先,尝试根据测试gpio读写功能的文件进行改编,

#include <unistd.h>
#include <stdio.h>
#include <rtdbg.h>
#include <rtthread.h>
#include <rtdevice.h>
#include "../kernel/bsp/maix3/board/interdrv/gpio/drv_gpio.h"

#define RGB_LED_R_PIN            62
#define RGB_LED_G_PIN            20
#define RGB_LED_B_PIN            63

static void gpio_red_entry(void *param)
{
    int blink_cnt = 20;  // 闪烁次数

    /* 1. 配置引脚为输出模式 */
    kd_pin_mode(RGB_LED_R_PIN, GPIO_DM_OUTPUT);

    /* 2. 循环闪烁逻辑 */
    while (1)
    {
        /* 点亮红灯:输出低电平(根据电路逻辑,低电平导通LED) */
        kd_pin_write(RGB_LED_R_PIN, GPIO_PV_LOW);
        rt_thread_mdelay(500);  // 亮500ms

        /* 熄灭红灯:输出高电平 */
        kd_pin_write(RGB_LED_R_PIN, GPIO_PV_HIGH);
        rt_thread_mdelay(500);  // 灭500ms

        /* 达到闪烁次数后退出循环 */
        if (--blink_cnt == 0)
            break;
    }
}

int main(void)
{
    rt_thread_t led_thread;

    /* 创建LED控制线程(避免main死循环,符合RT-Thread多任务设计) */
    led_thread = rt_thread_create(
        "red_led",       // 线程名称
        gpio_red_entry,  // 线程入口函数
        RT_NULL,         // 线程参数
        1024,            // 线程栈大小(字节)
        10,              // 线程优先级(1-255,越小优先级越高)
        10               // 线程时间片(ms)
    );

    if (led_thread != RT_NULL)
    {
        rt_thread_startup(led_thread);  // 启动线程
    }

    return RT_EOK;
}

发现,报错

image.png

求助!!!

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

硬件板卡


庐山派

软件版本


CanMV-K230_LCKFB_sdcard__nncase_v2.10.0.img

3 Answers
  1. 尽早放弃使用双系统开发,双系统的sdk不好用。
  2. 你这里的报错是最基础的问题,你的配置文件写错了编译器的位置
  3. 你说的这个CSDN博客写的就是用户态开发,建议搞清楚基础概念再提问

收到,主要我是个人学习者,只能通过论坛与群聊获取知识,所以有些可笑的固执。

确实,我觉得进阶一下子, 光使用rtos 的sdk就可以了

你截图里这种简单的问题问ai会更快解决。用Linux 或者RT-smart都可以,双系统的sdk写的太差了

参考大神的博客,关于点灯的三个方法,都很好,但不是我想要的,就想在这里进行用户态开发。

想在k230_sdk/src/big/rt-smart/userapps下,使用scons进行,使用rtthread点灯

这个SDK并不是这样使用的。 在 k230_sdk/src/big/rt-smart/userapps 看你的操作是想编译出来elf在用户态运行来控制GPIO? 那么这个代码就不能使用内核态相关的内容,具体可以参考 src/big/mpp/userapps/sample/sample_gpio/sample_gpio.c中有关gpio的使用示例

GPIO的驱动内核已经完成了,面向用户态的是 /dev/gpio 设备描述符, 你可以在sample_gpio 测试代码中看到如何去使用的,对于GPIO的控制则是通过 ioctl 完成的,也可以在测试代码中看到。

大佬,控制gpio需要烧成内核态驱动吗?那他们如何在用户态进行控制呢?
大佬,我的知识有些浅薄,可以详细一些吗?
有些不理解您的意思

大佬,那位于k230_sdk/src/big/rt_smart/kernel/rt-
thread/components/drivers/misc
的pin.c这个,有什么关联吗?可以去使用吗,如何使用呢?