想在n32926上跑一下emwin,奈何既没有源码,也没有链接库,无法下手。 ucgui3.98版本,功能相对emwin的新版,还是较弱~
离线
这种应该是不行的,有些lib可能还和编译器版本相关
离线
使用NXP提供的静态lib,链接试了下,居然成功了!
不知道是否有其他坑
离线
离线
随便试了一把, 用这个工具链:
$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/4.8.2/lto-wrapper
Target: arm-none-eabi
Configured with: ../gcc-4.8.2/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/lib/include' --mandir='/usr/lib/share/man' --infodir='/usr/lib/share/info' --sysconfdir=/etc --localstatedir=/var --libexecdir='/usr/lib/lib/gcc-arm-none-eabi' --disable-maintainer-mode --disable-dependency-tracking --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/doc/gcc-arm-none-eabi/info --mandir=/usr/share/man --htmldir=/usr/share/doc/gcc-arm-none-eabi/html --pdfdir=/usr/share/doc/gcc-arm-none-eabi/pdf --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --with-system-zlib --enable-multilib --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-libstdc++-v3 --disable-nls --disable-shared --disable-threads --disable-tls --disable-plugin --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-none-eabi --with-gnu-as --with-gnu-ld --with-headers=no --without-newlib --with-pkgversion=4.8.2-14ubuntu1+6 --without-included-gettext --with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r CFLAGS='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat' CPPFLAGS=-D_FORTIFY_SOURCE=2 CXXFLAGS='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat' FFLAGS='-g -O2' LDFLAGS=-Wl,-z,relro AR_FOR_TARGET=arm-none-eabi-ar AS_FOR_TARGET=arm-none-eabi-as LD_FOR_TARGET=arm-none-eabi-ld NM_FOR_TARGET=arm-none-eabi-nm OBJDUMP_FOR_TARGET=arm-none-eabi-objdump RANLIB_FOR_TARGET=arm-none-eabi-ranlib READELF_FOR_TARGET=arm-none-eabi-readelf STRIP_FOR_TARGET=arm-none-eabi-strip
Thread model: single
gcc version 4.8.2 (4.8.2-14ubuntu1+6)
编译指令:
emWin/Sample/Application/GUIDemo$ arm-none-eabi-gcc -o test GUIConf.c GUIDEMO.c GUIDEMO_Intro.c GUIDEMO_Resource.c ../../../Sample/GUI_X/GUI_X_Ex.c GUIDEMO_Conf.c LCDConf.c GUIDEMO_Start.c ../../../Sample/DisplayDriver/GUIDRV_Template.c -I../../../Include -L../../../Lib -lemwin -static -lm -DLCD_SIMCONTROLLER --specs=nosys.specs
运行出段错误:
# ./test
Segmentation fault
gdb调试:
# ./gdb test
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /tmp/test...done.
(gdb) run
Starting program: /tmp/test: symbol 'ps_pdwrite': can't resolve symbol
: symbol 'ps_pglobal_lookup': can't resolve symbol
: symbol 'ps_lsetregs': can't resolve symbol
: symbol 'ps_getpid': can't resolve symbol
: symbol 'ps_lgetfpregs': can't resolve symbol
: symbol 'ps_lsetfpregs': can't resolve symbol
: symbol 'ps_lgetregs': can't resolve symbol
: symbol 'ps_pdread': can't resolve symbol
Program received signal SIGSEGV, Segmentation fault.
_malloc_r (reent_ptr=reent_ptr@entry=0x497f8 <impure_data>, bytes=bytes@entry=1024) at ../../../../../newlib/libc/stdlib/mallocr.c:2587
2587 ../../../../../newlib/libc/stdlib/mallocr.c: No such file or directory.
(gdb)
结论:
编译链接都成功了,但是运行出错,貌似 malloc 出错?
离线
收藏一下
离线
安装工具链:
emWin/Sample/Application/GUIDemo$ sudo apt-get install gcc-arm-linux-gnueabi
编译指令:
emWin/Sample/Application/GUIDemo$ arm-linux-gnueabi-gcc -o test GUIConf.c GUIDEMO.c GUIDEMO_Intro.c GUIDEMO_Resource.c ../../../Sample/GUI_X/GUI_X_Ex.c GUIDEMO_Conf.c LCDConf.c GUIDEMO_Start.c ../../../Sample/DisplayDriver/GUIDRV_Template.c -I../../../Include -L../../../Lib -lemwin -static -lm -DLCD_SIMCONTROLLER
终于在V3s@linux 系统跑起来了,虽然没有画面。
打包好的文件在 QQ群 544762792 附件:
emwin/emWin_522_arm_linux_link_ok.7z
只能编译链接运行,并不能看到任何界面。
离线
收藏一下
离线
我已经在32926上面把emwin的demo跑起来了。你的V3S也是链接的ARM9的lib吗?
离线
安装工具链:
编译指令:
终于在V3s@linux 系统跑起来了,虽然没有画面。
打包好的文件在 QQ群 544762792 附件:
只能编译链接运行,并不能看到任何界面。
@晕哥:我下载下来看了,emwin里面的都没有fb驱动画点实现,怎么显示界面?
离线
如果是裸机开发,就用NXP最近发布的V5.50;如果是linux应用程序,就用nuvoton发布的V5.48k!
完美!这两个厂商发布的库,都比ST的版本新,而且它们没有做任何限制,ARM内核一致就可以用。
最近编辑记录 armstrong (2019-12-01 14:33:48)
离线
@晕哥:我下载下来看了,emwin里面的都没有fb驱动画点实现,怎么显示界面?
emwin只需要fb0映射得到的一个虚拟内存指针,这个指针交给emwin,剩下的事情emwin自己能搞定。所有绘图函数emwin自带的。
离线
emwin只需要fb0映射得到的一个虚拟内存指针,这个指针交给emwin,剩下的事情emwin自己能搞定。所有绘图函数emwin自带的。
能共享下新塘的V5.48k么?或者告知下在哪个下载,我在新塘github下的是5.46
我用的是#define GUI_VERSION 546081
用这个编译后运行,不知道GUI_Init()怎么没有调用这些函数GUI_X_Config();LCD_X_Config();
我手动加上这些函数,发现GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);不论申请多大的空间都是失败,
并且查询下GUI_ALLOC_GetNumFreeBytes() 一直是等于0.
if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
GUI_ErrorOut("Not enough memory available.");
return;
}
往高手能指点迷津~~
离线
@armstrong 这是我在另外一个贴里的求助~~
//
// Recommended memory to run the sample with adequate performance
//
#define RECOMMENDED_MEMORY (1024L * 200)//(1024L * 2200)
void GUIDEMO_Main(void) {
printf("GUIDEMO_Main.1()\n");
#if GUI_WINSUPPORT
FRAMEWIN_SKINFLEX_PROPS Framewin_Props;
#endif
#if GUIDEMO_USE_AUTO_BK
U32 NumFreeBytes;
int BitsPerPixel;
#endif
//
// Check if recommended memory for the sample is available
//
if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
GUI_ErrorOut("Not enough memory available.");
U32 GetNumFreeBytes = GUI_ALLOC_GetNumFreeBytes();
printf("GUI_ALLOC_GetNumFreeBytes()=0x%x\n",GetNumFreeBytes);
printf("Not enough memory available.\n");
return;
}
printf("GUIDEMO_Main.2()\n");
[root@EmbedSky sky]# chmod 777 GUIDemo
[root@EmbedSky sky]# ./GUIDemo
uVideoSize = 0x25800
var.xres = 0x140
var.yres = 0xf0
pVideoBuffer = 0x40001000
Main Task thread
MainTask()
GUI_Init()
GUIDEMO_Main.1()
GUI_ALLOC_GetNumFreeBytes()=0x0
Not enough memory available.
[root@EmbedSky sky]#
为什么我编译新塘的emwin运行后老是这里申请不到内存呢?
下面是配置的emwin内存大小
#define GUI_NUMBYTES (5 * 1024 * 1024) //0x1000 //0x20000
static U32 aMemory[GUI_NUMBYTES / 4];
#define GUI_BLOCKSIZE 0x100
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUI_X_Config
*
* Purpose:
* Called during the initialization process in order to set up the
* available memory for the GUI.
*/
void GUI_X_Config(void) {
//
// 32 bit aligned memory area
//
// static U32 aMemory[GUI_NUMBYTES / 4];
//
// Assign memory to emWin
//
GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
//设置由存储器管理系统分配的存储块的平均尺寸
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //块平均尺寸
//
// Set default font
//
GUI_SetDefaultFont(GUI_FONT_6X8);
}
离线
emwin只需要fb0映射得到的一个虚拟内存指针,这个指针交给emwin,剩下的事情emwin自己能搞定。所有绘图函数emwin自带的。
@armstrong
大神我好像找到了,是这个版本么?
#define GUI_VERSION 548112
离线
@大帅 是不是因为绑定了新唐什么id, 然后就故意挂了。
离线
@大帅 是不是因为绑定了新唐什么id, 然后就故意挂了。
上面的大神不是说没有限制么,另外好像新塘芯片没有id,
现在只待大神解惑,
或者晚上闲了回去再试试大神说的这个版本,
离线
上面的大神不是说没有限制么,另外好像新塘芯片没有id,
现在只待大神解惑,
或者晚上闲了回去再试试大神说的这个版本,
感觉不太可能吧, 这样不就打开了潘多拉魔盒?
离线
上面的大神不是说没有限制么,另外好像新塘芯片没有id,
现在只待大神解惑,
或者晚上闲了回去再试试大神说的这个版本,
你用这个:
https://github.com/OpenNuvoton/NUC970_Linux_Applications/tree/master/emWin
注意自己适配一下LCDConf.c文件,里面的代码有点烂。
离线
感觉不太可能吧, 这样不就打开了潘多拉魔盒?
潘多拉魔盒早就打开了,可以通用的emWin库有:
裸机: keil自带的,NXP发布的。
Linux:Nuvoton发布的。
离线
还记得某位大神分享的emWin演示吗?它用的就是nuvoton发布的emWin库,运行几天几夜不死机。
https://whycan.cn/t_2689.html
离线
还记得某位大神分享的emWin演示吗?它用的就是nuvoton发布的emWin库,运行几天几夜不死机。
https://whycan.cn/t_2689.html
谢谢大神,下载下来晚上回去试试~~
离线
潘多拉魔盒早就打开了,可以通用的emWin库有:
裸机: keil自带的,NXP发布的。
Linux:Nuvoton发布的。
大神这个你在别的cpu上跑过么,我在吃灰的2440上跑还是之前的错误。。。~~~~迷茫了
离线
如果是裸机开发,就用NXP最近发布的V5.50;如果是linux应用程序,就用nuvoton发布的V5.48k!
完美!这两个厂商发布的库,都比ST的版本新,而且它们没有做任何限制,ARM内核一致就可以用。
突然想起来,是不是arm9架构不一样? ARM920T <--> ARM926EJ-S
离线
s3c2410/s3c2440是armv4t;
s3c2416才是跟f1c100s一样的,跟nuvoton也是一样的。
离线
大佬,稳! 学习了
s3c2410/s3c2440是armv4t;
s3c2416才是跟f1c100s一样的,跟nuvoton也是一样的。
离线
s3c2410/s3c2440是armv4t;
s3c2416才是跟f1c100s一样的,跟nuvoton也是一样的。
@armstrong
大神我在f1c100上面试了: 提示打不开/dev/ge2d,没有硬件加速。。。
另外我编译的时候用的是arm-none-linux-gnueabi-gcc不知道影响不?
# ./NuvotonGUIDemo
uVideoSize = 0x177000
var.xres = 0x320
var.yres = 0x1e0
pVideoBuffer = 0xb6d8f000
Main Task thread
WM_SetCreateFlags(WM_CF_MEMDEV)
GUI_Init()
GUI_X_Config()
GUI_ALLOC_GetNumUsedBlocks()=0x0
LCD_X_Config()
### g_xres=800 g_yres=480 g_bits_per_pixel=32
LCD_GetSwapXY()
LCD_SetVRAMAddrEx(0, (void *)pVideoBuffer)
No LCD calibration
Cannot open ge2d!
^C
#
#
最近编辑记录 大帅 (2019-12-03 13:48:10)
离线
@armstrong
大神我在f1c100上面试了: 提示打不开/dev/ge2d,没有硬件加速。。。另外我编译的时候用的是arm-none-linux-gnueabi-gcc不知道影响不?
# ./NuvotonGUIDemo
uVideoSize = 0x177000
var.xres = 0x320
var.yres = 0x1e0
pVideoBuffer = 0xb6d8f000
Main Task thread
WM_SetCreateFlags(WM_CF_MEMDEV)
GUI_Init()
GUI_X_Config()
GUI_ALLOC_GetNumUsedBlocks()=0x0
LCD_X_Config()
### g_xres=800 g_yres=480 g_bits_per_pixel=32
LCD_GetSwapXY()
LCD_SetVRAMAddrEx(0, (void *)pVideoBuffer)
No LCD calibration
Cannot open ge2d!
^C
#
#
sorry,你不能使用nuvoton里的LCDConf.c,要自己适配一个。
用这个模板即可,稍微改一下就行的。
比如你制作了自己的GUIDRV_Template16_API或者GUIDRV_Template32_API,然后把这个替换LCDConf.c里的这里
if (g_bits_per_pixel == 32)
GUI_DEVICE_CreateAndLink(&GUIDRV_Template32_API, GUICC_M888, 0, 0);
else
GUI_DEVICE_CreateAndLink(&GUIDRV_Template16_API, GUICC_M565, 0, 0);
模板:
https://whycan.cn/files/members/1592/GUIDRV_Template_c.txt
为什么要自己适配呢?因为nuvoton改写了emWin源码,把库里的GUIDRV_LIN_32/GUIDRV_LIN_16改成依赖ge2d的了。
自己适配一个就不用它们,自己来实现一个在内存块里绘制点、线、面的驱动程序。当然这并不复杂,因为emWin有模板。
最近编辑记录 armstrong (2019-12-04 11:04:48)
离线
另外,要使用能编译busybox的gcc版本,不要使用裸机编译器;因为它们的c/c++库不一样。
最近编辑记录 armstrong (2019-12-04 11:01:26)
离线
sorry,你不能使用nuvoton里的LCDConf.c,要自己适配一个。
用这个模板即可,稍微改一下就行的。
比如你制作了自己的GUIDRV_Template16_API或者GUIDRV_Template32_API,然后把这个替换LCDConf.c里的这里
if (g_bits_per_pixel == 32)
GUI_DEVICE_CreateAndLink(&GUIDRV_Template32_API, GUICC_M888, 0, 0);
else
GUI_DEVICE_CreateAndLink(&GUIDRV_Template16_API, GUICC_M565, 0, 0);
模板:
https://whycan.cn/files/members/1592/GUIDRV_Template_c.txt为什么要自己适配呢?因为nuvoton改写了emWin源码,把库里的GUIDRV_LIN_32/GUIDRV_LIN_16改成依赖ge2d的了。
自己适配一个就不用它们,自己来实现一个在内存块里绘制点、线、面的驱动程序。当然这并不复杂,因为emWin有模板。
@armstrong
哇呀呀,万分的感谢大佬,~~ 又有动力继续搞了,哈哈
离线
确实是有检测是否是Nuvoton的代码。但是跳过后,会出现 Illegal instruction。还没用查找到具体是哪个地方出现的这个。
最近编辑记录 regbbs (2020-05-10 00:27:30)
离线
确实是有检测是否是Nuvoton的代码。但是跳过后,会出现 Illegal instruction。还没用查找到具体是哪个地方出现的这个。
https://whycan.cn/files/members/3640/em.png
流弊,继续跟进!!!
离线
跑这个得话就好了,一身轻松
离线
假装可以@大帅,@lhb882
该发的我都发了,只需要修改一个地方就可以。
可以直接用里面的除了GUIDRV_LIN_32/GUIDRV_LIN_16的其他lin驱动。
离线
假装可以@大帅,@lhb882
该发的我都发了,只需要修改一个地方就可以。
可以直接用里面的除了GUIDRV_LIN_32/GUIDRV_LIN_16的其他lin驱动。
请教修改哪一处呢?貌似前面有一个帖子 emwin改了授权协议了,是开源了吗?
离线
请教修改哪一处呢?貌似前面有一个帖子 emwin改了授权协议了,是开源了吗?
记错了,是ucos3 https://whycan.cn/t_4143.html
离线
记错了,是ucos3 https://whycan.cn/t_4143.html
其实只要看下arm汇编,以及对照下970的手册,查找下对应函数的功能,自己就可以搞定。
毕竟emwin这个涉及到商业产品。
离线
用链接器的redirect功能,把库里的某几个函数旁路掉,自己写函数代替。
或者索性自己写个GUI_DEVICE_API,别用内置<GUIDRV_Lin.h>文件里的驱动就行。
自定义驱动形式如下,有模板的,不难实现,针对内存操作的更简单:
const GUI_DEVICE_API GUIDRV_Template_API = {
//
// Data
//
DEVICE_CLASS_DRIVER,
//
// Drawing functions
//
_DrawBitmap,
_DrawHLine,
_DrawVLine,
_FillRect,
_GetPixelIndex,
_SetPixelIndex,
_XorPixel,
//
// Set origin
//
_SetOrg,
//
// Request information
//
_GetDevFunc,
_GetDevProp,
_GetDevData,
_GetRect,
};
最近编辑记录 armstrong (2020-05-13 18:20:53)
离线
找了下资料,没看到GNU-ld有redirect功能;而【mdk的】armlink和【IAR的】ilinkarm都有!
离线
其实只要看下arm汇编,以及对照下970的手册,查找下对应函数的功能,自己就可以搞定。
毕竟emwin这个涉及到商业产品。
百思不得其解。。。
参照regbbs的思路修改了一处,重新编译,
为啥俺的就是申请不到内存空间给gui?
void GUI_X_Config(void) {
printf("GUI_X_Config()\n");
static U32 aMemory[GUI_NUMBYTES / 4];
GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
GUI_SetDefaultFont(GUI_FONT_6X8);
unsigned int GetNumFreeBytes;
GetNumFreeBytes = GUI_ALLOC_GetNumUsedBlocks();
printf("GUI_ALLOC_GetNumUsedBlocks()=0x%x\n",GetNumFreeBytes);
GUI_ALLOC_DATATYPE i = GUI_ALLOC_GetNumFreeBytes();
printf("%d = GUI_ALLOC_GetNumFreeBytes().\n", i);
if ( i < (1024L * 2200) ){ //if ( i <RECOMMENDED_MEMORY) { //(1024L * 2200)
printf("Not enough memory available.\n");
return;
}
}
编译gcc:arm-2014.05/bin/arm-none-linux-gnueabi-gcc
运行结果:
# ./GUIDemo
uVideoSize = 0x177000
var.xres = 0x320
var.yres = 0x1e0
pVideoBuffer = 0xb6e78000
Main Task thread
WM_SetCreateFlags(WM_CF_MEMDEV)
GUI_Init()
GUI_X_Config()
GUI_ALLOC_GetNumUsedBlocks()=0x0
0 = GUI_ALLOC_GetNumFreeBytes().
Not enough memory available.
LCD_X_Config()
### g_xres=800 g_yres=480 g_bits_per_pixel=32
LCD_GetSwapXY()
No LCD calibration
800, 480, 32
0=GUI_Init()
WM_MULTIBUF_Enable(1)
GUIDEMO_Main()
GUIDEMO_Main()
Not enough memory available.
#
离线
@大帅 ,只需要改一个地方,不行就是你改的地方不对。我用的是那个master的库测试的。
离线
@大帅 ,只需要改一个地方,不行就是你改的地方不对。我用的是那个master的库测试的。
越搞不定,越想搞!!
我用的和你的库一样, 动了这一处,难道不对?
离线
越搞不定,越想搞!!
我用的和你的库一样, 动了这一处,难道不对?
https://whycan.cn/files/members/1398/QQ截图20200515172342.jpg
这么有研究精神我喜欢! 坐等大佬搞定
离线
越搞不定,越想搞!!
我用的和你的库一样, 动了这一处,难道不对?
https://whycan.cn/files/members/1398/QQ截图20200515172342.jpg
应该用跳转指令,XX 00 00 EA, 跳过某些指令
离线
应该用跳转指令,XX 00 00 EA, 跳过某些指令
大虾可以帮我分析一下么?
我在N32926上面跑N9H26的 emWin demo,编译通过,只是运行一片黑。
GUIDRV_LIN_16 和 GIANTPLUS_GPM1006D 都和我的板子一样,如果放data到u8FrameBuf,是可以显示图片的。
就是指针要或800000000不明白,但是我注释掉也一样的不行。
u8FrameBufPtr = (UINT8 *)((UINT32)u8FrameBuf );//| 0x80000000);
离线
我是用N9H26的裸奔程序
离线
@大帅 ,只需要改一个地方,不行就是你改的地方不对。我用的是那个master的库测试的。
大佬可否告知下邮箱?
帮我试下.a,分析了几天感觉好像不在.a的问题上
离线
我是用N9H26的裸奔程序
没有看这两个芯片的资料。
按照经验0x80000000应该是分配给LCD的framebuffer,所以直接放数据是可以在屏幕上显示出来的。
至于不显示,你可以试试除了GUIDRV_LIN_32/GUIDRV_LIN_16的其他lin驱动,要看N32926和N9H26的LCD是不是一样,有没有硬件加速。
离线
大佬可否告知下邮箱?
帮我试下.a,分析了几天感觉好像不在.a的问题上
离线
离线
俺是这么干的更狠一些,看着应该没什么错,我再试试你的,感觉不像是a的问题。
https://whycan.cn/files/members/1398/QQ图片20200604104033.png
卧槽,卧槽,丢塔喽木~~~
问题原来一直是空间分配的太小了。。。。。。 __Gui_NumBytes__=8192000
离线
卧槽,卧槽,丢塔喽木~~~
问题原来一直是空间分配的太小了。。。。。。 __Gui_NumBytes__=8192000
可以讲下过程吗,或放出改过的LIB吗?
离线