当前位置: 首页 > news >正文

免费seo排名网站wordpress构架都是模板

免费seo排名网站,wordpress构架都是模板,进什么网站接模具做,网站源码下载教程单片机上电后执行的第一段代码 1.初始化堆栈指针 SP_initial_sp 2.初始化 PC 指针Reset_Handler 3.初始化中断向量表 4.配置系统时钟 5.调用 C 库函数_main 初始化用户堆栈#xff0c;然后进入 main 函数。 在正式讲解之前#xff0c;我们需要了解STM32的启动模式。 STM32的…单片机上电后执行的第一段代码 1.初始化堆栈指针 SP_initial_sp 2.初始化 PC 指针Reset_Handler 3.初始化中断向量表 4.配置系统时钟 5.调用 C 库函数_main 初始化用户堆栈然后进入 main 函数。 在正式讲解之前我们需要了解STM32的启动模式。 STM32的启动模式 手册可以在Keil中跳转查看 STM32的三种启动模式 首先要讲一下STM32的启动模式因为启动模式决定了向量表的位置STM32有三种启动模式 1. 主闪存存储器(Main Flash memory)启动 从STM32内置的Flash启动(0x0800 0000-0x0807 FFFF)一般我们使用JTAG或者SWD模式下载程序时就是下载到这个里面重启后也直接从这启动程序。以0x08000000 对应的内存为例则该块内存既可以通过0x00000000 操作也可以通过0x08000000 操作且都是操作的同一块内存。 2. 系统存储器(System memory)启动 从系统存储器启动(0x1FFFF000 - 0x1FFF F7FF)这种模式启动的程序功能是由厂家设置的。一般来说我们选用这种启动模式时是为了从串口下载程序因为在厂家提供的ISP程序中提供了串口下载程序的固件可以通过这个ISP程序将用户程序下载到系统的Flash中。以0x1FFFFFF0对应的内存为例则该块内存既可以通过0x00000000 操作也可以通过0x1FFFFFF0操作且都是操作的同一块内存。 3. 片上SRAM(Embedded SRAM)启动 从内置SRAM启动(0x2000 0000-0x3FFFFFFF)既然是SRAM自然也就没有程序存储的能力了这个模式一般用于程序调试。SRAM 只能通过0x20000000进行操作与上述两者不同。从SRAM 启动时需要在应用程序初始化代码中重新设置向量表的位置。 用户可以通过设置BOOT0和BOOT1的引脚电平状态来选择复位后的启动模式。 如下图所示 总结  启动模式只决定程序烧录的位置加载完程序之后会有一个重映射(映射到0x00000000地址位置)真正产生复位信号的时候CPU还是从开始位置执行。 值得注意的是STM32上电复位以后代码区都是从0x00000000开始的三种启动模式只是将各自存储空间的地址映射到0x00000000中。 STM32的启动文件分析 因为单片机上电启动过程主要是由汇编完成的因此STM32的启动的大部分内容都是在启动文件里。我用CubeMX生成的的启动文件是startup_stm32f103xb.s不管使用标准库还是使用HAL库启动文件都是差不多的。 1. Stack栈 栈的作用是用于局部变量函数调用函数形参等的开销栈的大小不能超过内部SRAM 的大小。当程序较大时需要修改栈的大小不然可能会出现的HardFault的错误。 第32行表示开辟栈的大小为 0X4001KBEQU是伪指令相当于C 中的 define。 第34行开辟一段可读可写数据空间ARER 伪指令表示下面将开始定义一个代码段或者数据段。此处是定义数据段。ARER 后面的关键字表示这个段的属性。段名为STACK可以任意命名NOINIT 表示不初始化READWRITE 表示可读可写ALIGN3表示按照 8 字节对齐。 第35行SPACE 用于分配大小等于 Stack_Size连续内存空间单位为字节。 第37行 __initial_sp表示栈顶地址。栈是由高向低生长的。 2. Heap堆 堆主要用来动态内存的分配像malloc()函数申请的内存就在堆中。 开辟堆的大小为 0X200512 字节名字为 HEAPNOINIT 即不初始化可读可写8字节对齐。__heap_base 表示对的起始地址__heap_limit 表示堆的结束地址。 3. 向量表 向量表是一个WORD 32 数组每个下标对应一种异常该下标元素的值则是该 ESR 的入口地址。向量表在地址空间中的位置是可以设置的通过 NVIC 中的一个重定位寄存器来指出向量表的地址。在复位后该寄存器的值为 0。因此在地址 0 即 FLASH 地址 0处必须包含一张向量表用于初始时的异常分配。 值得注意的是这里有个另类 0 号类型并不是什么入口地址而是给出了复位后 MSP 的初值后面会具体讲解。 第55行定义一块代码段段名字是RESETREADONLY 表示只读。 第56-58行使用EXPORT将3个标识符申明为可被外部引用声明 __Vectors、__Vectors_End 和__Vectors_Size 具有全局属性。 第60行__Vectors 表示向量表起始地址DCD 表示分配 1 个 4 字节的空间。每行 DCD 都会生成一个 4 字节的二进制代码中断向量表 存放的实际上是中断服务程序的入口地址。当异常也即是中断事件发生时CPU 的中断系统会将相应的入口地址赋值给 PC 程序计数器之后就开始执行中断服务程序。在60行之后依次定义了中断服务程序的入口地址。 第121行__Vectors_End 为向量表结束地址。 第123行__Vectors_Size则是向量表的大小向量表的大小是通过__Vectors 和__Vectors_End 相减得到的。 4. 复位程序 复位程序是系统上电后执行的第一个程序复位程序也是中断程序只是这个程序比较特殊因此单独提出来讲解。 第128行定义了一个服务程序PROC表示程序的开始。 第129行使用EXPORT将Reset_Handler申明为可被外部引用后面WEAK表示弱定义如果外部文件定义了该标号则首先引用该标号如果外部文件没有声明也不会出错。这里表示复位程序可以由用户在其他文件重新实现这种写法在HAL库中是很常见的。 第130-131行表示该标号来自外部文件SystemInit()是一个库函数在system_stm32f1xx.c中定义的__main 是一个标准的 C 库函数主要作用是初始化用户堆栈这个是由编译器完成的该函数最终会调用我们自己写的main函数从而进入C世界中。 第132行这是一条汇编指令表示从存储器中加载SystemInit到一个寄存器R0的地址中。 第133行汇编指令表示跳转到寄存器R0的地址并根据寄存器的 LSE 确定处理器的状态还要把跳转前的下条指令地址保存到 LR。 第134行和132行是一个意思表示从存储器中加载__main到一个寄存器R0的地址中。 第135行和133稍微不同这里跳转到至指定寄存器的地址后不会返回。 第136行和PROC是对应的表示程序的结束。 5. 中断服务程序 我们平时要使用哪个中断就需要编写相应的中断服务程序只是启动文件把这些函数留出来了但是内容都是空的真正的中断复服务程序需要我们在外部的 C 文件里面重新实现这里只是提前占了一个位置罢了。 这部分没啥好说的和服务程序类似的只需要注意‘B .’语句B表示跳转这里跳转到一个‘.’即表示无线循环。 6. 堆栈初始化 堆栈初始化是由一个IF条件来实现的MICROLIB的定义与否决定了堆栈的初始化方式。 这个定义是在Options-Target中设置的 这部分也没啥讲的需要注意的是ALIGN表示对指令或者数据存放的地址进行对齐缺省表示4字节对齐。
http://www.sadfv.cn/news/124867/

