From f4a8b00ea781dc5f1dfc49d006d3441d9ba166cd Mon Sep 17 00:00:00 2001 From: wusongqing Date: Fri, 15 Apr 2022 10:35:45 +0800 Subject: [PATCH] updated docs Signed-off-by: wusongqing --- zh-cn/device-dev/faqs/faqs-porting.md | 39 ++++ zh-cn/device-dev/faqs/faqs-startup.md | 57 +++++ .../faqs/faqs-system-applications.md | 211 ++++++++++++++++++ 3 files changed, 307 insertions(+) create mode 100644 zh-cn/device-dev/faqs/faqs-porting.md create mode 100644 zh-cn/device-dev/faqs/faqs-startup.md create mode 100644 zh-cn/device-dev/faqs/faqs-system-applications.md diff --git a/zh-cn/device-dev/faqs/faqs-porting.md b/zh-cn/device-dev/faqs/faqs-porting.md new file mode 100644 index 0000000000..b481e63e2f --- /dev/null +++ b/zh-cn/device-dev/faqs/faqs-porting.md @@ -0,0 +1,39 @@ +# 移植常见问题 + +- [如何将用户的堆内存挂载进内核](#section21471536184914) + +## 如何将用户的堆内存挂载进内核 + +- 内核堆内存配置的相关宏如下,用户可根据实际情况,在target\_config.h中配置: + +**表 1** 内核堆内存配置相关宏 + + + + + + + + + + + + + + + + +

宏名称

+

描述

+

LOSCFG_SYS_EXTERNAL_HEAP

+

这个宏决定系统是使用内核的内部堆内存还是用户的堆内存,默认为0(即使用内部的堆内存),大小为0x10000;如果用户需要基于外部的堆内存,那么可以将该宏设置为1。

+

LOSCFG_SYS_HEAP_ADDR

+

内核堆内存的起始地址。

+

LOSCFG_SYS_HEAP_SIZE

+

内核堆内存的大小,即LOSCFG_SYS_HEAP_ADDR指定的内存块大小。

