GCC下单片机开发
文章平均质量分 87
我我我只会printf
海阔凭鱼跃,山高任鸟飞。
展开
-
(GCC)STM32进阶详解之栈回溯
由上一篇大概了解了函数是如何被调用,中断或者说异常又是如何被调用,而这一篇相当于上一篇知识的一个应用,也是上一篇遗留的思考,即在hardfault中如何判断是从何处触发这个异常的。本来打算自己写demo,但是查到github上有一个开源的CmBacktrace,既然有大牛已经写了开源的库,就直接拿来分析印证吧。硬件我使用的是STM32F103ZET6最小系统板,demo是项目中提供的,直接下载即可。原创 2022-12-22 17:57:09 · 3221 阅读 · 3 评论 -
(GCC)STM32基础详解之全局资源的使用
在使用一个共享的全局资源时,多个地方修改这个资源可能会引发问题。可以使用原子操作、关闭中断或者屏蔽中断解决。它们各有利弊:1.原子操作并不一定是一条指令,而可能是很多条指令,只是通过独占访问等实现,所以原子操作可能更加耗时,对于时间敏感的地方需要衡量是否会影响功能。但是好处是它不对其他中断有影响,比如这个例子中的定时器中断,它的响应并不会被延迟。2.关闭所有中断简单粗暴,但在实际项目中,可能使用了很多中断,并不是所有中断都可以随意关闭,有些中断被关闭可能引发一些问题。.........原创 2022-08-08 10:12:41 · 1629 阅读 · 0 评论 -
(GCC)STM32进阶修炼之ELF文件剖析
本文拟通过分析一个普通的elf文件去剖析elf文件结构。一、数据格式上图表示:比如Elf32_Addr表示无符号程序地址,其大小为4bytes,字节对齐为4。对于STM32来说,其地址是32位,这个毋庸置疑。在Linux下/usr/include/elf.h中也有定义:typedef uint16_t Elf32_Half;typedef uint16_t Elf64_Half;typedef uint32_t Elf32_Word;typedef int32_t Elf32原创 2022-04-07 10:05:11 · 3641 阅读 · 0 评论 -
(GCC)STM32基础详解之函数调用
介绍不再赘述,接上一篇:内存分配本文会分析一个简单的普通函数调用和中断函数调用。其中涉及Cortex-M3架构与AAPCS相关知识。但并不打算从Cortex-M3寄存器组开始讲起,相关知识请参考文末参考资料。函数调用就一句话:有调有还,再调不难1.起始代码void fun(unsigned int tmp){ if(tmp) { }}int main(void){ unsigned int tmp1 = 0x11111111; fun(tmp1); w原创 2022-02-07 17:07:20 · 8622 阅读 · 3 评论 -
(GCC)STM32基础详解之内存分配
1.硬件说明使用STM32F103ZET6最小系统板。2.工程说明本章所使用工程为STM32CubeMX生成,去掉了时钟初始化,堆栈设置初始都为0,main函数如下:int main(void){ while (1) { }}初次编译如下:其中:text:代码段data:已初始化数据段bss:未初始化数据段dec:十进制,结果为text+data+bss总和hex:16进制,同上为什么main函数什么都没有使用,却显示有8个字节的已.原创 2022-01-20 17:06:10 · 10338 阅读 · 13 评论 -
(GCC)记一次STM32不同编译器除零差异分析
硬件:STM32H743VIT6最小系统板软件:VSCode/Ozone/Keil5.35/STM32CubeMX交叉编译链:arm-none-eabi-gcc/armcc操作系统:Windows新入手了一块H7开发板,TB卖家给的例子是STM32CubeMX生成的Keil版本,想把它迁移到GCC下开发, 本以为简单的移植却卡在SPI屏幕显示,经过调试最终把问题定位到驱动上,但是Keil版本的可以正常使用,GCC版本不应该有问题。经过半天调试,最后发现bug只来源于一条语句:源码的.原创 2021-12-17 11:51:17 · 1483 阅读 · 0 评论 -
(GCC)STM32跑马灯代码的前世今生
开发板:TB不知名STM32F103ZET6最小系统板工具链:arm-none-eabi-gcc开发环境:Windows开发工具:VScode/STM32CubeMX首先声明本文并不是一篇教程,也并不提倡使用文中方式开发。只是在日益强大的IDE面前,很多细节都被隐藏,笔者认为对于开发者,有得有失。本文希望对于刚学了C语言准备开始单片机开发的朋友有所帮助,奈何水平有限,尽力而为。1. 编写代码单片机的第一个程序都是跑马灯,就像C语言第一个程序都是helloworld。...原创 2021-09-23 10:50:51 · 2267 阅读 · 3 评论 -
(GCC)STM32CubeMX中s启动文件详解
本文所使用工程由STM32CubeMX生成,使用芯片:STM32F103ZET6,基本只开了时钟。.s文件内容如下:/** *************** (C) COPYRIGHT 2017 STMicroelectronics ************************ * @file startup_stm32f103xe.s * @author MCD Application Team * @version V4.2.0 * @date 3原创 2021-04-13 13:33:38 · 2412 阅读 · 1 评论 -
(GCC)STM32CubeMX生成的ld链接脚本详解
本文所使用工程由STM32CubeMX生成,使用芯片:STM32F103ZET6,基本只开了时钟。ld连接脚本内容如下:/********************************************************************************** File : LinkerScript.ld**** Abstract : Linker script for STM32F103ZETx Device with**原创 2021-04-12 19:53:38 · 5629 阅读 · 2 评论 -
windows下用VSCODE开发stm32踩的坑
开发所需:1.vscode:编写代码2.STM32cubeMX:生成带.ld和.s和makefile等工程代码3.openocd(或者JLink):调试、下载4.MinGW(或者mingw64):编译代码5.arm-none-eabi-gcc:交叉编译链安装:VSCODE:VSCODESTM32CUBEMX:ST官网有,下载需要先注册openocd(或者JLink):openocdjlink自己网上找资源吧MinGW(或者mingw64):MinGWmingw64资原创 2020-07-10 16:11:56 · 2291 阅读 · 3 评论 -
(GCC)STM32CubeMX生成的Makefile详解
本文所使用工程由STM32CubeMX生成,使用芯片:STM32F103ZET6,基本只开了时钟。看懂本篇解析需要有一些最基本的Makefile知识。本文会从正反两个方向去解析Makefile文件。Makefile文件如下:########################################################################################################################### File automaticall原创 2021-01-11 11:18:56 · 10302 阅读 · 31 评论