页次: 1
对网站再提点意见, https://www.artinchip.com/knowledge/oxy_ex-1/topics/d12xUserManual-d13x.html
这个页面为例,显示器假设是1080P的,在浏览时上面的约1/3是不可动的,导致主要的内容看起来很很费力。
regbbs 说:@echo
少在那误导了。
https://baike.baidu.com/item/Rtems/6985412
https://baike.baidu.com/item/vxworks?fromModule=lemma_search-box
看看哪个不是用在可靠性极高的地方。你自己多踩一些坑就明白了
那么裸机也一样有坑,也一定会踩坑的。
RTOS的坑和裸机的坑不一样,以及在DEBUG时候是不一样的。
那么多航空航天军用设备都可以用RTOS,这种可靠性实时性要求高的都可以用,你哪来的自信说裸机是更好的选择。
@echo
少在那误导了。
https://baike.baidu.com/item/Rtems/6985412
https://baike.baidu.com/item/vxworks?fromModule=lemma_search-box
看看哪个不是用在可靠性极高的地方。
lv_table
这个的例子在lvgl的例子有。https://docs.lvgl.io/master/widgets/table.html
需要自己处理绘制的回调函数和按键,有时候如果一个控件不接受焦点(不能处理按键等),可以用另一个代替,
然后在另一个的函数中控制不接受焦点的控件。
@huaze
static lv_group_t* group;
lv_indev_t* indev_keypad;
static lv_indev_drv_t kb_drv;
lv_indev_drv_init(&kb_drv);
kb_drv.type = LV_INDEV_TYPE_KEYPAD;
kb_drv.read_cb = 回调函数;
indev_keypad = lv_indev_drv_register(&kb_drv);
lv_indev_set_group(indev_keypad, group);
用这个来注册,然后把需要接收按键的控件加入group。
这样当有按键按下,LVGL会根据键值处理对应的按键。
回调函数(linux下的):
void evdev_btn_read(lv_indev_drv_t * drv, lv_indev_data_t * data)
{
struct input_event in;
while(read(evdev_fd, &in, sizeof(struct input_event)) > 0)
{
if(drv->type == LV_INDEV_TYPE_KEYPAD)
{
//4 button
switch(in.code&0xFF)
{
case 0x10:
data->key = LV_KEY_UP;
break;
case 0x11:
data->key = LV_KEY_DOWN;
break;
case 0x12:
data->key = LV_KEY_ENTER;
break;
case 0x13:
data->key = LV_KEY_ESC;
break;
default:
data->key = 0;
break;
}
if (data->key != 0)
{
/* Only record button state when actual output is produced to prevent widgets from refreshing */
data->state = (in.value) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
}
evdev_key_val = data->key;
evdev_button = data->state;
if(data->state == LV_INDEV_STATE_PR)
{
keyPushed = true;
}
return;
}
}
}
如果是单片机平台,
read(evdev_fd, &in, sizeof(struct input_event)这里来通过读取GPIO来获取按键状态
提示行号了,你倒是把行号显示出来啊
大佬们,黑白屏有啥好用的多级菜单框架?
http://www.hpmicro.com/support/shop.html
官方网站有价格的。
HPM6750 CNY55.00 — 55.00
HPM6730 CNY53.00 — 53.00
尝试了lv_style_set_outline_color
lv_obj_set_style_outline_color
这个两个函数都没有作用, 这个对通过lv_obj_create 生成的obj 有作用, 但button这个框没有作用
saveButton = lv_btn_create(scr);
lv_obj_set_size(saveButton, 150, 60);
lv_obj_set_pos(saveButton, 650, 530);
lv_obj_set_style_outline_width(saveButton, 5, LV_STATE_FOCUS_KEY);
lv_obj_set_style_outline_color(saveButton, lv_palette_darken(LV_PALETTE_GREEN, 1), LV_STATE_FOCUS_KEY);
lv_obj_set_style_outline_pad(saveButton, 18, LV_STATE_FOCUS_KEY);
lvgl_v8.zip
8.0的,lv_driver替换的时候注意不要把文件覆盖了。
其实lvgl的git上面有linux的移植,基于frame buffer。只要把ssd20x的特定初始化部分添加上就可以。
我要撒点冷水,想要在工程中应用的GUI,必须要具备的功能先要有,不是一个看起来demo很漂亮的GUI就是好的,至于全平台,这个在初期根本就不必要考虑。
甚至只要所有的工作由自己完成,打点函数可以移植,就很容易搞成“全平台”。
从介绍来看,主要的还是为了MCU的GUI应用准备的,那么单色,小尺寸的彩色屏才是核心的,就的考虑这些设备上面,控件哪些是最必要的,交互是最方便的,
可能设备就2-3个按钮,还要完成复杂的交互。
GUI不是有了显示的控件就行了,还需要窗口管理器,这个非常重要,用窗口管理器来做不同画面的切换和交互,而不是自己去堆控件。
好些不管是很久了还是新秀的GUI,对于工业中,只有几个按钮来实现导航的系统来说,真的是很难用。得用其他各种办法实现。比如前年搞得一个设备,用了STemwin,主要2个或者三个按钮,想要界面导航、数据修改都尽量方便,并不好做。最近准备考虑LVGL,也同样存在这样的情况。
推荐一个单色屏用的GUI, https://gitee.com/Polarix/simplegui 。控件简单实用,在12864之类的屏上面,用起来是很方便的。只用2个按钮导航就可以。
相信你肯定对这些很了解的。
借楼再给其他朋友点信息。
三线和四线还是有很大差异的,三线的话,数据是9位,四线数据是8位,对于SPI不支持9位数据位的MCU等,就只能用GPIO模拟。
一般9488如果不是RGB接口,那么硬件SPI直接读写和用GPIO直接读写差异还是很大的。使用并行16位接口,效果也不如RGB效果好。
RGB驱动的话,画面切换没有撕裂,然后不管是用16位MCU总线驱动还是“SPI+DMA”,都能感受到画面的切换过程(我自己项目中是这样)。
对于使用RGB接口,这个“SPI”接口只用来初始化,用GPIO模拟和硬件SPI读写,差不了太多。有的RGB屏可以通过引脚或者寄存器切换比如320*480或者480*320,但是9488不行,只能RGB 320*480,通过寄存器设置成480*320的话,会不能显示完全,有1/3黑屏(如果有哪位知道设置,欢迎告知下)。
你的意思我理解呀。RGB屏幕就这样,320x480和480x320不一样。
我的意思是SPI三线还是四线其实没啥区别,都只能写写寄存器。
有条件还是用MCU接口,也不会浪费ILI9488内部的GRAM。regbbs 说:我的意思是“SPI”作为初始化,数据还是通过RBG接口,但是设置横屏模式,刷新不正常,不能全屏显示。要想当作480X320的分辨率用,只能软件实现。
echo 说:分辨率320x480,这个分辨率用SPI刷数据搞不定,即使30帧16位色,320*480*16*30/1e6=73.7M,实际ILI9488的SCL最高频率到不了这个频率的一半。
所以3线9位,还是4线SPI其实都没啥差别,都是写寄存器用的,对速度没要求,用软件模拟就行了。
我的意思是“SPI”作为初始化,数据还是通过RBG接口,但是设置横屏模式,刷新不正常,不能全屏显示。要想当作480X320的分辨率用,只能软件实现。
分辨率320x480,这个分辨率用SPI刷数据搞不定,即使30帧16位色,320*480*16*30/1e6=73.7M,实际ILI9488的SCL最高频率到不了这个频率的一半。
所以3线9位,还是4线SPI其实都没啥差别,都是写寄存器用的,对速度没要求,用软件模拟就行了。regbbs 说:产品用这个屏,确实很坑。
RGB模式下没法硬件上横屏,只能软件转换XY坐标。一般都会引出所谓的“SPI”接口,其实是伪SPI,如果是三线模式就比较坑,很可能得用MCU的GPIO模拟,四线模式的话,就可以用硬件SPI接口连接了。
即使用RGB模式,也要用“SPI”接口初始化很多寄存器才可以正常用。初始化代码可以找厂家提供,主要是看需要初始化的寄存器值,然后转换成自己的读写函数。
越搞不定,越想搞!!
我用的和你的库一样, 动了这一处,难道不对?
https://whycan.cn/files/members/1398/QQ截图20200515172342.jpg
应该用跳转指令,XX 00 00 EA, 跳过某些指令
记错了,是ucos3 https://whycan.cn/t_4143.html
其实只要看下arm汇编,以及对照下970的手册,查找下对应函数的功能,自己就可以搞定。
毕竟emwin这个涉及到商业产品。
100s又掉进坑了
buildroot掉坑记录:
交叉编译工具链:gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)
buildroot版本:buildroot-2019.02.2 (低版本测试有相同的问题)
Target Architecture (ARM (little endian))
Target Architecture Variant (arm926t)
ARM instruction set (Thumb)
External toolchain gcc version (7.x)
External toolchain kernel headers series (4.14.x)
External toolchain C library (musl (experimental))Incorrect selection of kernel headers: expected 4.14.x, got 4.10.x
make[1]: *** [/work/nano/buildroot-2019.02.2/output/build/toolchain-external-custom/.stamp_configured] Error 1
make: *** [_all] Error 2改为:
External toolchain kernel headers series (4.10.x)
External toolchain C library (glibc/eglibc)
新问题:
ln: failed to create symbolic link ‘/work/nano/buildroot-2019.02.2/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib’: No such file or directory
make[1]: *** [/work/nano/buildroot-2019.02.2/output/build/toolchain-external-custom/.stamp_staging_installed] Error 1
make: *** [_all] Error 2权限问题?手动复制过去编译中>>>
阔以了,权限问题
gcc可以直接在buildroot中选择个7.x或者8.x的,不需要用linaro也可以
页次: 1