页次: 1
大家用的交叉编译工具是什么版本的?我自己移植lvgl 试了几个编译链都不行。报错如下 https://whycan.com/files/members/15392/1111.png
看帖子要认真。 50楼有编译器下载。可以用那个。
https://pan.baidu.com/s/1TwOeLegxPyH1eKxDONQloA?pwd=08vz
找到了一个tina3.5的源码。可以编译的。
这边宿主机用的是 ubuntu16.4 64位
编译器用gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf
配置和编译过程可以参考这个博客:
https://www.cnblogs.com/lijianGX/p/17448150.html
可能没什么用,因为RBG转lvds的初始化驱动还是要写一下的。
主要是当前系统少什么功能编译一下复制加载进去。另外,i2c的驱动就是从这个SDK中编译出来的。
i2c-dev.zip
添加了i2c的驱动。将.ko文件插入内核,就可以设备中出现/dev/i2c-0
打通任督二脈。
粗步分析这是BLE的广播数据包。
< 02 06 00 2B 00 27 00 04 00 1D 05 00 7B 22 73 73 69 64 22 3A
22 77 68 79 63 61 6E 32 32 32 22 2C 22 77 69 66 69 5F 73 74
61 74 75 73 22 3A 31 7D
把这条给AI分析如下,
“05 00”:“05” 表示这部分广播数据的长度为 5 字节,“00” 表示广播数据类型为 “制造商特定数据”。
“7B 22 73 73 69 64 22 3A 22 77 68 79 63 61 6E 32 32 32 22 2C 22 77 69 66 69 5F 73 74 61 74 75 73 22 3A 31 7D”:这部分是制造商特定数据的具体内容,经过解码后,它是一个 JSON 格式的数据:{"ssid":"whycan222","wifi_status":1}。这里可以看出,它似乎包含了设备相关的网络信息,如 “ssid”(可能是设备连接的 Wi - Fi 网络名称)和 “wifi_status”(可能表示 Wi - Fi 连接状态,值为 1,但其具体含义需结合设备文档确定)。
根据设备树和进行测试,目前可以添加键盘
keyboard {
compatible = "allwinner,keyboard_2000mv";
reg = <0x00000000 0x01c23400 0x00000000 0x00000400>;
interrupts = <0x00000016>;
status = "okay";
pwr-key = <0x00000024 0x00000003 0x0000000e 0x00000000 0x00000006 0x00000001 0x00000000>;
usb-sts = <0x00000024 0x00000003 0x0000000a 0x00000000 0x00000006 0x00000001 0x00000000>;
key_cnt = <0x00000006>;
key0 = <0x000000f8 0x00000073>;
key1 = <0x00000193 0x00000072>;
key2 = <0x0000024d 0x0000008b>;
key3 = <0x00000307 0x0000001c>;
key4 = <0x000003c1 0x00000066>;
key5 = <0x000004b9 0x00000067>;
};
电路可以参考以下,但是电压值要按设备树上的取。
经过测试,可以读取到键值:
root@TinaLinux:/# cat /dev/input/event0 | hexdum
0002040 01ee 0000 ea71 0006 0001 008b 0001 0000
0002050 01ee 0000 ea71 0006 0000 0000 0000 0000
0002060 01ee 0000 26d4 0009 0001 008b 0000 0000
0002070 01ee 0000 26d4 0009 0000 0000 0000 0000
0002080 01ef 0000 4dda 0007 0001 0073 0001 0000
0002090 01ef 0000 4dda 0007 0000 0000 0000 0000
00020a0 01ef 0000 17b1 0009 0001 0073 0000 0000
00020b0 01ef 0000 17b1 0009 0000 0000 0000 0000
00020c0 01f0 0000 9088 0004 0001 0066 0001 0000
00020d0 01f0 0000 9088 0004 0000 0000 0000 0000
00020e0 01f0 0000 ccbd 0006 0001 0066 0000 0000
00020f0 01f0 0000 ccbd 0006 0000 0000 0000 0000
从设备树上看,可以做6个按键。这样就可以做LVGL的输入设备了。
另外,做了一些测试,以下做为分享:
echo 0 >/dev/watchdog0 喂狗。 一但开始喂狗,就是启动了看门狗,需要一直喂,不然会重启
播放声音
aplay -Dhw:audiocodec /etc/kaiji.wav
设置音量
amixer -Dhw:audiocodec cset name='headphone volume' 50
哪位大佬帮编译个I2C的驱动。
目前看 sys目录下是有设备的,但是dev下没有i2c...
root@TinaLinux:/# ls /sys/bus/i2c/devices
0-0038 0-0042 0-0048 0-004a 0-0051 i2c-0
没有设备。。。
ls: /dev/i2c*: No such file or directory
我找了个F1C200的5.7.1的内核,编译的i2c-dev.ko驱动用不了[可能是我不会操作]。。。
root@TinaLinux:~# insmod i2c-dev.ko
failed to insert i2c-dev.ko
微凉VeiLiang 说:我搞过。裸机是可以,但是最后还是上个rtos会更方便一点
老兄可以分享下 代码???
这里有,USB主机 从机都可以选择。
https://whycan.com/t_10475.html
ui 界面颜值在线,技术过硬。
请问这个网页是如何部署的,lvgl的程序是如何感知网页保存的设置,并更新界面?
全志 V851S 和 V851SE 规格:
CPU
Arm Cortex-A7 CPU 内核 @ 900 MHz
RISC-V 内核 @ 600 MHz
内存 – 64MB DDR2 片上
存储 I/F – 3个 SMHC用于 eMMC/SDHC,SPI NAND/NOR 闪存接口
AI加速器 – 0.5 TOPS NPU,支持TensorFlow、Caffe、Tflite、Pytorch、ONNX等。
视频编码/解码
H.264/H.265 编码器,高达 3840×2160 @ 20fps
H.264/H.265多码流实时编码能力:5M@25fps+720p@25fps
JPEG 编码器 1080p60
视频输出(仅限 V851S)
2 通道 MIPI DSI 高达 1280×720 @ 60fps
TCONLCD接口
i8080接口,最高800×480@60fps
串行 RGB 接口,最高 800×480 @ 60fps
RGB 接口,带 DE/SYNC 模式,最高 1920×1080 @ 60fps
视频输入
最大分辨率为 2560 x 1440 的 ISP,高达 4Mbps @ 30fps
10 位并行 CSI 接口,高达 4 个 720p30
4 通道 MIPI CSI 输入或两个 2 通道 MIPI CSI 输入,速度高达 4Mbps @ 30 fps
音频
DAC 支持 16 位和 20 位采样分辨率,8 kHz ~ 192 kHz DAC 采样率
ADC 支持 16 位和 20 位采样分辨率,8 kHz ~ 48 kHz ADC 采样率
音频输入 – 1个差分麦克风输入 (MICIN1P/N)
音频输出 – 1个单端线路输出:(LINEOUTLP)
1个I2S/PCM 外部接口,用于连接外部功率放大器和 MIC ADC
DMIC – 多达 8 个数字 PDM 麦克风,采样率从 8 kHz ~ 48 kHz
网络
V851S– 带 RMII 接口的 10/100M 快速以太网
V851SE– SIP 100M EPHY
USB – USB 2.0 DRD
其他外设接口 – 5个TWI/I2C、4个 UART、 多达4个SPI、6个 GPIO“groups”、通用模数转换器 (GPADC)、11 通道 PWM
安全系统
加密引擎,具有用于加密和解密的对称算法(AES、DES、3DES)、用于防篡改的哈希算法(MD5、SHA、HMAC)、公钥算法、160 位硬件 PRNG、256 位硬件 TRNG
安全 ID (SID) – 2048 位 eFuse
V851S/V851SE 已获得 1 级 PSA 认证
封装 – QFN88、9 x 9 mm、0.35mm 孔间距
可以用第3种方法 关键字 后缀表达式
这里要用到 栈 ,前提是上位机发送过来的句子是完整的。以下是复制过来的,可以参考一下。
1、首先从左到右扫描每一个字符。如果扫描到的字符是操作数(如a、b等),就直接将操作数push进操作数栈中。
2、如果扫描到的字符是一个操作符,分三种情况:
(1) 如果操作符栈是空的,直接将操作符push到操作符栈中。
(2) 如果该操作符的优先级大于操作符栈栈顶的操作符,就直接将操作符push到操作符栈中。(因为该操作符运算会比栈中的优先级低的先进行运算)
(3)如果该操作符为+、-、*、/等且优先级低于栈顶的操作符,就将栈顶的操作符pop, 直到该操作符的优先级大于栈顶端的操作符,将扫描到的操作符push到栈中。
3、如果遇到的操作符是左括号"(”,就直接将该操作符push到操作符栈中。
4、如果扫描到的操作符是右括号“)”,将操作符栈中的操作符(pop)且操作数栈中出栈两个元素进行运算,运算完之后再push回操作数栈,直到遇见左括号“(”,最后将操作符栈中的左括号pop掉。
5、如果输入的中缀表达式已经扫描完了,但是操作符栈中仍然存在操作符的时候,我们应该将操作符栈中的操作符pop,然后进行操作数栈的运算。
页次: 1