红枫
红枫 - 认证专家
This guy hasn't written anything yet

注册于 1 year ago

回答
256
文章
4
关注者
30

使用mcu型号?串口接收方式?串口接收fifo尺寸?波特率?等信息

可能会串位,但不会出错,因为get_index的算法也一样。同样的算法、同样的路线。

传输数据快于写文件数据速度导致内存不够用了,限制下数据传输速度就行了

这个分支是为了解决在没有使用FIFO情况下只接调用低层驱动完成数据接收,数据是直接传输到用户接收缓冲区中,传输完成条件:1个是长度限制,另1个是串口空闲。

不行的,你可以使用16进制格式打印输出帧数据,如:

rt_kprintf("%02X ", ch);

你要表达的意思是设备是否可以独占吧!线程安全和独占使用是不同的两个概念。控制台不属于独占模式,所以那个都可以通过它输出。

关注下fpu是否开启,开和不开fpu栈结构是不同的。

at设备的uart处理部分是工作在阻塞模式下的,不适用于裸机使用。非要使用改造工作量较大。

可以参考一下代码:

static void qbt_jump_to_app(void)
{
    typedef void (*app_func_t)(void);
    u32 app_addr = QBOOT_APP_ADDR;
    u32 stk_addr = *((__IO uint32_t *)app_addr);
    app_func_t app_func = (app_func_t)(*((__IO uint32_t *)(app_addr + 4)));

    if ((((u32)app_func & 0xff000000) != 0x08000000) || ((stk_addr & 0x2ff00000) != 0x20000000))
    {
        LOG_E("No legitimate application.");
        return;
    }

    rt_kprintf("Jump to application running ... \n");
    rt_thread_mdelay(200);
    
    __disable_irq();
    HAL_DeInit();

    for(int i=0; i<128; i++)
    {
        HAL_NVIC_DisableIRQ(i);
        HAL_NVIC_ClearPendingIRQ(i);
    }
    
    SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;
    
    HAL_RCC_DeInit();
    
    __set_CONTROL(0);
    __set_MSP(stk_addr);
    
    app_func();//Jump to application running
    
    LOG_E("Qboot jump to application fail.");
}

at设备是基于at指令工作的,不能支持透传模式,可以使用ppp设备

回到
顶部

发布
问题

投诉
建议