首页 / 嵌入式项目
#

嵌入式项目

#
27347次浏览 259人互动
此刻你想和大家分享什么
热门 最新
STM32上电复位后如何执行到main函数
当你给STM32开发板通电或者按下复位键的那一刻,STM32内核(通常是Cortex-M系列)立即进入一个确定的状态。硬件复位逻辑强制程序计数器指向一个极其特殊的固定内存地址。对于大多数STM32,这个地址是0x00000000(或者根据BOOT引脚配置映射到其他存储区域的起始地址,例如内部Flash通常是0x08000000)这个地址存放的不是普通指令,而是整个启动流程的第一个关键要素——主堆栈指针的初始值。内核做的第一件事就是读取这个值并初始化MSP寄存器,为后续的函数调用和中断处理建立好堆栈基础。紧接着,内核会读取紧邻的下一个地址(0x00000004)的内容,这个位置存放的是复位向量的地址,也就是复位处理函数的入口点。内核将这个地址加载到程序计数器PC中,至此,硬件自动执行的步骤完成,程序跳转到了软件定义的复位处理函数开始执行。复位处理函数通常由芯片厂商在启动文件中用汇编语言编写(例如startup_stm32fxxxxx.s中的Reset_Handler)。这个函数是启动流程的核心协调者。它的首要任务是调用SystemInit()函数。这个函数由ST的HAL库或标准外设库提供,负责对芯片至关重要的系统级硬件进行初始化。其核心工作包括配置内部时钟源、设置PLL倍频器以将时钟提升到芯片运行所需的高频率、初始化外部高速时钟(如果使用的话)、配置Flash访问等待状态(因为Flash速度通常跟不上内核全速运行)、以及设置关键的系统控制寄存器如SCB->VTOR以正确指向中断向量表的位置。这一步确保了内核和主要总线拥有正确且稳定的时钟信号,是后续所有操作能够正确执行的基础保障。完成关键的时钟和基本系统配置后,启动流程进入一个容易被忽视但极其重要的阶段——由编译器运行时环境负责的数据初始化。复位处理函数接下来会跳转到一个通常名为__main的入口点(这是ARM编译器工具链的约定,其他工具链如GCC可能有类似_start的机制)。__main并非用户编写的main函数,而是编译器提供的库函数。它的核心职责是处理C语言运行环境。这包括:将存储在Flash中的初始化值(.data段)复制到对应的SRAM位置,确保全局变量和静态变量拥有正确的初始值;将未初始化的全局变量和静态变量所在的内存区域(.bss段)清零,防止出现随机值;如果使用了C++,还会执行全局对象的构造函数。这些操作是C/C++程序能够正确运行的前提条件,没有它们,全局变量将处于不确定状态。当所有的底层硬件初始化、运行时环境设置和数据准备就绪后,__main函数最终会调用用户编写的应用程序入口——main()函数,此时进入main函数执行。
点赞 评论 收藏
分享
如何寻找嵌入式项目
经常看见粉丝朋友问在哪里才能找到不烂大街的项目,今天笔者来分享一下如何寻找。以下为个人看法,仅供参考。一、b站b站大学里边有许多项目,可以按照关键词搜索。如搜mcu   rtos项目;不过个人觉得能写在简历上的项目很少,很多智能家居和小车,因此不太建议去该平台寻找。二、Github作为全球最大的开源社区,github里边的开源项目丰富且质量较高。大家可以在里边搜寻开源项目进行复现,但大多数人不知道怎么进行检索,可以按照如下方式:输入"in: description stm32 language: stars:>100 pushed:>2020-12-01”。按照上述方式,可以检索出描述里有stm32,编程语言为c语言,收藏数>100并且更新日期在2020 年12月份之后的项目,这样就能大大提高检索效率。但github上边项目缺点是复现难度大,难度在于开发文档不详细、代码难度高等;同时,大多数好的项目需要实现一个真正的产品,因此通常需要机械结构知识,进行实体制造,外壳封装等,这会导致复现周期加长且需要学习机械或者3D打印知识。因此,可以综合考虑以上因素,在github上选择适合你自己的项目。三、由企业举办的公开赛事官网或课题组项目这些官网里边通常会出现企业命题,会告诉你要做出一个什么东西,会有一个比较宽泛的需求给到你。这些需求说不定就会给你创造出做项目的灵感。课题组项目是可遇不可求的,如果感觉课题组项目和你以后想去的行业方向比较接近,那你就可以将你的课题组项目与你想去的行业多结合起来形成一个新项目,并实现出来,拿去写简历,这也是很不错的。四、复现身边的“老古董”和跨界融合逛逛电子垃圾市场或拆解旧设备(比如说复现且升级改造一个微波炉),逆向工程其硬件和部分功能,尝试用现代微控制器复现或升级改造,这本身就是个极具挑战且独一无二的项目。也可以把嵌入式技术和非传统领域结合,比如用嵌入式系统做艺术装置交互控制、结合生物传感器做健康监测小设备、或者给传统乐器加装智能反馈系统。五、咸鱼及小红书必要的时候,也可以选择知识付费。不过在筛选项目的时候需要考虑以下几点:这个项目是否烂大街、技术栈涉及哪些、有哪些亮点、能否复现成功、开发文档是否详细、是否提供教程和工程源码、电路原理图、接线图等等。总之一句话:需要确定是否能满足你自己的需求,这一点很重要!六、实习个人觉得实习是最优解。如果你能看到公司的产品,尽量把它复现出来,哪怕简单一点。并且也可以写成自己的实习经历(哪怕没能做出来也要会吹,且写在简历上),增加优势。如果实在没能实习,则按照前边讲解的几种方法寻找项目。最后,如果有需要《STM32➕RTOS项目》、《嵌入式八股文合集》及《Freertos开发手册》等资料,也可以私信笔者获取。
点赞 评论 收藏
分享
嵌入式企业级项目分享-在线式智能分析平台
本人学校普普通通,通过读研期间系统学习嵌入式知识,以及帮助导师做了4个企业级项目,慢慢积攒了开发经验。以至于在2023年秋招,收获了满意offer。目前就职于汇川技术,嵌入式软件工程师岗位。趁着周末整理读研期间所作的一个项目,需要项目资料的学弟学妹可以私聊我。项目所属行业:该项目属于仪器仪表行业的产品,主要应用于化工生成、科学研究以及其他领域的气体测量与分析。项目解决的问题:由于传统的气体检测仪器,不能有效的测量混合气体中的浓度信息,设计该产品,基于气体的热导率不同,通过测量混合气体热导率,间接确定被测组分含量。项目中能学到什么:1、产品的行业知识:调零校准,环境背景补偿以及工业数据的通讯与传输等;2、产品硬件电路设计,包含三个电路板:模拟信号采集电路、温控PID电路、主控数字电路板。3、基于freertos操作系统设计产品的软件开发框架设计思路,高内聚低耦合。4、高速串口通讯框架设计,可靠,防止丢包,支持数据流和数据帧格式传输等。5、基于外部存储器(eeprom或flash)的微数据库,实现数据的存储与增删改查。6、工业通讯协议Modbus RTU与TCP通讯,串口驱动用于Modbus RTU通讯,编写以太网芯片驱动用于Modbus TCP通讯。7、面向对象编程实现产品功能,包括灵活的接口配置,通道选择以及数据的运算过程等。
点赞 评论 收藏
分享
玩命加载中
牛客网
牛客网在线编程
牛客网题解
牛客企业服务