可以,两者因为频段相近,所以避免不了速率变慢,但是两者可以共存,可以使用蓝牙音箱播放WiFi音频
I_A_student 发布的帖子
-
回复: 关于R128芯片wifi sta与蓝牙是否可以同时共存(使用)
-
回复: 全志XR808芯片 如何设置AP模式默认IP地址、子网掩码、网关?
@i_a_student 在 全志XR808芯片 如何设置AP模式默认IP地址、子网掩码、网关? 中说:
@adsikl 就是在src/net/udhcp-0.9.8/dhcpd_cfg.h这里的,你修改后应该是有效的
鸿蒙系统的话用的事en2,试试改成en2试试?
-
回复: 全志XR808芯片 如何设置AP模式默认IP地址、子网掩码、网关?
@adsikl 就是在src/net/udhcp-0.9.8/dhcpd_cfg.h这里的,你修改后应该是有效的
-
回复: 运行hb build -f出错
@jimmy606 device\xradio\xr806\liteos_m\config.gni里面,编译工具的路径不正确,找不到编译工具的路径,请修改。
-
回复: 运行hb build -f出错
@jimmy606 你这个问题有点奇怪,应该是gn脚本写的不对,你可以按照提示,看看out/wifi_skylark/build.log的内容提示是哪里错误了
-
回复: 【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' -
回复: XR806 中app.bin bootloader的启动限制
@huangqinggan app.bin过大了,改一下device\xradio\xr806\xr_skylark\project\linker_script\gcc\appos.ld,把一部分代码放在xip。
-
回复: 【XR806开发板试用】在仓库失效后,重新拉了代码一直编译不成功
@robot 你是在哪个仓拉的代码?我看你编译的是master分支的,而且,还会编译fatfs的?
-
回复: XR806 WIFI MAC地址
@zhugx XR806的MAC地址默认是通过CHIPID决定的,重复概率很小,不需要用户设置。如果希望自行设置,也可以在修改prj_config.h中PRJCONF_MAC_ADDR_SOURCE的值,保存在flash里面,但这样子的话,MAC的算法就要自己写了。
-
回复: XR806开源鸿蒙开发板烧录freertos固件后烧掉
xr806默认的freertos是DCDC模式的,需要修改为LDO模式,而且重新编译bootloader才可以用的。在device/soc/allwinner/xradio/xr806/src/driver/chip/system_chip.c里面设置,打开USE_EXT_LDO这个宏:
-
回复: 【XR806开发板试用】系列之二 - I2C外设使用及控制OLED屏显示
@ljfly SSD1306有两个地址可选,看看选择是哪一个。另外可以用逻辑分析仪看看,是XR806端没有输出,还是说SSD1306没有应答。
-
回复: IIC通信问题异常,该怎么解决呢
@funfulzhao 首先这个问题的源码在device/xradio/xr806/xr_skylark/src/rom/rom_bin/src/driver/chip/hal_i2c.c,这个错误是指没有接收到应答.如果是初始化就出现了这个问题,有可能是因为没有上拉电阻,导致数据乱跳导致的.
-
回复: 求助,编译wifi模块时遇到问题
@xisecret 你这个错误是次要的,是提示build出错,但是build出错的具体原因没有贴出来,你可以把整个error.log上传上来看看。
-
回复: hello 没有如约出现 怎么办?
@hu_710774265 在 hello 没有如约出现 怎么办? 中说:
gcc cross compiler obj/device/xradio/xr806/adapter/hello_demo/src/libapp_hello.main.o
从编译日志来看,应该是成功编译了,而且hello_demo也编译进去了,检查一下镜像的生成时间,看看是不是下载了旧的img文件。
-
回复: hello 没有如约出现 怎么办?
@hu_710774265 1、检查一下BUILD.gn修改后是否保存。2、检查BUILD.gn是否把hello_demo的.c文件包含进编译,例如故意在main.c里面打错别字,也可以在map文件里面检查。
-
回复: XR806在线调试方法
7、连接成功后,打开指定可执行文件的文件夹
cd device/xradio/xr806/xr_skylark/demo/audio_demo/gcc gdb audio_demo.elf
注意linux默认使用linux64位的gdb,需要在环境变量中设置为arm的gdb。
8、进入gdb后,输入:target remote:3331即可连接开发板。至于gdb怎么调试,网上有足够资料,就不水贴了。
-
回复: XR806在线调试方法
2、由于PB2和PB3是在__wrap_main()中初始化成调试接口的,所以上电并不是调试口,意味着不要使用jlink控制XR806进入复位,不然大概率会跑飞。
3、由于没办法控制芯片复位,而我们调试程序一般都是从程序开始的,所以需要利用程序,使上电自动停止在代码main_task中,我使用的是开发板上的按键,代码如下所示,按下按键程序才能继续跑,使Jlink连接开发板,halt住芯片时,程序的位置是确定的,不然Jlink接入时,代码位置是随机的。static void main_task(void *arg) { /* 初始化按键 */ gpio_input_init(); /* 确定Jlink接入时的代码的位置 */ while(1) { uint8_t i = 0; if (HAL_GPIO_ReadPin(GPIO_INPUT_PORT, GPIO_INPUT_PIN) == 1) { printf ("no press\n"); i = 0; } else { printf ("press\n"); i ++; } if (i >= 5) { printf("test begin\n"); break; } LOS_Msleep(100); } platform_init(); OHOS_SystemInit(); OS_ThreadDelete(&g_main_thread); }
-
回复: XR806在线调试方法
1、XR806的在线调试SWD接口是PB2和PB3,分别对应DATA和CLK。很遗憾,官方版子并没有接出来,只能手动焊线。
2、使能在线调试。在文件device/xradio/xr806/xr_skylark/project/demo/audio_demo/prj_config.h中添加#define PRJCONF_SWD_EN 1
-
回复: 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实现了裁剪功能。
-
回复: 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)中定义好的。 -
回复: 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脚本的话会比较好理解。篇幅较长,在下个回复中说明。
-
回复: 【XR806鸿蒙开发实战1】实操下载XR806鸿蒙代码并编译烧写
@pingyang 806用的是gcc编译,不是clang,出现这种情况可能是hb set时选择的不是wifi_skylark。
-
使用XR806适配最新鸿蒙3.0_LTS
很荣幸提前拿到了XR806开发板,但是全志只是适配了1.1.2L.TS,而最新的Harmony已经到3.0_LTS了,决定尝试是适配最新的3.0_LES,折腾了大半天,起码还是适配好了
首先是vendor文件夹,鸿蒙3.0修改了很多文件夹名称和文件路径,需要在config.json中把该修改的都修改了。(security去掉好像对编译没什么影响,添加了还会报错,暂时不知道怎么搞的,先删除)
hals文件夹的内容也报错,我直接把海思的hals文件夹复制进来了接下来编译hiview时提示有几个C库没找到,添加了C库还是报错,认真看才发现鸿蒙自身就屏蔽了C库,原因也不知道是为啥,总之先屏蔽掉下面两个编译选项
编译依旧报错。。。提示asmflags重复了,这个全志本身的代码中定义了一个asmflags在旧系统中没有报错,但是新的系统估计是鸿蒙官方补上了漏洞,果断把全志的代码给删了。
之后依旧是愉快的报错bad instruction
错误说的是汇编没办法识别typedef(废话啊,汇编还能识别typedef不上天),明显是编译汇编时,也包含了.h,导致出错,只能把系统源码再改一改
然后把刚刚删掉的asmflags改回来,等于全志的代码先别动。
编译依旧报错,但接下来的报错都是因为鸿蒙系统代码引起的修改,只放图了
。。。。。。。。。。。。。。。。。总算全部编译通过后,ld链接时又报错,提示没有定义snprintf_s,这个库函数确实在部分C库中没有,然后我在鸿蒙的utils/native/base/src文件夹里面找到了原型,正如里面的字面描述,这个文件夹就是个增强型的C库,而从第一个问题报出来我就知道全志用的是gcc的标准C库,改掉SDK的c库我可没那么大能耐,就偷懒把utils/native/base/src里面的snprintf_s复制下来,单独弄成一个静态库了,之后总算编译通过了,对比1.1.2,flash大了5k。。。
修改点实在太多了,上面的可能也有不少遗漏,还是等全志赶紧放出3.0的SDK吧。