使用FS_Hi3861鸿蒙开发板编译时常见的一些问题

news2024/11/24 23:12:05

本文档支持的是下面的产品

  • 华清远见 FS-Hi3861https://gitee.com/HiSpark/hi3861_hdu_iot_application/blob/master/src/vendor/hqyj/fs_hi3861/doc/%E5%8D%8E%E6%B8%85%E8%BF%9C%E8%A7%81%20FS_Hi3861%E5%BC%80%E5%8F%91%E6%8C%87%E5%AF%BC.md

目录

在添加第三方库完成后,再次编译报错,提示“undefined reference to ******”

编译的时候,提示BUILD.gn文件错误。

编译的时候,提示“undefined reference to ‘hi_i2c_init’”

编译好之后烧写工具又检测不到板子

编译开发板程序时提示“/bin/sh: riscv32-unknown-elf-gcc : 未找到命令”

开发板上蜂鸣器一上电就开始响

提示缺少“hal_bsp_log.h”等类似的头文件


在添加第三方库完成后,再次编译报错,提示“undefined reference to ******”

现象描述

比如是移植了MQTT的库文件,然后再次编译工程的时候,会发现下面的问题:

可能原因

可能是移植完成之后,需要修改“device/hisilicon/hispark_pegasus/sdk_liteos/BUILD.gn”文件。

解决办法

移植完成之后,需要打开“device/hisilicon/hispark_pegasus/sdk_liteos/BUILD.gn”文件,在下图部分添加"//third_party/pahomqtt:pahomqtt_static",第三方库添加完成了,接下来就可以进行使用了。 

编译的时候,提示BUILD.gn文件错误。

现象描述

会有以下提示,说在某某路径下的BUILD.gn文件有错误。

可能原因

BUILD.gn文件内容可能不正确,需要检查一下两个BUILD.gn文件。

解决办法

以下面的例子为例,其他的类似。
这时需要仔细检查一下“//applications/sample/wifi-iot/app/”目录下的BUILD.gn文件,目录和对应的目标文件是否正确。

 再检查一下“base_01_key”目录下的BUILD.gn文件:

主要检查几个地方:
1.  Sources 源文件的路径是否正确;
2.  Include_dirs 头文件的路径是否正确;
3.  检查一下JSON的语法是否正确,是否少了“,”逗号;
4.  是否用#号注释或者取消注释相应的内容

编译的时候,提示“undefined reference to ‘hi_i2c_init’”

现象描述

在工程中使用到了I2C的相关接口,然后开始编译时出现下面的问题:

可能原因

可能是sdk_liteos源码中的usr_config.mk文件中没有把CONFIG_I2C_SUPPORT打开。

解决办法

打开“//device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk”文件,在此文件中,将“CONFIG_I2C_SUPPORT”取消注释,并加上“=y”。

注意:比如今后可能还会用到SPI、PWM、DMA等,都需要在这个文件中进行修改。

编译好之后烧写工具又检测不到板子

现象描述

在下载程序的时候,发现有的时候连接不上开发板。

解决办法:

1.  检查是否安装CH340的串口驱动;
2.  检查开发板是否上电;
3.  检查USB转Type-C线是否支持数据传输功能;
4.  以上检查好了之后,点击Refresh按钮,进行刷新,找到串口的端口号;
5.  接好开发板之后,上电
6.  检查是否有串口端口号
7.  有端口号之后,配置烧写工具的串口波特率
8.  加载要烧写的bin文件,
9.  然后点击**connect**按钮
10.  再按下开发板上的复位按键
11.  这时看烧写工具的进度条
12.  直到提示烧写完成,然后点击**disconnect**按钮
13. 然后按下开发板中的复位按键,查看现象。

编译开发板程序时提示“/bin/sh: riscv32-unknown-elf-gcc : 未找到命令”

现象描述

在首次编译程序的时候,在终端中,提示“*****:未找到命令”。

可能原因 

在终端里面输入“ricv32-unknown-elf-gcc -v”命令,看看是否有正确的版本号,如果没有的话,大概应该是没有配置好环境。

解决办法

