Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页
    1. Home
    2. I_A_student
    I
    • Profile
    • Following 0
    • Followers 1
    • my integral 649
    • Topics 2
    • Posts 34
    • Best 6
    • Groups 0

    I_A_studentLV 4

    @I_A_student

    649
    integral
    7
    Reputation
    15
    Profile views
    34
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    I_A_student Unfollow Follow

    Best posts made by I_A_student

    • 使用XR806适配最新鸿蒙3.0_LTS

      很荣幸提前拿到了XR806开发板,但是全志只是适配了1.1.2L.TS,而最新的Harmony已经到3.0_LTS了,决定尝试是适配最新的3.0_LES,折腾了大半天,起码还是适配好了
      首先是vendor文件夹,鸿蒙3.0修改了很多文件夹名称和文件路径,需要在config.json中把该修改的都修改了。(security去掉好像对编译没什么影响,添加了还会报错,暂时不知道怎么搞的,先删除)
      fb6d35f7-4f9c-4864-bd02-8cba9ede6668-图片.png
      hals文件夹的内容也报错,我直接把海思的hals文件夹复制进来了

      接下来编译hiview时提示有几个C库没找到,添加了C库还是报错,认真看才发现鸿蒙自身就屏蔽了C库,原因也不知道是为啥,总之先屏蔽掉下面两个编译选项
      dfed363f-05bc-4cf7-ae92-23e70ef4d441-图片.png

      编译依旧报错。。。提示asmflags重复了,这个全志本身的代码中定义了一个asmflags在旧系统中没有报错,但是新的系统估计是鸿蒙官方补上了漏洞,果断把全志的代码给删了。
      之后依旧是愉快的报错bad instruction
      14a24dbb-83d2-4374-a8e4-44c2606b5cd8-图片.png
      错误说的是汇编没办法识别typedef(废话啊,汇编还能识别typedef不上天),明显是编译汇编时,也包含了.h,导致出错,只能把系统源码再改一改
      c6406d8a-ef93-4bae-b9b3-dc895926d158-图片.png 然后把刚刚删掉的asmflags改回来,等于全志的代码先别动。
      编译依旧报错,但接下来的报错都是因为鸿蒙系统代码引起的修改,只放图了
      c3db3b7a-c16b-4fa8-8a38-972a662fe528-图片.png
      96bf474f-e139-45db-8d9c-d67abfee9a0b-图片.png
      7f0ca2cc-4d9b-4a52-b91e-bba027bc5a06-图片.png

      。。。。。。。。。。。。。。。。。总算全部编译通过后,ld链接时又报错,提示没有定义snprintf_s,这个库函数确实在部分C库中没有,然后我在鸿蒙的utils/native/base/src文件夹里面找到了原型,正如里面的字面描述,这个文件夹就是个增强型的C库,而从第一个问题报出来我就知道全志用的是gcc的标准C库,改掉SDK的c库我可没那么大能耐,就偷懒把utils/native/base/src里面的snprintf_s复制下来,单独弄成一个静态库了,之后总算编译通过了,对比1.1.2,flash大了5k。。。
      3120b13a-44c5-43f6-923c-5127fb255a2e-图片.png

      修改点实在太多了,上面的可能也有不少遗漏,还是等全志赶紧放出3.0的SDK吧。

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: 【XR806鸿蒙开发实战1】实操下载XR806鸿蒙代码并编译烧写

      @pingyang 806用的是gcc编译,不是clang,出现这种情况可能是hb set时选择的不是wifi_skylark。

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: X806在鸿蒙OS下的启动过程

      @zhugx
      接下来的疑问是怎么把代码放在__ zinitcall_run_start和__zinitcall_run_end这两个地址的中间,用到的函数其实就是SYS_RUN(),其实这个也不是函数,只是一个宏。一层层展开如下:
      #define SYS_RUN(func) LAYER_INITCALL_DEF(func, run, "run")

      #define LAYER_INITCALL_DEF(func, layer, clayer)
      LAYER_INITCALL(func, layer, clayer, 2)

      #define LAYER_INITCALL(func, layer, clayer, priority)
      static const InitCall USED_ATTR _zinitcall##layer##_##func
      ​ attribute((section(".zinitcall." clayer #priority ".init"))) = func

      其实SYS_RUN()就是把括号内的字符拼接成一个地址,然后存放在zinitcall.run2.init这个位置。
      例如SYS_RUN(LEDMain),意思就是设定一个函数地址为__ zinitcall _ run _ LEDMain,然后位段位于zinitcall.run2.init。

      ld文件里面有一段的代码:
      __zinitcall_run_start = .;
      KEEP ((.zinitcall.run0.init))
      KEEP (
      (.zinitcall.run1.init))
      KEEP ((.zinitcall.run2.init))
      KEEP (
      (.zinitcall.run3.init))
      KEEP (*(.zinitcall.run4.init))
      __zinitcall_run_end = .;
      可以看到Harmony把任务启动的优先级分为5个等级,SYS_RUN默认是等级2,如果任务有启动优先级,那么久可以用SYS_RUN_PRI(func, priority)调整初始化顺序。

      对于做产品时如果有外设需要初始化的,就可以使用SYS_BSP。通过这种机制,Harmony实现了裁剪功能。

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: X806在鸿蒙OS下的启动过程

      @zhugx
      OHOS_SystemInit()的第一行代码是MODULE_INIT(bsp);,bsp在806中没有用到,806_OpenHarmony主要用了MODULE_INIT(run)。
      MODULE_INIT(name)是个宏,本体是MODULE_CALL(name, 0);
      MODULE_CALL(name, 0)也是一个宏,本体是
      #define MODULE_CALL(name, step)
      do {
      ​ InitCall *initcall = (InitCall *)(MODULE_BEGIN(name, step)); //这是个宏
      ​ InitCall *initend = (InitCall *)(MODULE_END(name, step)); //这也是个宏
      ​ for (; initcall < initend; initcall++) {
      ​ (*initcall)();
      ​ }
      } while (0)
      上面的for循环很好理解,就是从 initcall运行到initend,也就是从MODULE_BEGIN运行到MODULE_END。他们的宏展开后如下:
      #define MODULE_BEGIN(name, step)
      ({ extern InitCall _zinitcall##name##_start;
      ​ InitCall *initCall = &_zinitcall##name##_start;
      ​ (initCall);
      })

      #define MODULE_END(name, step)
      ({ extern InitCall _zinitcall##name##_end;
      ​ InitCall *initCall = &_zinitcall##name##_end;
      ​ (initCall);
      })
      前面说了这是用run替换掉name,就变成了
      InitCall *initCall = &__zinitcall_run_start;
      InitCall *initCall = &__zinitcall_run_end;
      这两个符号都在ld链接脚本(device/xradio/xr806/xr_skylark/project/linker_script/gcc/appos.ld)中定义好的。

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: X806在鸿蒙OS下的启动过程

      @zhugx
      相关文章还没找到,但大致流程如下:
      1、首先是芯片启动,芯片启动后内部会有一段引导程序,最终引导到main函数,也就是device/xradio/xr806/xr_skylark/project/common/startup/gcc/retarget.c这个文件下的
      int __wrap_main(void)->void main_task_start(void)->static void main_task(void *arg)。

      2、liteOS的启动代码在kernel/liteos_m/kernel/arch/arm/cortex-m33/gcc/los_dispatch.S,是使用汇编写的,大致流程和其他RTOS差不多,先是吧堆栈指针从MSP切换到PSP,然后把空闲任务的地址给到PC,然后跳转PC,就启动了liteos。

      3、接下来是Harmony的启动。Harmony的启动是调用void OHOS_SystemInit(void)这个函数,位置是在base/startup/bootstrap_lite/services/source/system_init.c。要详细理解Harmony的启动需要花点时间看看源码。如果熟悉LD脚本的话会比较好理解。篇幅较长,在下个回复中说明。

      posted in XR系列-无线互联
      I
      I_A_student
    • XR806在线调试方法

      XR806当前还没正式发布如何使用jlink调试,我先占个楼,后面慢慢补充如何使用。
      d234dd90-6725-4fc9-bbff-d8d943176640-7f0e6e1f9f56a8bf89548c071f4c9ac.png
      24f6cae8-61ae-4867-a44f-54bac94b28f6-image.png

      posted in XR系列-无线互联
      I
      I_A_student

    Latest posts made by I_A_student

    • Reply: 全志XR808芯片 如何设置AP模式默认IP地址、子网掩码、网关?

      @i_a_student 在 全志XR808芯片 如何设置AP模式默认IP地址、子网掩码、网关? 中说:

      @adsikl 就是在src/net/udhcp-0.9.8/dhcpd_cfg.h这里的,你修改后应该是有效的

      鸿蒙系统的话用的事en2,试试改成en2试试?

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: 全志XR808芯片 如何设置AP模式默认IP地址、子网掩码、网关?

      @adsikl 就是在src/net/udhcp-0.9.8/dhcpd_cfg.h这里的,你修改后应该是有效的

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: XR806鸿蒙系统的OTA例程在哪里?没找到

      @q62865555 鸿蒙的没有OTA例程,只能下载freertos版本的才有OTA例程

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: 运行hb build -f出错

      @jimmy606 a3f8982e-2d8d-4880-88c0-3f0931c5eeab-图片.png

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: 运行hb build -f出错

      @jimmy606 device\xradio\xr806\liteos_m\config.gni里面,编译工具的路径不正确,找不到编译工具的路径,请修改。

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: 运行hb build -f出错

      @jimmy606 你这个问题有点奇怪,应该是gn脚本写的不对,你可以按照提示,看看out/wifi_skylark/build.log的内容提示是哪里错误了

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: 【XR806开发板试用】在仓库失效后,重新拉了代码一直编译不成功

      @robot 在 【XR806开发板试用】在仓库失效后,重新拉了代码一直编译不成功 中说:

      repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify

      用这三条命令试试
      repo init -u https://gitee.com/awol/open-harmony_-xr806_manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify -m devboard_xr806.xml
      repo sync -c
      repo forall -c 'git lfs pull'

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: xr806 spi驱动出现问题

      @aktoey 试了一下,没啥问题,破案了,一定是你敲代码的姿势不对。

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: XR806 中app.bin bootloader的启动限制

      @huangqinggan app.bin过大了,改一下device\xradio\xr806\xr_skylark\project\linker_script\gcc\appos.ld,把一部分代码放在xip。

      posted in XR系列-无线互联
      I
      I_A_student
    • Reply: 【XR806开发板试用】在仓库失效后,重新拉了代码一直编译不成功

      @robot 你是在哪个仓拉的代码?我看你编译的是master分支的,而且,还会编译fatfs的?

      posted in XR系列-无线互联
      I
      I_A_student