在线时间102 小时
UID3338547
注册时间2017-1-28
NXP金币49
TA的每日心情 | 无聊 2021-12-29 19:06 |
---|
签到天数: 47 天 [LV.5]常住居民I
金牌会员
- 积分
- 1371
- 最后登录
- 2024-3-21
|
本帖最后由 day_day 于 2023-3-21 00:05 编辑
基础rt-thread源码获取
配置
- RTT的vscode扩展与eide的扩展有些类似的地方,因为都是需要GCC交叉编译链和cortex-debug插件支持;但他们是完全不同的两个体系。
- 配置编译工具
- "RTT_Studio.Toolchain_Location": "/usr/local/mcuxpressoide-11.7.0_9198/ide/tools/bin",
- "RTT_Studio.Debuger.Gdb_Path": "/usr/local/mcuxpressoide-11.7.0_9198/ide/tools/bin/arm-none-eabi-gdb"
复制代码
- 配置RTT源码路径
- "RTT_Studio.RTT_ROOT": "/home/xxx/rt-thread",
复制代码
- 修改"SConstruct"编译脚本里关于板件库地址的 SDK_ROOT
- SDK_ROOT = "/home/xxx/rt-thread/bsp/lpc55sxx/"
复制代码
- 点击编译
烧录
- RTT扩展有烧录按钮,但只支持jlink和stlink,或者进行qemu仿真,因此还是需要走 pyocd+命令行支持
- pyocd flash --erase chip --target lpc55s69 rtthread.elf
复制代码
调试
- RTT扩展有烧录按钮,但只支持jlink和stlink,或者进行qemu仿真,因此还是需要走cortex-debug+pyocd+命令行支持
- 在命令行中使用 pyocd gdbserver 功能,启动类似 openocd 和 gdbserver 的服务端。
- pyocd gdbserver --target lpc55s69 -p 3336 -T 4446 -R 5556
复制代码
- vscode 的 launch.json 文件配置如下:
- {
- "name": "pyocd-remote",
- "cwd": "${workspaceRoot}",
- "type": "cortex-debug",
- "request": "attach",
- "servertype": "external",
- "gdbTarget": "localhost:3336",
- "device": "lpc55s69",
- "executable": "build/Debug/lpc55_fourth.elf",
- "runToEntryPoint": "main",
- "targetId": "lpc55s69"
- },
复制代码
- 点击F5即可仿真
- 如果想仿真之前先下载,可以配置为:
但不是每一种仿真器都可以支持,我手头的ulink me和stlink多多少少都会有点问题,需要命令行敲 pyocd flash 命令才能正常下载,但dap link都是支持直接launch的。
测试
- 测试结果并不顺利,hardfault卡在串口的初始化上:
- rt_hw_board_init
- rt_hw_uart_init INIT_BOARD_EXPORT(rt_hw_uart_init);
- rt_hw_serial_register
- rt_device_register
- rt_device_find
- RT_DEBUG_NOT_IN_INTERRUPT 死在这里
复制代码
- 为了确认不是开发环境的问题,我翻箱倒柜找出了友商经典的32板子,把正点原子的atk-nano的rt-thread bsp编译了一次下载测试。虽然中途出现0x1ffff3b6之类无法运行的问题,但改了下boot跳线帽之后就正常进入。
- 仔细检查了一下出问题的函数,发现友商板子运行不会进下面的rk_kprintf。
- 然后发现 level = rt_hw_interrupt_disable(); 返回的不是0
- 然后又发现 rt_interrupt_nest 初始化的时候就已经是250
- 尝试通过串口强行置0,但后面出现了更多HardFault。
|
|