1.  在终端中输入“gedit ~/.bashrc”。
2.  在最后一行添加 riscv32-unknown-elf-gcc 工具的bin文件路径;

3.  修改完成之后,点击保存,然后在终端中输入命令 source ~/.bashrc 
4.  在终端里面输入 riscv32-unknown-elf-gcc -v 命令,看看是否有正确的版本号;
5.  如果有,说明可以解决这个问题。

开发板上蜂鸣器一上电就开始响

可能原因

这是因为开发板上电的时候,蜂鸣器引脚默认为低电平,所以蜂鸣器会响,如下原理图所示(开发板的版本号:FS_Hi3861DB_V3.2):

解决办法

打开【//device/hisilicon/hispark_pegasus/sdk_liteos/app/wifiiot_app/src/app_main.c】文件,修改app_main.c文件,在294行的#endif后面添加:

提示缺少“hal_bsp_log.h”等类似的头文件

可能原因

没有将硬件驱动源码复制到对应的目录。

解决方法

在光盘资料中找到如下文件夹:

将该文件夹内的文件复制到对应的编译目录中:

同时保证要编译的程序下面的BUILD.gn文件中包含此地址:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/616734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想要精通算法和SQL的成长之路 - 下一个排列

想要精通算法和SQL的成长之路 - 下一个排列 前言一. 下一个排列二. 下一个更大元素III 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 下一个排列 原题链接 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下…

Wi-Fi 6还没用熟,Wi-Fi 7就要来了,性能“高攀不起”!

Wi-Fi作为一种无线通信技术,在现代生活中扮演着重要的角色。随着无线设备数量的不断增加和对高速、高容量网络的需求日益增长,Wi-Fi技术不断发展演进。在过去的几十年中,我们见证了多个Wi-Fi技术标准的推出,其中最新的一代是Wi-Fi…

Spring Boot集成Redisson布隆过滤器案例

1 什么是布隆过滤器 布隆过滤器实际上是一个非常长的二进制向量(bitmap)和一系列随机哈希函数。那什么又叫哈希函数呢?哈希函数指将哈希表中元素的关键键值通过一定的函数关系映射为元素存储位置的函数。(HashMap源码) 布隆过滤器的优点&…

python基于轻量级CNN模型开发构建手写藏文数字识别系统

最近做的很多工作都是跟手写性质的数据集有关的,比如:手写汉字、手写甲骨文、手写数字、手写字母等等,今天主要做的实践是对藏文中的手写数字进行识别分析,在我之前的博文中有很多相关的实践分析,感兴趣的话可以自行移…

图解Redis中的9种数据结构

如图所示,Redis中提供了9种不同的数据操作类型,他们分别代表了不同的数据存储结构。 图2-17 数据类型 String类型 String类型是Redis用的较多的一个基本类型,也是最简单的一种类型,它和我们在Java中使用的字符类型什么太大区别&…

MyBatis 万字进阶

文章目录 一. 增, 删, 改 操作1.1 修改操作1.2 删除操作1.3 添加操作1.3.1 返回受影响行数1.3.2 返回 id 二. 查询操作2.1 单表查询2.1.1 参数占位符 ${} 和 #{}2.1.2 SQL 注入问题2.1.3 ${} 的优点2.1.4 Like 查询 2.2 多表查询2.2.1 返回类型 resultType2.2.2 返回字典映射 r…

Linux内核进程创建流程

本文代码基于Linux5.10 内容主要参考《Linux内核深度解析》余华兵 当Linux内核要创建一个新进程时, 流程大致如下 ret fork(); if (ret 0) {/* 子进程装载程序 */ret execve(filename, argv, envp); } else if (ret > 0) {/* 父进程 */ } 大致可以分为创建新…

pagehelper分页插件(SpringBoot,Mybatis整合前后端分析)

前言:在学习项目的过程中遇到了数据分页的功能,单纯的js前端不能处理大的数据量,需要后端整理好数据发送给前端,那么使用分页插件无疑是个好选择. 目录 pagehelper依赖 接口方法mapper Mybatis Service ServiceImpl PageResu…

[IJCAI 2022] 基于个性化掩码的实用安全联合推荐

