stm32在linux编译,远程调试

背景

本人笔记本太渣,使用keil编译时CPU占用率竟然能到%90,实在忍受不了,就想着将stm32 keil的工程port到linux上用makefile来控制(嗯,服务器配置相当豪华)。使用gdb+jlink server的方式进行调试。惊喜的发现jlink竟然可以直接将程序烧写到stm32的内部flash。

移植

记录几个关键地方:

  1. 参考工程: https://github.com/embedded2014/freertos-stm32 ,因为需要用到makefile和lds脚本,自己写起来太费劲,就在github上搜了一下,果然有前辈做好的工程。就借鉴一下Makefile和lds,在该基础上进行修改

  2. 将MDK的工程源码直接添加后,发现编译没有通过,百度上发现MDK和GCC用的启动文件start.s不同。参考链接:http://bbs.chinaunix.net/thread-4083983-1-1.html

调试

  1. 在windows上打开gdbserver,选择目标处理器后界面如下
    stm32在linux编译,远程调试_第1张图片
  2. 在linux系统上使用对应gdb连接该server
    > cat gdb.sh 
    #!/bin/bash 
    ~/workspace/stm32/gcc-arm-none-eabi-7-2018-q2-update/bin/arm-none-eabi-gdb -x ./script_gdb/stm32.gdb
    
    > cat ./script_gdb/stm32.gdb
    target remote 10.213.37.111:2331
    file ./STM32F429.elf
    exec-file ./STM32F429.elf
    
    然后手动在gdb中使用load命令即可将程序烧写到stm32的flash中(注意lds是flash版本的而不是sram版本)

关于gdb和Keil的对比

显然keil比较方便,但是gdb可定制性更强,熟悉用起来就比较舒服。
顺便说一下编译器性能,之前测试过coremark大概就是:IAR > MDK > GCC,即同样的程序IAR编译的会比GCC编译的性能好。

你可能感兴趣的:(stm32)