我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1669|回复: 29

[技术文章] STM32程序和C语言程序的异同

  [复制链接]

25

主题

94

回帖

178

积分

二级逆天

积分
178

终身成就奖特殊贡献奖原创先锋奖

发表于 2021-10-6 09:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
抛开底层相关的启动函数等等,我们可以简单的理解C语言程序的入口为一个main函数。系统运行这个程序后,调用main函数,执行我们所写的代码。当函数执行完毕,main函数返回后,程序结束,操作系统相关的管理器会释放掉程序运行时候所占用的内存,供新的程序使用。具体执行前操作系统需要读取文件头等等,经过一系列的流程。不在这里讨论范围,有兴趣可以去查询相关资料。


而STM32的程序则简单的多。简化叙述流程就是,上电后,由底层的汇编文件去初始化堆栈,初始化中断向量表和相关的Handle等等,做完一系列初始化的工作,调用main函数。然后执行HAL库层面的初始化,比如配置引脚,配置时钟等等。最后进入一个死循环。此后程序便完全顺着中断和死循环内定义的东西去执行了。如果死循环退出,执行完main函数,会顺着Flash里面储存的代码数据,执行下一条指令,这使得程序变得不可控了。因此main里面的while(1)不能省略。哪怕你的程序完全由中断调度实现,主循环里面不需要任何东西。
某种程度上可以理解为在单片机里面跑的程序,永远没有结束,除非断电或Reset或其他特殊情形。
STM32的程序也是由C语言写的,因此,二者在变量,运算符,函数声明等等方面是相同的。你只需要像写电脑程序那样,去写STM32的程序即可。比如在main.c里面声明一个变量,那么无论是在电脑上的程序,还是STM32,main函数都可以访问,修改这个变量,其他文件如果extern了,相关函数也能看到。
但需要注意的是,STM32的RAM空间有限,对于一些非常小的MCU,不可能像电脑那样随意建一个4096的缓冲区。需要注意合理的内存分配,必要时使用malloc手动接管内存分配以免溢出。
此外指针操作需要尤其注意,STM32没有完善的内存保护机制,编译器很可能不告诉你诸如数组越界等Bug,导致你错误的读取或修改一些或许很重要的内存,这些BUG时常会引起一些匪夷所思的问题,比如莫名其妙跳到了ErrorHandle。遇到这类问题一定要先排查。
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:110
  • 打卡月天数:0
  • 打卡总奖励:389
  • 最近打卡:2026-04-21 11:31:16

3

主题

2443

回帖

2660

积分

1元学习Allegro(1期)

积分
2660

终身成就奖特殊贡献奖

发表于 2021-10-10 08:57 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:110
  • 打卡月天数:0
  • 打卡总奖励:389
  • 最近打卡:2026-04-21 11:31:16

3

主题

2443

回帖

2660

积分

1元学习Allegro(1期)

积分
2660

终身成就奖特殊贡献奖

发表于 2021-10-15 08:46 | 显示全部楼层
回复

使用道具 举报

0

主题

145

回帖

100

积分

二级逆天

积分
100

终身成就奖特殊贡献奖原创先锋奖

发表于 2021-10-19 19:07 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:110
  • 打卡月天数:0
  • 打卡总奖励:389
  • 最近打卡:2026-04-21 11:31:16

3

主题

2443

回帖

2660

积分

1元学习Allegro(1期)

积分
2660

终身成就奖特殊贡献奖

发表于 2021-10-26 08:47 | 显示全部楼层
回复

使用道具 举报

0

主题

340

回帖

281

积分

二级逆天

积分
281

终身成就奖

发表于 2021-10-28 09:21 | 显示全部楼层
回复

使用道具 举报

0

主题

82

回帖

203

积分

二级逆天

积分
203

社区居民终身成就奖

QQ
发表于 2021-11-9 08:28 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:110
  • 打卡月天数:0
  • 打卡总奖励:389
  • 最近打卡:2026-04-21 11:31:16

3

主题

2443

回帖

2660

积分

1元学习Allegro(1期)

积分
2660

终身成就奖特殊贡献奖

发表于 2021-11-10 08:53 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:初入少年
  • 打卡总天数:3
  • 打卡月天数:0
  • 打卡总奖励:6
  • 最近打卡:2026-03-24 18:29:23

0

主题

46

回帖

47

积分

一级逆天

积分
47

终身成就奖社区居民

QQ
发表于 2021-11-13 10:27 | 显示全部楼层
回复

使用道具 举报

0

主题

340

回帖

281

积分

二级逆天

积分
281

终身成就奖

发表于 2022-1-4 08:51 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请举报投诉

本站所有资料仅限参考学习交流,PCB原理图源码等所有资料不保证准确没问题,请不要用作生产。否则后果自负。

闽公网安备35062302000276号 | 闽ICP备2024076463号-1 | 论坛技术支持QQ群171867948 | 论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表