Practical and Secure Federated Recommendation with Personalized Mask | SpringerLink 摘要 联合推荐解决了推荐系统的数据筒仓和隐私问题。目前的联合推荐系统主要利用密码学或混淆方法来保护原始评分不被泄露。然而,前者带来了额外的通信和计算成本&#xff0…

day 49 :121. 买卖股票的最佳时机;122. 买卖股票的最佳时机 II;123. 买卖股票的最佳时机 III

买卖股票 121. 买卖股票的最佳时机:一次买入卖出1. 贪心算法2. 动态规划1. dp数组以及下标名义2. 递归公式3. dp数组如何初始化4. 代码 122. 买卖股票的最佳时机 II:可以多次买入卖出2. 动态规划1. dp数组以及下标名义2. 递归公式3. dp数组如何初始化4. 代码 123. 买…

Linux_进程

目录 一.进程概念与子进程 1.进程基本概念 2.通过系统调用创建子进程-fork 二.进程状态 1、一般进程状态 2、Linux操作系统的进程状态 三.环境变量 1.概念 2.环境变量组织与获取 3.配置文件 4.环境变量的全局属性​编辑 5.命令行参数 四.进程优先级 1.查看系统进…

Linux文件系统-磁盘划分

一、磁盘使用 windows系统中: 1、分区 2、格式化 3、自动装载 4、使用 Linux系统中:1、分区 2、格式化 3、手动挂载 (挂载到/etc/fstab实现开机自启) 4、使用 Linux系统中磁盘使用: 1、分区操作…

rust:cargo 和rustc 以及一点 小技巧

在正式学习 Rust 语言以前,我们需要先学会怎样输出一段文字到命令行,这几乎是学习每一门语言之前必备的技能,因为输出到命令行几乎是语言学习阶段程序表达结果的唯一方式。 在之前的 Hello, World 程序中大概已经告诉了大家输出字符串的方式…

system V共享内存

一、前言 共享内存是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递将不再涉及到内核,换句话说,进程将不再通过执行进入系统内核的系统调用来传递彼此的数据。 但其实比它好用的进程间通信还有很多种&…

Android HTTP请求方式:HttpClient

1.HttpClient使用流程 基本流程: 2.HttpClient使用示例 1)使用HttpClient发送GET请求 直接贴下简单的发送Get请求的代码: public class MainActivity extends Activity implements OnClickListener { private Button btnGet; private WebV…

什么是OSPF被动接口?如何配置?华为、思科、瞻博网络三厂商命令来了

OSPF(开放最短路径优先)是一种常用的动态路由协议,用于在大型网络中实现路由选择。在OSPF中,被动接口是一种特殊类型的接口,它被用来监测网络中的邻居关系,并接收来自邻居发送的Hello消息。被动接口不主动发…

华为OD机试之在字符串中找出连续最长的数字串(含“+-”号)(Java源码)

在字符串中找出连续最长的数字串(含“”号) 输入描述 请在一个字符串中找出连续最长的数字串,并返回这个数字串。 如果存在长度相同的连续数字串,返回最后一个。 如果没有符合条件的字符串,返回空字符串””。 注意: 数字串可以由…

Ansible进阶2——角色管理

文章目录 一、角色1.1 获取角色方式1.2 角色结构1.3 定义变量和默认变量1.4 使用方法1.5 控制playbook中的任务执行流程 二、红帽企业Linux系统角色2.1 常见系统角色2.2 使用系统时间同步角色 三、自定义角色3.1 创建角色目录结构3.2 编写角色内容3.3 编写总结 四、ansible gal…

【C++】内存管理的基本操作,new与delete的实现原理以及operator new与operator delete函数

文章目录 前言一、new,delete操作内置类型二、new/delete操纵自定义类型3. operator new与operator delete函数4. new/delete实现原理4.malloc/free和new/delete的区别 前言 程序中内存的划分: 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向…

高考必胜,归来仍是少年!

高考必胜,归来仍是少年! 这是小索奇专门为高考生写的文章高考生 我以前给大家弄过一些免费的付费资料,现在看到后台很多伙伴们都在寻找资料,一些没有充分准备的小伙伴此刻一定很匆忙吧! 我想对大家说: 高…