出出啊
出出啊
It is Not the Mountain We Conquer, but Ourselves

注册于 6 months ago

回答
902
文章
19
关注者
55

你的stuio 项目界面截图呢?有这个没?
image.png

展开项目,第一项就是,双击
image.png

其它的丢了呗,降低控制台的波特率先试试。比如57600.
你用串口调试助手,怎么发回车?
mobaX,你值得拥有。

没有添加下面这句?设置控制台的串口设备,这里决定了用的那个串口。能打印输出说明串口设备启动了

    /* Set the shell console output device */
#ifdef RT_USING_CONSOLE
    rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif

at_client.c 文件 client_parser 函数调用 client_parser ,后者函数里有个 while 循环,break 就是收到完整的一行。

        /* is newline or URC data */
        if ((ch == '\n' && last_ch == '\r') || (client->end_sign != 0 && ch == client->end_sign)
                || get_urc_obj(client))
        {
            if (is_full)
            {
                LOG_E("read line failed. The line data length is out of buffer size(%d)!", client->recv_bufsz);
                rt_memset(client->recv_line_buf, 0x00, client->recv_bufsz);
                client->recv_line_len = 0;
                return -RT_EFULL;
            }
            break;
        }

所以,行是以 "\r\n" 结尾的,无论你写在什么位置。连续的 "\r\n" 认为是空行

rtconfig.h 哪个最新用哪个,其它的路径熟悉,就近原则。
如果你熟悉哪个路径,或者打开项目后默认使用哪个路径下的,把另外一个删掉。记得拷贝最后的那个 rtconfig.h 文件。

我还是那个观点,cubemx 生成的代码,仅供参考,需要的函数拷贝到项目里,这样就好。它生成的文件不建议直接添加到项目

确定格式化了吗?格式化格式是 fat吗?
qemu 跑的?这个可以挂载系统上插的卡?

env 里也没有的,像这种使用 studio 不现实。studio 接管了编译器和调试器的很多配置,目前没有在 studio 里找到修改接口。
还是使用 env 选个相近的 bsp 修改起来容易些。studio 里改这个就麻烦很多,只有上传到 github 仓库的 bsp 才会显示到 studio 里面。

片上 flash 就不需要有 download 分区了,但必须保留 bootloader 和 app 的吧

如果熟悉 CubeMX ,单独使用它进行配置,生成代码,然后把需要的代码拷贝到 studio 项目里。
CubeMX 生成的文件不建议直接添加到 studio 项目。多数情况,只需要把需要的函数代码拷贝到 hal_msp.c 文件就成。

你用的lfs文件系统啊,昨天以为你用的 fatfs 呢。

  1. 你确定不是其它地方引起的?写过程没有问题,只有 read 有问题?
  2. 单步调试过吗,进入 lfs.c 的 lfs_file_read lfs_file_rawread 函数,执行过程正常不?
  3. 这几个 size 除了 BLOCK_SIZE 和 flash 的扇区一样大小,也就是最小擦写块大小一样外。其它的可以改小点儿。READ PROG CACHE 这几个改成256,再试试读256行不行。

建议先看看我写的几篇文章吧。
你这个问题问得太笼统了,要看你问的是 systick 中断,还是其它外设的中断。
关于 systick 中断,有一篇专门文章讲的。
不同外设中断初始化可能有些差别,gpio 引脚中断使用 rt_pin_attach_irq 这个 api 开启对应引脚中断并注册应用层的中断回调函数。
串口等其它设备分别在各自 open init config设备时,打开外设对应中断。注册应用层中断回调函数 api 是 rt_device_set_rx_indicate

从上电开始,应该是先关全局中断的,系统时钟配置结束,rtt 内核初始化完成,进入系统调度前,理论上讲,不应该开任何中断。
其它外设初始化基本上是 main 线程里进行的,所以外设中断是使用的时候才被使能。

  1. 图片没显示,贴代码吧。
  2. 增加几个线程栈试试,核查所有线程栈,别小于512

我看你上面说先一直写文件,等 flash 满了以后才停止写?
然后才进行读操作?
如果不写满 flash 能读回来文件内容吗?

上面你提供的代码是读的部分,因为open已经失败了,所以这部分代码没有参考价值。
可以看一下你写的部分吗?

image.png
右键项目新建文件,然后弹窗中填写这几个地方

回到
顶部

发布
问题

投诉
建议