WhyCan Forum(哇酷开发者社区)

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

您尚未登录。

#1 2020-09-11 11:28:13

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 534

像stm32f103c8t6这类片子能跑什么gui?

去年买的longan-nao板子,芯片是gd32vf103c8t6,20k ram, 64k rom。配有一个spi接口的160*80的lcd。
没接触过单片机的gui,以为差不多都能跑呢,看lvgl这么火就想试试,看介绍需要16k ram,最少64k rom(推荐180k)。想着也满足最低需求了,想试试。
结果编译后一个.bss文件大小就34k了。

离线

#2 2020-09-11 23:26:38

sprintf
会员
注册时间: 2020-09-11
累计积分: 17

Re: 像stm32f103c8t6这类片子能跑什么gui?

跑啥gui并不是问题,是看你想用来干什么才可能会选什么gui吧,一般应该都可以根据需求进行一定的裁剪缩小。

离线

#3 2020-09-12 10:59:12

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 534

Re: 像stm32f103c8t6这类片子能跑什么gui?

https://bbs.21ic.com/blog-1849938-170836.html
尝试了ugui,结果卡在这个函数里了,屏蔽掉死等这一步,结果没有控件显示出来...

void UG_WaitForUpdate( void )
{
   gui->state |= UG_SATUS_WAIT_FOR_UPDATE;
   #ifdef USE_MULTITASKING    
   while ( (volatile UG_U8)gui->state & UG_SATUS_WAIT_FOR_UPDATE ){};
   #endif    
   #ifndef USE_MULTITASKING    
   while ( (UG_U8)gui->state & UG_SATUS_WAIT_FOR_UPDATE ){};
   #endif    
}

离线

#4 2020-09-12 13:58:54

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 534

Re: 像stm32f103c8t6这类片子能跑什么gui?

是我搞错了,我以为wihile()循环或定时器里需要调用的是UG_WaitForUpdate(),实际上应该是UG_Update()。
建了个窗口,放了个text,20k的ram用了98%了。
AE3035BA9709CA4E93E54D0ECB98FD1B.jpg

离线

#5 2020-09-12 14:06:15

达克罗德
会员
注册时间: 2018-04-10
累计积分: 944

Re: 像stm32f103c8t6这类片子能跑什么gui?

这种简单UI用掉20KBram有点太多,估计可以优化。这是spi屏吧,内置显存了按理你的UI code不需要什么内存开销

离线

#6 2020-09-12 14:56:47

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 534

Re: 像stm32f103c8t6这类片子能跑什么gui?

问题找到了,我给rt-thread-nano的主线程分配了15k堆栈,实际上主线程里用不了这么多,我改回1k堆栈后,编译后,ram只使用了29%,主线程里堆栈也只是用了63%。
57032243527323C299EA4553A7736319.jpgrt-thread-nano-allinsrc-ugui.zip

离线

#7 2020-09-12 17:25:38

Gentlepig
会员
注册时间: 2018-10-24
累计积分: 534

Re: 像stm32f103c8t6这类片子能跑什么gui?

又返回lvgl。
发现有个地方没有修改,按默认的来,定义了个32k的缓冲区。
#  define LV_MEM_SIZE    (32U * 1024U)
把这里改成2k,ram超出的报错没有了,但是rom还是超了。

/home/any/.platformio/packages/toolchain-gd32v/bin/../lib/gcc/riscv-nuclei-elf/9.2.0/../../../../riscv-nuclei-elf/bin/ld: .pio/build/sipeed-longan-nano-lite/firmware.elf section `.text' will not fit in region `flash'
/home/any/.platformio/packages/toolchain-gd32v/bin/../lib/gcc/riscv-nuclei-elf/9.2.0/../../../../riscv-nuclei-elf/bin/ld: region `flash' overflowed by 3270 bytes
collect2: error: ld returned 1 exit status
*** [.pio/build/sipeed-longan-nano-lite/firmware.elf] Error 1

--------------------------------------

关闭rtthread-nano的finsh功能,通过编译了。
又发现,有个函数忘了取消注释了。

    lv_init();
    lv_port_disp_init()                     //这个函数刚才忘了取消注释了。

取消注释后,再次编译,结果差42k rom?

Linking .pio/build/sipeed-longan-nano-lite/firmware.elf
/home/any/.platformio/packages/toolchain-gd32v/bin/../lib/gcc/riscv-nuclei-elf/9.2.0/../../../../riscv-nuclei-elf/bin/ld: .pio/build/sipeed-longan-nano-lite/firmware.elf section `.text' will not fit in region `flash'
/home/any/.platformio/packages/toolchain-gd32v/bin/../lib/gcc/riscv-nuclei-elf/9.2.0/../../../../riscv-nuclei-elf/bin/ld: region `flash' overflowed by 42910 bytes
collect2: error: ld returned 1 exit status
*** [.pio/build/sipeed-longan-nano-lite/firmware.elf] Error 1

请教,Lvgl如何裁剪?想放进64k rom的单片机里。我看Lvgl介绍最低需求好像就是64k rom.

最近编辑记录 Gentlepig (2020-09-12 17:53:24)

离线

页脚

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