sync
sync
This guy hasn't written anything yet

注册于 2 years ago

回答
95
文章
3
关注者
0

看样子网络已经建立起了,检查下是不是文件系统的问题?读写文件都测试过没?

你的波特率是多少?写入到外部flash的时间是多少?第一次80K数据接收完毕,和第二次80k数据开始接收之间的间隔时间是多少?

检查下程序中所有中断的优先级,处理好中断优先级试试
或者先关闭不相干的进程,单独测试下步进定时器看可以正常工作不

中断里面,使用延时是不合适的,修改下程序吧

应该先ping下,看看和192.168.1.103是否能够ping 通?

是的,关于虚拟文件系统的理解可以看这两个图片

输入链接说明
输入链接说明

可以参考RT-thread对串口的处理方式,使用消息队列来实现数据传递

/* 接收数据回调函数 */
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
    struct rx_msg msg;
    rt_err_t result;
    msg.dev = dev;
    msg.size = size;

    result = rt_mq_send(&rx_mq, &msg, sizeof(msg));
    if (result == -RT_EFULL)
    {
        /* 消息队列满 */
        LOG_E("message queue full!");
    }

    return result;
}

这不就相当于循环延时吗?如果调用rt_thread_delay则将交出CPU控制权,所以使用循环来实现

syswatch仅仅是对线程进行恢复,至于线程所涉及到的信号量是否释放,要看线程中的内容了,syswatch是无法对线程内部所涉及的信号量进行处理的

flashdb 是你没用好吧,其他更好用的,真不知道了,
armink大神一直也在更新 flashdb ,
有问题可以咨询下试试 https://gitee.com/Armink/FlashDB/issues

建议实际使用sf命令,自己测试下就都明白了

msh />sf
Usage:
sf probe [spi_device]           - probe and init SPI flash by given 'spi_device'
sf read addr size               - read 'size' bytes starting at 'addr'
sf write addr data1 ... dataN   - write some bytes 'data' to flash starting at 'addr'
sf erase addr size              - erase 'size' bytes starting at 'addr'
sf status [ ] - read or write '1:volatile|0:non-volatile' 'status'
sf bench                        - full chip benchmark. DANGER: It will erase full chip!

msh />
msh />

楼主可以这样理解下,虚拟文件系统比easyflash要高级些,对于没有文件系统的应用来说easyflash是很好的选择,可以实现同样的功能,且需求更低

这个挂上示波器,看波形,先排除硬件问题再说

如果自己编写BootLoader是可以小于128k的,我使用qboot包,bootloader实际不到64K

发布
问题