我们从2011年坚守至今,只想做存粹的技术论坛,记录你的技术足迹,有空就回来看看。  由于网站在外面,点击附件后可能要20秒才弹出下载,请耐心等待,勿重复点击

 找回密码
 立即注册
搜索
查看: 713|回复: 12

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

[复制链接]

该用户从未签到

25

主题

126

回帖

0

积分

二级逆天

积分
0

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

发表于 2021-10-6 09:17:28 | 显示全部楼层 |阅读模式
抛开底层相关的启动函数等等,我们可以简单的理解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。遇到这类问题一定要先排查。
回复

使用道具 举报

  • TA的每日心情

    2024-6-4 16:56
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    2718

    回帖

    2797

    积分

    1元学习Allegro(1期)

    积分
    2797

    终身成就奖特殊贡献奖

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

    使用道具 举报

  • TA的每日心情

    2024-6-4 16:56
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    2718

    回帖

    2797

    积分

    1元学习Allegro(1期)

    积分
    2797

    终身成就奖特殊贡献奖

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

    使用道具 举报

    该用户从未签到

    0

    主题

    192

    回帖

    0

    积分

    一级逆天

    积分
    0

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

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

    使用道具 举报

  • TA的每日心情

    2024-6-4 16:56
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    2718

    回帖

    2797

    积分

    1元学习Allegro(1期)

    积分
    2797

    终身成就奖特殊贡献奖

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

    使用道具 举报

    该用户从未签到

    0

    主题

    449

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

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

    使用道具 举报

    该用户从未签到

    0

    主题

    78

    回帖

    110

    积分

    二级逆天

    积分
    110

    社区居民终身成就奖

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

    使用道具 举报

  • TA的每日心情

    2024-6-4 16:56
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    2718

    回帖

    2797

    积分

    1元学习Allegro(1期)

    积分
    2797

    终身成就奖特殊贡献奖

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

    使用道具 举报

    该用户从未签到

    0

    主题

    36

    回帖

    1

    积分

    一级逆天

    积分
    1

    终身成就奖社区居民

    QQ
    发表于 2021-11-13 10:27:16 | 显示全部楼层
       sdzl说的在里
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    449

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

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

    使用道具 举报

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

    本版积分规则

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

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

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