sync
sync
This guy hasn't written anything yet

注册于 2 years ago

回答
117
文章
3
关注者
2

ls的源代码如下,不需要看懂,只需要直接调用,不就可以打印目录下的所有文件了吗?

void ls(const char *pathname)
{
    struct stat stat;
    int length;
    char *fullpath, *path;

    fullpath = NULL;
    if (pathname == NULL)
    {
#ifdef DFS_USING_WORKDIR
        /* open current working directory */
        path = rt_strdup(working_directory);
#else
        path = rt_strdup("/");
#endif
        if (path == NULL)
            return ; /* out of memory */
    }
    else
    {
        path = (char *)pathname;
    }

    /* list directory */
    if (dfs_file_open(&fd, path, O_DIRECTORY) == 0)
    {
        rt_kprintf("Directory %s:\n", path);
        do
        {
            memset(&dirent, 0, sizeof(struct dirent));
            length = dfs_file_getdents(&fd, &dirent, sizeof(struct dirent));
            if (length > 0)
            {
                memset(&stat, 0, sizeof(struct stat));

                /* build full path for each file */
                fullpath = dfs_normalize_path(path, dirent.d_name);
                if (fullpath == NULL)
                    break;

                if (dfs_file_stat(fullpath, &stat) == 0)
                {
                    rt_kprintf("%-20s", dirent.d_name);
                    if (S_ISDIR(stat.st_mode))
                    {
                        rt_kprintf("%-25s\n", "<DIR>");
                    }
                    else
                    {
                        rt_kprintf("%-25lu\n", stat.st_size);
                    }
                }
                else
                    rt_kprintf("BAD file: %s\n", dirent.d_name);
                rt_free(fullpath);
            }
        }
        while (length > 0);

        dfs_file_close(&fd);
    }
    else
    {
        rt_kprintf("No such directory\n");
    }
    if (pathname == NULL)
        rt_free(path);
}

出现这个错误
Corrupted dir pair at 1 0
应该是不小心直接操作了littlfs的文件区域,造成了文件分区的损坏。。。
检查自己的分区表,检查自己的flash操作

studio下DAP我的一直也有问题,感觉没有stlink好用。。

使用romfs作为系统初始文件系统挂载到根目录/。下面的文件系统可以挂载到/C,/D。。等等 详细操作见文档

rtt里面获取管脚有两种方式,
一就是使用宏定义GET_PIN(F,1) 获取管脚的物理地址
二就是直接使用引脚序号
下面是f407的管脚和序号的对应关系,在drv_gpio.c文件中可以看到
image.png
drv_gpio.c文件中有函数get_pin将管脚序号转换出对应的pin_index

static const struct pin_index *get_pin(uint8_t pin)
{
    const struct pin_index *index;

    if (pin < ITEM_NUM(pins))
    {
        index = &pins[pin];
        if (index->index == -1)
            index = RT_NULL;
    }
    else
    {
        index = RT_NULL;
    }

    return index;
};

应该是不会进,internet_up这个是在check_netdev_internet_up_work函数里面标记的,但没有加入回调函数,楼主只能自己实现吧

`

/* get current time */
now = time(RT_NULL);
/* lock scheduler. */
rt_enter_critical();
/* converts calendar time time into local time. */
p_tm = localtime(&now);
/* copy the statically located variable */
memcpy(&tm_new, p_tm, sizeof(struct tm));
/* unlock scheduler. */
rt_exit_critical();
sprintf(pstr, "%04d-%02d-%02d", (int)(tm_new.tm_year + 1900), (int)(tm_new.tm_mon + 1), (int)tm_new.tm_mday);

`
楼主看下获取时间应该这么操作下

这里有串口接收不定长数据的例子,楼主参考下
https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/

没发现有专门的清空消息队列的函数,不过可以间接用rt_mb_recv 判断,接受不到数据不就说明队列清空了吗?

换个U盘试试,分区格式为FAT32才行,有的U盘确实不认,RTT带的usb驱动没有cubemx的usb驱动好用

所以fifo的长度要设置好,一般都要大于你的数据帧长的

USB驱动里面有回调函数的

HAL_HCD_Connect_Callback
HAL_HCD_Disconnect_Callback

HAL_PCD_ConnectCallback
HAL_PCD_DisconnectCallback

回到
顶部

发布
问题

投诉
建议