Hi3559示例程序mpp/sample/tde编译运行

配置NFS文件系统

参考博客

加载驱动

提示:驱动需要跟hi3559的内核相匹配:

在挂载NFS文件系统之后,可以在服务端系统文件夹下进行操作:

  • 在linux服务器端执行:

(1)找到sdk包中mpp文件夹,路径一般是Hi3559AV100_SDK_Vx.x.x.x/mpp。(需要先运行**./sdk.unpack**)
(2)将mpp文件夹整体拷贝到nfs文件夹下

cp -r mpp path/to/NFS

提示:path/to/NFS需要改成自己的nfs文件夹路径

(3)增加文件夹权限

sudo chmod 777 path/to/NFS -R
  • 在Hi3559板端执行

(4)加载驱动:
进入目录:

cd mpp/out/linux/multi-core/ko/

执行:

./load3559av100_multicore -i

提示:可以跟参数 -h 查看其他参数的用法
(5)准备并连接好HDMI显示器


编译:

  • 在linux服务器端执行
    在/mpp/sample/tde目录下执行make,生成可执行文件sample_tde。

运行:

  • 在Hi3559板端执行
    进入tde文件夹下cd mpp/sample/tde,执行./sample_tde 1
    参数0: vo VGA output, default
    参数1: vo HDMI output.

其他的sample执行也是类似的


问题与解决方案:

问题1:没有加载驱动
open sys: No such file or directory
open err
: No such file or directory
open err
: No such file or directory
[SAMPLE_COMM_SYS_Init]-347: HI_MPI_VB_SetConf failed!

解决方案:加载驱动

问题2:加载驱动报错
sys_config: loading out-of-tree module taints kernel.
sys_config: Unknown symbol cpu_hwcaps (err 0)
sys_config: Unknown symbol cpu_hwcaps (err 0)
insmod: can’t insert ‘sys_config.ko’: unknown symbol in module, or unknown parameter
hi_osal: Unknown symbol cpu_hwcaps (err 0)
hi_osal: Unknown symbol cpu_hwcaps (err 0)
insmod: can’t insert ‘hi_osal.ko’: unknown symbol in module, or unknown parameter
******* Error: There’s something wrong, please check! *****

驱动与内核不匹配
解决方案:尝试更换SDK包(麻烦且无聊的解决方案,若有其他方法求告知🙏)

sample_tde运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用51单片机实现Modbus RTU协议的RS485通信例程,仅供参考: ```c #include <reg52.h> // 定义波特率为9600的常量 #define BAUDRATE 9600 // 定义 Modbus RTU 协议常量 #define SLAVE_ADDRESS 0x01 #define FUNCTION_CODE 0x03 #define START_ADDRESS 0x0000 #define READ_LENGTH 0x01 // 定义接收和发送缓冲区 unsigned char rcv_buf[8]; unsigned char snd_buf[8]; // 定义接收和发送指针 unsigned char rcv_ptr = 0; unsigned char snd_ptr = 0; // 定义接收和发送标志位 bit rcv_flag = 0; bit snd_flag = 0; // 定义延时函数 void delay(unsigned int count) { unsigned int i; for(i=0; i<count; i++); } // 定义串口初始化函数 void init_uart() { // 设置波特率为 BAUDRATE SCON = 0x50; TMOD &= 0x0F; TMOD |= 0x20; TH1 = 256 - (11059200/12/32/BAUDRATE); TL1 = TH1; TR1 = 1; ES = 1; EA = 1; } // 定义发送函数 void send(unsigned char *buf, unsigned char len) { unsigned char i, crc_hi, crc_lo; crc_hi = 0xFF; crc_lo = 0xFF; for(i=0; i<len; i++) { crc_hi ^= buf[i]; for(j=0; j<8; j++) { if(crc_hi & 0x80) { crc_hi = (crc_hi << 1) ^ 0x07; } else { crc_hi <<= 1; } } } crc_lo = crc_hi ^ 0xFF; buf[len] = crc_lo; buf[len+1] = crc_hi; snd_ptr = 0; snd_flag = 1; SBUF = buf[snd_ptr++]; } // 定义接收函数 void receive() { unsigned char i, crc_hi, crc_lo, len; crc_hi = 0xFF; crc_lo = 0xFF; len = rcv_buf[2] + 3; for(i=0; i<len; i++) { crc_hi ^= rcv_buf[i]; for(j=0; j<8; j++) { if(crc_hi & 0x80) { crc_hi = (crc_hi << 1) ^ 0x07; } else { crc_hi <<= 1; } } } if(crc_hi == rcv_buf[len-1] && crc_lo == rcv_buf[len-2]) { // 校验通过,处理数据 if(rcv_buf[0] == SLAVE_ADDRESS && rcv_buf[1] == FUNCTION_CODE) { // 根据 START_ADDRESS 和 READ_LENGTH 处理数据 // 然后将处理结果写入 snd_buf 中 // 最后调用 send 函数发送数据 } } rcv_ptr = 0; rcv_flag = 0; } // 串口中断处理函数 void uart_isr() interrupt 4 { if(TI) { TI = 0; if(snd_flag && snd_ptr < 8) { SBUF = snd_buf[snd_ptr++]; } else { snd_flag = 0; } } if(RI) { RI = 0; rcv_buf[rcv_ptr++] = SBUF; if(rcv_ptr == 1) { // 处理地址位 if(rcv_buf[0] != SLAVE_ADDRESS) { rcv_ptr = 0; } } else if(rcv_ptr == 3) { // 处理功能码 if(rcv_buf[1] != FUNCTION_CODE) { rcv_ptr = 0; } } else if(rcv_ptr == rcv_buf[2] + 3) { // 处理数据位 rcv_flag = 1; } } } void main() { init_uart(); while(1) { if(rcv_flag) { receive(); } } } ``` 请注意,这只是一个简单的例程,实际应用中需要根据具体的硬件环境和功能需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值