+
+ +- 注意事项: + +指定的堆内存范围务必保证没有其他模块使用,避免踩内存,破坏堆内存功能。 + diff --git a/zh-cn/device-dev/faqs/faqs-startup.md b/zh-cn/device-dev/faqs/faqs-startup.md new file mode 100644 index 0000000000..5b4350b27f --- /dev/null +++ b/zh-cn/device-dev/faqs/faqs-startup.md @@ -0,0 +1,57 @@ +# 启动恢复常见问题 + +- [系统启动过程中打印“parse failed!”错误后停止启动](#section835662214302) +- [系统启动过程未结束就自动重启,如此反复持续](#section3857921143117) +- [参数正确的情况下调用SetParameter/GetParameter返回失败](#section548818116328) + +## 系统启动过程中打印“parse failed!”错误后停止启动 + +**现象描述** + +系统启动过程中,打印“\[Init\] InitReadCfg, parse failed! please check file /etc/init.cfg format.”错误,启动过程停止,如下图所示: + +**图 1** 运行报错图 +![](figures/运行报错图.png "运行报错图") + +**可能原因** + +修改init.cfg文件时,漏掉或多加了逗号或括号等,导致init.cfg文件的json格式被破坏。 + +**解决办法** + +仔细检查init.cfg文件,确保其格式符合json格式要求。 + +## 系统启动过程未结束就自动重启,如此反复持续 + +**现象描述** + +镜像烧写完成后系统启动,启动过程未完成即自动重新启动,如此反复持续。 + +**可能原因** + +被init启动的服务都有一个叫做“importance”的属性(详见[第2章表3](../subsystems/subsys-boot-init.md)描述)。 + +- 当该属性为0时,表示若当前服务进程退出,init不需要重启单板。 +- 当该属性为1时,表示若当前服务进程退出,init需要重启单板。 + +因此出现上述现象的可能原因:有“importance”属性为1的服务在每次启动的过程中都会退出(可能是进程崩溃或出错自动退出),导致init进程自动重启单板。 + +**解决办法** + +1. 需要通过日志确认崩溃或报错退出的服务,并解决其崩溃/报错的问题,然后重新烧写镜像即可。 +2. 也可以将崩溃/报错退出的服务的“importance”属性改为0,然后重新烧写镜像,这样即使其退出,init也不会重启单板。 + +## 参数正确的情况下调用SetParameter/GetParameter返回失败 + +**现象描述** + +在各参数正确的情况下调用SetParameter/GetParameter返回失败。 + +**可能原因** + +程序对SetParameter/GetParameter这两个接口做了权限校验,在各参数正确的情况下调用SetParameter/GetParameter返回操作失败,很有可能是调用者的uid大于1000,没有调用权限。 + +**解决办法** + +无需处理 + diff --git a/zh-cn/device-dev/faqs/faqs-system-applications.md b/zh-cn/device-dev/faqs/faqs-system-applications.md new file mode 100644 index 0000000000..b8f34e907f --- /dev/null +++ b/zh-cn/device-dev/faqs/faqs-system-applications.md @@ -0,0 +1,211 @@ +# 系统应用常见问题 + +- [公共基础库常见问题](#section639433461512) + - [1.LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储路径设置错误,导致KV存储运行失败](#section16520347131511) + +- [视觉应用常见问题](#section787718474161) + - [是否存在一个全局变量,所有的页面都可以访问?](#section187297991718) + - [如何获取dom中的元素](#section1833493719175) + - [如何在页面间传值?](#section184283812183) + - [list如何滚动到某个item?](#section11897734131811) + - [text支持多行吗?](#section5872656121814) + - [为什么控件不显示?](#section7397125317107) + - [如何实现页面滑动?](#section338794422010) + - [Left、Top为什么不生效?](#section2597193611217) + - [动态绑定为什么不生效?](#section6939050172115) + - [如何实现相对定位和绝对定位?](#section5547311192215) + - [如何控制控件的显示与隐藏?](#section16107113352213) + - [使用Margin时,有什么注意事项?](#section1524910142314) + - [使用事件订阅时,有什么注意事项?](#section1537132012231) + - [使用动态绑定时,有什么注意事项?](#section96561452236) + - [swiper loop属性如何生效?](#section690166112414) + - [使用数组时,有什么注意事项?](#section1554552822414) + +- [hdc类问题](#section412357182518) + - [hdc\_std连接不到设备](#section1965012223257) + - [hdc\_std运行不了](#section1157575212515) + + +## 公共基础库常见问题 + +### 1.LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储路径设置错误,导致KV存储运行失败 + +**现象描述** + +LiteOS-A内核\(Hi3516、Hi3518平台\)直接调用KV存储提供的接口,各参数正常的情况下,编译可执行程序运行失败。 + +**可能原因** + +直接运行编译出的可执行文件,没有将程序基于AbilityKit转换成应用,不能由BMS在应用安装时正确设置应用数据存储路径,导致KV存储运行失败。 + +**解决办法** + +显示调用KV存储的UtilsSetEnv接口,设置数据存储路径。 + +``` +UtilsSetEnv("/storage/com.example.kv"); +``` + +## 视觉应用常见问题 + +### 是否存在一个全局变量,所有的页面都可以访问? + +当前框架中不存在所有Page都可以访问的全局变量。 + +### 如何获取dom中的元素 + +如何获取dom中的元素? + +通过ref属性获取dom中的元素,详细示例如下图所示;获取的元素只能使用它的方法,不能改变属性。 + +``` + +
+ + +
+ +/* index.js */ +export default { + data: { + images:[ + {src:"common/frame1.png"}, + {src:"common/frame2.png"}, + {src:"common/frame3.png"} + ] + }, + handleClick(){ + //通过$refs属性获取对应的组件,在hml中,组件的ref属性要设置为animator + const animator = this.$refs.animator; + const state = animator.getState(); + if(state == "paused"){ + animator.resume(); + }else if(state == "stopped"){ + animator.start(); + }else{ + animator.pause(); + } + } +} +``` + +### 如何在页面间传值? + +通过router.replace方法中的params参数来传递,参考代码如下: + +第一个页面传递数据: + +``` +router.replace({ + uri:'pages/detail/detail', //要跳转的页面uri + params:{transferData:this.data} //传递的数据,数据个数和名称开发者自己定义, +}); +``` + +第二个界面接受数据: + +``` +onInit(){ + const data = this.transferData; //在onInit函数中接受传递的数据 +} +``` + +### list如何滚动到某个item? + +通过list的scrollTo方法滚动到指定的item,参数是目标item的index。Index参数可以通过scrollend事件获取或者开发者指定。 + +### text支持多行吗? + +text支持多行。通过回车键换行或者是不设置text的高度属性,由控件自动根据内容换行。 + +### 为什么控件不显示? + +**现象描述** + +开发者在hml文件中添加的控件无法显示 + +**可能原因** + +- 未设置width和height值; +- 样式设置错误。 + +**处理步骤** + +\(1\)检查是否设置width和height值,组件必须显式设置width和height值; + +\(2\)检查组件的样式设置是否正确。 + +### 如何实现页面滑动? + +实现页面滑动目前有三种方式:scroll(根组件大小超过屏幕的大小即自动实现scroll效果)、list、swiper。开发者可以参考开发文档查看三者的区别,并加以使用。 + +### Left、Top为什么不生效? + +除根节点外,Left、Top配合Stack组件使用才有效果。 + +### 动态绑定为什么不生效? + +在进行绑定时,必须先将要绑定的对象或者对象的属性进行定义,不能先绑定后定义 + +### 如何实现相对定位和绝对定位? + +使用div、stack(top left属性)来实现相对和绝对定位。 + +### 如何控制控件的显示与隐藏? + +通过display、show和if来控制控件的显示与隐藏。区别在于:if为false时,组件会从VDOM中移除,而show仅是渲染时不可见,组件依然存在于VDOM中。 + +### 使用Margin时,有什么注意事项? + +Stack组件不支持其子组件设置margin属性。 + +### 使用事件订阅时,有什么注意事项? + +在应用运行期间只存在一个page,所以router.replace跳转是先销毁前一个页面,然后在新创建一个界面。因此,如果涉及到事件订阅的页面,每次页面创建时要进行事件订阅,跳转离开界面前取消事件订阅。 + +### 使用动态绑定时,有什么注意事项? + +过多的动态绑定会消耗较多的内存,若非业务需要,尽量不要使用太多的动态绑定。 + +### swiper loop属性如何生效? + +去掉第一个组件或者去掉最后一个组件,剩余的长度大于swiper长度,loop生效。 + +### 使用数组时,有什么注意事项? + +数组元素不宜过多,尽量避免对大数组进行频繁操作。 + +## hdc类问题 + +### hdc\_std连接不到设备 + +- **现象描述** + + 执行 "hdc\_std list targets"命令后结果为:\[Empty\] + +- **解决方法** + 1. 设备没有被识别: + + 在设备管理器中查看是否有hdc设备,在通用串行总线设备中会有“HDC Device”信息。如果没有,hdc无法连接。此时需要插拔设备,或者烧写最新的镜像。 + + 2. hdc\_std工作异常: + + 可以执行"hdc kill"或者"hdc start -r"杀掉hdc服务或者重启hdc服务,然后再执行hdc list targets查看是否已经可以获取设备信息。 + + 3. hdc\_std与设备不匹配: + + 如果设备烧写的是最新镜像,hdc\_std也需要使用最新版本。由于hdc\_std会持续更新,请从开源仓developtools\_hdc\_standard中获取,具体位置在该开源仓的prebuilt目录。 + + + +### hdc\_std运行不了 + +- **现象描述** + + 点击hdc\_std.exe文件无法运行。 + +- **解决方法** + + hdc\_std.exe不需要安装,直接放到磁盘上就能使用,也可以添加到环境变量中。通过打开cmd执行hdc\_std命令直接使用。 + + -- GitLab