您尚未登录。

#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 wrote:

March wrote:

@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


东莞哇酷科技有限公司开发