您尚未登录。

#1 Re: 全志 SOC » D1开发板的裸机程序 » 2022-10-15 23:58:30

超过32K的话,将初始化用到的函数,数据,指定编译到到前面32K的位置。
link文件参考这个修改。
    .text :
    {
        PROVIDE(__image_start = .);
        PROVIDE(__text_start = .);
        PROVIDE(__spl_start = .);
        KEEP(*(.text.start))
        . = ALIGN(8);
        *(.text.utils)
        PROVIDE(__ddr_bin_start = .);
        KEEP(*(.ddr.bin))
        PROVIDE(__ddr_bin_end = .);
        */sys-*.o(.text*)
        *\\libc.a:*memcpy.o(.text*)
        *\\libc.a:*memset.o(.text*)
        PROVIDE(__spl_end = .);
        *(.entry)
        *(.text.vectors)
        *(.text*)
        *(.iplt)
        *(.note.gnu.build-id)
        PROVIDE(__text_end = .);
    } > ram
    PROVIDE(__spl_size = __spl_end - __spl_start);
startup.s文件参考这个修改
  .section .text.start
    .global _start
    .global __Vectors
_start:
    /* Boot head information for BROM */
    jal x0, reset
    //.long 0x0300006f // pc += 0x30
    .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
    .long 0x12345678                /* checksum */
    .long __spl_size                /* spl size */
    .long 0x30                      /* boot header size */
    .long 0x30303033                /* boot header version */
    .long 0x00020000                /* return value */
    .long 0x00020000                /* run address */
    .long 0x0                       /* eGON version */
    .byte 0x00, 0x00, 0x00, 0x00    /* platform information - 8byte */
    .byte 0x34, 0x2e, 0x30, 0x00

这样就能避开32K的限制。
我刚开始开发D1S的lvgl程序时都没用到spl。

#2 Re: 全志 SOC » MangoPi-MQ 麻雀D1s && D1 Nezha 裸机实验 && rtos实验 » 2022-06-14 12:27:03

smiletiger 说:
March 说:

@bigmagic
您好,请问RT中的C906文件夹的内容是哪里来的啊?我在RT官网没找到啊

大哥你也来了啊,哈哈,freertos  177秒宕机问题找到了吗,我这里测试也是177秒死机....一直在研究

CLINT计时器中断比较值寄存器 只能用32位指针读写,用64位指针写时高32位是写不进去的。32位无符号整数最大值4294967295/晶振频率24000000=178.957秒。所以到了178.956秒的中断后,会一直进入中断直至0x10000000000000000/24000000=8895999天后才正常。
    *(uint32_t*)CLINT_MTIMECMPL(0) = tick_l;
    *(uint32_t*)CLINT_MTIMECMPH(0) = tick_h;

#3 Re: 全志 SOC » MangoPi-MQ 麻雀D1s && D1 Nezha 裸机实验 && rtos实验 » 2022-06-08 10:25:57

D1S:从机器模式切换到用户模式,怎么执行到mret之后的第一条指令,就报异常1的?mtval,mepc都是mret后的第一条指令地址。是还有哪些寄存器要配置吗?
    csrr  t1, mstatus
    li    t0, ~0x00001800
    and   t1, t1, t0
    csrw  mstatus, t1

    la    t0, 1f
    csrw  mepc, t0

    mret
1:

#4 Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » 请教:NUC972的USB MSC能和LVGL一起工作吗? » 2022-01-22 20:36:17

dick2945
回复: 1

参考NUC970_NonOS_BSP的LCD_MPU例程移植了LVGL,但没有使用LCM双缓存功能,而是使用LCM单缓存,需要更新显示时才刷新屏幕。工作没问题。
    参考NUC970_NonOS_BSP的USBH_MassStorage和SD_FATFS例程,实现了USB MSC,能当读卡器用。
    将LVGL,MSC组合在一起,单单做读卡器或单单使用屏幕都能正常工作。在电脑读写TF卡时,点击屏幕,屏幕应该会更新的,但这时程序极易发生程序死机,电脑没显示U盘有断开连接,用sysprintf打印调试信息,发现USB中断程序里的USBD_GINTSTS_EPBIF_Msk有周期响应,但程序就是不正常运行。通过多个地方添加sysprintf打印调试信息,初步判断应该是在lv_task_handler(这函数是1ms执行一次的)里进入死循环。用Jlink连接调试时,发现电脑不能识别MSC,无法检测哪里出问题。
    该怎么让LVGL和USB MSC一起正常工作?
------------------------------------------------
已解决。
    通过取消MSC的功能,1s执行1次500ms的while循环堵塞,发现问题所在:
    disp_flush执行到执行lv_disp_flush_ready的过程中是不能执行lv_task_handler的,不然若在这过程中LVGL要更新显示,就会进入lv_refr.c 里的某个while(vdb->flushing){。。。}里不退出。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn