这里想研究一下GCC在window的编译机制,已经在nordic的SDK上测试成功,请看文章:https://blog.csdn.net/chengdong1314/article/details/124601952(开发环境的搭建请看这篇文章)

但是nordic的工程和Makefile太复杂了,不适合做研究,所以又找到了一个STM32的项目来做研究,源码来自:https://gitee.com/elitah/stm32_gcc_test.git
下载解压后可以看到Makefile如下:

BIN = led_on
OBJS = head.o rcc.o systick.o gpio.o usart.o common.o main.o GCC = arm-none-eabi-
GFLAG = -mcpu=cortex-m3 -mthumb -Wall
CFLAG = -I./include/$(BIN).bin: $(OBJS)$(GCC)ld -T$(BIN).lds $^ -o $(BIN)_elf$(GCC)objcopy -O binary -S $(BIN)_elf $(BIN).bin$(GCC)objdump -D -m arm $(BIN)_elf > $(BIN).disftp: $(BIN).bin@chmod 0755 ./ftp.sh@./ftp.sh%.o : %.s$(GCC)gcc $(GFLAG) $(CFLAG) -c -o $@ $<%.o : %.S$(GCC)gcc $(GFLAG) $(CFLAG) -c -o $@ $<%.o : %.c$(GCC)gcc $(GFLAG) $(CFLAG) -c -o $@ $<clean:rm -f *.o *elf *.bin *.dis *~ *bak

注意:rm命令在linux中可用,在window不行,可以把rm换成del,参考文章:https://blog.csdn.net/chengdong1314/article/details/124613617
在CMD中调用gcc编译成功:

编译成功后生成如下bin文件:

然后使用JFLASH下载代码到STM32芯片中并且运行:

可以看到LED灯正常闪烁了:

本文源代码请从如下地址下载:https://download.csdn.net/download/chengdong1314/85300460

另外,关于Makefile的注释说明如下(请按照序号浏览):

BIN = led_on
OBJS = head.o rcc.o systick.o gpio.o usart.o common.o main.o GCC = arm-none-eabi-
GFLAG = -mcpu=cortex-m3 -mthumb -Wall
CFLAG = -I./include/$(BIN).bin: $(OBJS)//①结合第一行可以知道目标是led_on.bin(但是这句话并没有生成bin)  并且依赖于第二行的OBJS,也就是说要先编译第二行的内容,再根据地17.20,23行可知是根据文件的类型进行编译生成.o文件$(GCC)ld -T$(BIN).lds $^ -o $(BIN)_elf//⑥当第二行的OBJS都编译完成后使用arm-none-eabi-ld进行连接,连接文件(地址文件)使用led_on.lds,生成的文件是led_on_elf$(GCC)objcopy -O binary -S $(BIN)_elf $(BIN).bin//⑦arm-none-eabi-objcopy把led_on_elf转成led_on.bin$(GCC)objdump -D -m arm $(BIN)_elf > $(BIN).dis//⑧arm-none-eabi-objdump生成led_on.dis,到这里默认命令的编译工作就结束了ftp: $(BIN).bin//⑨把bin文件上传到ftp,命令是make ftp@chmod 0755 ./ftp.sh@./ftp.sh%.o : %.s//②对于.s的汇编文件,使用gcc生成.o文件,比如:head.s$(GCC)gcc $(GFLAG) $(CFLAG) -c -o $@ $<//③结合第四行可知这里是调用arm-none-eabi-gcc,头文件放在include文件夹中%.o : %.S//④对于.S的汇编文件,使用gcc生成.o文件,本工程没有这样的文件$(GCC)gcc $(GFLAG) $(CFLAG) -c -o $@ $<%.o : %.c//⑤对于.c的汇编文件,使用gcc生成.o文件,比如main.c$(GCC)gcc $(GFLAG) $(CFLAG) -c -o $@ $<clean://⑩清除临时文件,命令是make cleanrm -f *.o *elf *.bin *.dis *~ *bak

STM32使用gcc编译使用说明相关推荐

  1. STM32 gcc编译环境搭建

    STM32 gcc编译环境搭建 标签(空格分隔): stm32 gcc Makefile 说在前面的话 gcc编译器兼容Windows.Linux和MAC,可自行去官网下载,此处提供参考链接:http ...

  2. armgcc交叉编译的文件无法运行_从0开始搭建基于ARM GCC的软件系统02——使用ARM GCC编译SDK

    本文以STM32L4VGT6为例,因为手上只有这么一块开发板.其它IC处理方法应该类似. 一.准备工作 1.打开官网https://www.st.com/content/st_com/en.html, ...

  3. ARM-GCC环境搭建:适用STM32/GD32的编译调试总结

    本文重点参考了一位博主的文章,他的文章写的也是十分详细,推荐阅读. Win10配置 STM32/GD32 单片机 GCC+VScode 编译调试总结 2021版_秋阳 Cody的博客-CSDN博客_g ...

  4. MDK Keil使用GCC编译图文详解

    关注.星标公众号,直达精彩内容 素材来源:https://blog.csdn.net/qq_32348883/article/details/123894312 整理:技术让梦想更伟大 | 李肖遥 简 ...

  5. 用gcc编译实现对Linux系统cpu占用

    目标:使用gcc编译代码使得占用系统的cpu. 1.确定是否安装gcc编译 2.vi att.c 文件代码如下: a的数值可自己调控,for循环(;;)代表死循环,在for中运行竟可能复杂的代码,让机 ...

  6. 【Linux入门到精通系列讲解】Ubuntu下使用gcc编译并运行C程序

    文章目录 1 hello 2 命令 3 linux下gcc编译多个源文件 1 hello 2 命令 在终端输入 Ubuntu命令 $ gcc hello.c -o hello $ ./hello == ...

  7. gcc编译报错:undefined reference to `std::cout‘

    1 问题描述 下面的一段代码(代码来源)在使用gcc编译的时候报错:undefined reference tostd::cout'` 编译文件:test.cpp内容如下: #include < ...

  8. Linux基础——gcc编译、静态库与动态库(共享库)

    Linux基础--gcc编译.静态库与动态库(共享库) https://blog.csdn.net/daidaihema/article/details/80902012 Linux基础--gcc编译 ...

  9. Linux系统下GCC编译错误:“undefined reference to ‘sqrt‘”

    Linux系统下GCC编译错误:"undefined reference to 'sqrt'",解决方法:-lm 数学函数sqrt()位于libm.so库文件中(这些库文件通常位于 ...

最新文章

  1. ecplise 工具字体大小的调整
  2. 整个领域没了!学术界有史以来最大的丑闻
  3. Python学习之数组
  4. 在国企当程序员是什么体验?
  5. 反向 Dropout,韩松团队最新工作NetAug:提高Tiny神经网络性能的新训练方法
  6. Postman界面了解
  7. 关于堆空间溢出的错误解决办法
  8. 学习“用dlopen,dlsym加载动态链接库.so中函数”之摘录
  9. java随机10位随机数 random.uuid_一文详解编程中的随机数
  10. MySQL之GROUP BY用法误解
  11. 电脑小写字母怎么切换_笔记本键盘切换的操作流程
  12. linux socket 104 错误,linux socket连接中 ERRNO错误
  13. Python抓取妹子图
  14. redis-trib.rb找不到
  15. 推荐几款连字字体,在代码编辑器中启用连字字体(Visual Studio Code)
  16. 使用计算机用眼卫生,电脑族日常保护眼睛小常识
  17. “缴费”和“交费”的区别
  18. android下怎样伪装mac,Android刷成iOS?史上最强苹果伪装教程
  19. Amazon Shield Advanced 更新 – 自动应用程序层 DDoS 防御
  20. android 电池电量广播,Android查看电池电量的方法(基于BroadcastReceiver)

热门文章

  1. java当前时间的时间戳_java获取时间戳和当前时间
  2. 数据分析师岗位薪资多少?一张图告诉你答案
  3. 光伏行业将由补贴转向技术、商业驱动
  4. 保护视力的软件:定时提醒你休息的桌面工具EyeLeo
  5. Meta员工年薪高达 213 万元,反超谷歌成 top 1,网友:“还是别人家公司香!”...
  6. 直播时代--IOS直播客户端SDK,美颜直播【开源】
  7. dapper oracle 参数,c# – 使用dapper查询oracle的集合参数
  8. Spring和Spring Boot的区别
  9. 第14节:特色数据——新闻大事情感分析
  10. DataWei免费的报表工具,大数据可视化平台