XR806开发板,只能使用编写代码,然后通过UART下载,没法在线debug, 效率会差很多,官方没有提供这一方面的资料。
先查CPU, 官方介绍是arm-china的MC1,通过armv8 Architecture refenence manual资料,读取CPUID。
在MainThread()中读取CPUID,增加如下代码:
static void MainThread(void *arg)
{
while (1) {printf("hello world!\n");
printf("0xE000ED00 = 0x%x\n", (volatile uint32\_t )0xE000ED00);
LOS_Msleep(1000);
}
}
编译,下载,然后可以看到如下输出:
Wifi Test Start
hiview init success.
console init success
hello world!
0xE000ED00 = 0x630f1321
根据CPUID(base address 0xE000ED00),因此可以看出 是ARMchina的 v8m-arch的star系列核。
根据XR806公开的原理图和XR806\_PIN\_MUX.pdf,可以看到PB02和PB03是可以配成SWD\_TMS, SWD\_TCK功能,因此在我们把pinmux配成SWD功能,
但这里存在一定的风险, 因为一旦配成SWD功能,PB02 也是串口功能,串口将不能下载, 我在执行swd——config前增加delay 30s后才配置pinmux功能,防止成板砖,参考代码如下:
static void swd\_config(void)
{
GPIO_InitParam param;
param.driving = GPIO_DRIVING_LEVEL_1;
param.mode = GPIOB_P2_F9_SWD_TMS;
param.pull = GPIO_PULL_NONE;
HAL_GPIO_Init(GPIO_PORT_B, 2, ¶m); //PB2
param.mode = GPIOB_P3_F9_SWD_TCK;
HAL_GPIO_Init(GPIO_PORT_B, 3, ¶m); //PB3
}
static void MainThread(void *arg)
{
while (1) {
printf("hello world!\n");
printf("0xE000ED00 = 0x%x\n", *(volatile uint32_t *)0xE000ED00);
LOS_Msleep(30000);
swd_config();
}
}
编译下载, 连接Jlink如下图:
然后打开Jlink GDB server:如下图
其中Target device 选择star, Target interface选择SWD,然后OK确认。
进入如下界面: 说明等待连接
然后开始debug: /OpenHarmony# arm-none-eabi-gdb device/xradio/xr806/xr\_skylark/project/demo/wlan\_ble\_demo/gcc/wlan\_ble\_demo.elf
(gdb) target remote localhost:2331
Remote debugging using localhost:2331
0xdeadbeee in ?? ()
目前还不能使用Jlinkdebug, 通过串口终端的输出可以看出,还在一直打印log输出,说明SWD的功能还是没有配置正确。
Wifi Test Start
hiview init success.
console init success
hello world!
0xE000ED00 = 0x630f1321
hello world!
0xE000ED00 = 0x630f1321
hello world!
0xE000ED00 = 0x630f1321
hello world!
0xE000ED00 = 0x630f1321
hello world!
0xE000ED00 = 0x630f1321
hello world!
0xE000ED00 = 0x630f1321
hello world!
0xE000ED00 = 0x630f1321
如一切正常后,gdb server 如下所示,如果提示 Cannot read register xxx while CPU is running 说明还不正取