FreeRTOS 中 RISC-V-Qemu-virt_GCC 的 启动流程

以 FreeRTOSv202107.00  为例

编译, 生成log ,看 编译 了 20个文件, 然后link
  • RISC-V-Qemu-virt_GCC 工程相关C文件
    在这里插入图片描述

  • RISC-V-Qemu-virt_GCC 工程 所有 文件
    在这里插入图片描述

  • boot 调试平台搭建

1. make DEBUG=1
2. qemu-system-riscv32 -nographic -machine virt -net none \
        -chardev stdio,id=con,mux=on -serial chardev:con \
        -mon chardev=con,mode=readline -bios none \
        -smp 1 -kernel ./build/RTOSDemo.axf  -S -s
3. riscv64-unknown-elf-gdb -tui build/RTOSDemo.axf
   target remote localhost:1234

我现在用的编译器 是 ~/x-tools/riscv64-unknown-elf/bin/riscv64-unknown-elf-gcc , https://blog.csdn.net/u011011827/article/details/120086961 文章中 编译的 工具链

无法 debug 汇编,通过以下命令,在 gdb 中没有找到 start.S
(gdb) set logging file log_xxxxxxx
(gdb) set logging on
(gdb) info sources
(gdb) set logging off

看来是不支持 汇编 的 
看来是无法通过 gdb 看出来了

但是是可以 调试 .c 文件的

后来发现, 哈哈哈, 是 编译汇编的 时候 没有 加 -g , 加上就可以了

在这里插入图片描述

  • RISC-V-Qemu-virt_GCC 的启动流程
boot 调试平台搭建 搭建好后, 可以直接用 这个平台 调试

b _start 然后单步

FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/start.S
	_start:
	jal main
FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/main.c
	main
		vSendString( "Hello FreeRTOS!" );
		xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( uint32_t ) );
		xTaskCreate( prvQueueReceiveTask, "Rx", configMINIMAL_STACK_SIZE * 2U, NULL, mainQUEUE_RECEIVE_TASK_PRIORITY, NULL );
		xTaskCreate( prvQueueSendTask, "Tx", configMINIMAL_STACK_SIZE * 2U, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL );
		vTaskStartScheduler();

  • FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/start.S 做了什么
1. 设置 gp
2. 处理多核的问题,让其他的核心跑 secondary
3. 设置 sp
4. 设置 _data_lma // 将 _data_lma 中的 32(_edata-_data)个 字节 搬移到  _data
5.0 bss 段 : _bss - > _ebss
6. 跳转到main

---
// _data_lma 中的内容
(gdb) x/8xw 0x800029f0
0x800029f0:     0x00000006      0x00000000      0x80080100      0x00000000
0x80002a00:     0x0000ea60      0x00000000      0x80093f40      0x00000000
// 填充后的 _data的内容
// 即 uxTopUsedPriority 一开始为 0 ,运行时被填充
(gdb) x/8xw 0x80080000
0x80080000 <uxTopUsedPriority>: 0x00000006      0x00000000      0x80080100      0x00000000
0x80080010 <uxTimerIncrementsForOneTick>:       0x0000ea60      0x00000000      0x80093f40      0x00000000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值