sync
sync
This guy hasn't written anything yet

注册于 2 years ago

回答
139
文章
3
关注者
3

不知道楼主是不是想要这个
有现成的软件包http://packages.rt-thread.org/detail.html?package=agile_console 可以方便切换控制台到多个串口

毫秒自己实现吧,rt提供有这个获取系统上电后的毫秒数rt_tick_from_millisecond

我做了个测试使用电脑modbus slave 做主机,同样的触摸屏,同样通过路由器连接,抓包结果如下,
触摸屏偶尔也会发送重复报文,但pc机除了回复Dup ACK还会正常的回复一个数据返回包TCP Retransmission,不会造成连接中断。
image.png
而板子做主机时,使用lwip,当接收到重复报文时,却只会发送一次ACK,没用回复数据。。导致连接中断
image.png

检查一下自己串口引脚的初始化是不是上拉??

    GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

image.png
点错按钮了吧,右边的箭头是全部重新编译,左边的可不是啊

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函数里面标记的,但没有加入回调函数,楼主只能自己实现吧

回到
顶部

发布
问题

投诉
建议