相关文章:

  • 石家庄做商城网站的公司wordpress模板分享
  • 简单的网站架构wordpress+大附件
  • 网站静态页面下载工具wordpress邮箱登录
  • 网站建设积分番禺核酸检测点在哪
  • 合肥php网站开发html5教程视频教程
  • h5免费制作网站模板青岛做网站建设的公司
  • 电影网站建设教学视频大连建设工程信息网(官网)
  • 建站排名新手如何做企业网站
  • dj音乐网站建设怎么注册公司名字和商标
  • 网站开发要写代码吗广州天河区网站设计公司
  • 最专业的手机网站建设网页搜索引擎
  • 上海好的高端网站建设wordpress php占内存
  • 网站专题页优化wordpress 入侵视频
  • 濮阳信息网更换模板对网站seo的影响
  • 关于网站建设调查问卷做网站需要那些技术
  • photoshop画简单网站腾讯云如何创建网站
  • 动力无限做网站怎样水利建设管理司网站
  • 返佣网站都是自己做的广州站电话
  • 杭州网络公司建网站南昌网站建设方案维护
  • 常平网站公司免费商城自助建站
  • 衡水做网站公司做寻亲网站的理由
  • 网站建设引流刘贺稳1wordpress必备
  • 17网站一起做网店广州短视频推广营销
  • 网页加入信任站点小米发布会汽车
  • 悠悠我心个人网站模板外贸类网站建设
  • 淘宝网站建设的详细策划网站开发需求大吗
  • wordpress网站变灰网站底部给网站地图做链接
  • 个人信息网站htmlflash网站代码下载
  • 六站合一的优势綦江网站建设
  • 福州网站建设哪家好石家庄市环保局网站建设项目备案系统