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

网站怎么黑济南网站建设联系小七

网站怎么黑,济南网站建设联系小七,海安建设局网站,厦门app开发【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 背景 接之前的 blog 【OS】【Nuttx】【启动】…

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

接之前的 blog
【OS】【Nuttx】【启动】向量表内容
【OS】【Nuttx】【构建】防止代码被优化
【OS】【Nuttx】【构建】配置 stm32 工程
分析了启动中的关键内容向量表,还分析了点配置,和代码优化技巧,现在来 stm32 启动函数分析

启动函数

stm32f429 的启动函数位于 stm32_start.c 文件
在这里插入图片描述
开头这里两个问题:

  • 局部变量定义的时候,没有初始化,局部变量的地址位于栈上,栈里的内容是不确定的,所以对局部变量定义的时候,就应该做好初始化
  • 变量定义得太早了,和使用变量的地方离的很远,不是好的代码实践,最好变量在哪里使用,就在哪里定义

接下来是一段通过配置项 CONFIG_ARMV7M_STACKCHECK 可选的内容
在这里插入图片描述
该功能用于是否启用栈保护,防止栈溢出,下面简单看下这个功能

  • 首先是注释,在系统启动早期(启动函数执行的第一条指令),调用任何函数之前,设置一个栈的限制范围,用来做栈溢出检查保护
  • 然后这里是一条关键的 gcc 内联汇编指令,将当前栈指针寄存器 sp 减去一个偏移值 ,结果保存到寄存器 r10 中,用 r10 寄存器来保存栈底(物理上的),或者叫栈的限制地址
  • “r”(CONFIG_IDLETHREAD_STACKSIZE - 64) 这里表示把这个计算结果先放到一个通用寄存器里,前面的 %0 表示输入的第一个参数,也就是那个放入通用寄存器的计算结果,比如 gcc 可以翻译成下面这种形式,用户不需要关心具体用了哪个寄存器,gcc 会自动分配一个可用的寄存器,比如 r2,r3 等
mov r3, #1024-64   ; CONFIG_IDLETHREAD_STACKSIZE 配置为 1024
sub r10, sp, r3

所以总结一下,当前栈指针是 sp,指向栈顶(向下增长,从高地址到低地址)。
栈的总大小是 CONFIG_IDLETHREAD_STACKSIZE,从栈顶往下减去这个大小,得到栈的底部地址,再加回去 64 字节,作为一个警戒区域,提前预警栈溢出,这个警戒区域地址保存在 r10 中,在后续运行过程中,可以通过比较 sp 和 r10 来判断是否发生了栈溢出
在这里插入图片描述

这里再提三个点,首先是通用寄存器,官方文档 《Arm Cortex-M4 Processor Technical Reference Manual.pdf》描述如下
在这里插入图片描述
这里挑几个重点讲:

  • R0-R12 都是是32位通用寄存器,可以用于存储临时数据,函数参数传递,存储返回值,比如 R0,还有地址计算等
  • 在指令层面,这部分通用寄存器被进一步划分为两类:Low registers(范围 R0 - R7),可以被所有 16 位和 32 位指令访问;High registers(范围 R8 - R12)只能被 32 位指令访问,大部分 16 位指令不能使用
  • 注意,这里的分类不是说 R0-R7 只能使用16位指令,而是某些 16 位 Thumb 指令 只能操作 R0-R7,保持与早期 Thumb 指令集的兼容性,并提高代码密度,Cortex-M 支持 Thumb-2 指令集(16位 + 32位),在 Thumb-2 中,完全可以用 32 位指令访问所有寄存器(R0-R12 都可以)

这里使用 R10 通用寄存器作为存储栈溢出警戒区的寄存器,至于为什么用这个寄存器,后面文章再分析

今天先到这里吧,剩下的下篇 blog 再分析


文章转载自:

http://gFVElF0o.bzcjx.cn
http://onybW8Qy.bzcjx.cn
http://8XYkaEtn.bzcjx.cn
http://sgco0rWI.bzcjx.cn
http://GDiGLDZm.bzcjx.cn
http://NJWurvpq.bzcjx.cn
http://DHXAdBaa.bzcjx.cn
http://0Mcgld2w.bzcjx.cn
http://rALMwRYI.bzcjx.cn
http://VaC1TYpw.bzcjx.cn
http://R7qijvTr.bzcjx.cn
http://6HrLgQrV.bzcjx.cn
http://x5RWarUg.bzcjx.cn
http://GbDdLk37.bzcjx.cn
http://JeXD13Jy.bzcjx.cn
http://kR6fW6kC.bzcjx.cn
http://yVhNCa2l.bzcjx.cn
http://b3Wg0yVd.bzcjx.cn
http://k3tMm4BP.bzcjx.cn
http://kx1NCG6I.bzcjx.cn
http://q0cjcchY.bzcjx.cn
http://xERDem3o.bzcjx.cn
http://31DGcapN.bzcjx.cn
http://ofniubKJ.bzcjx.cn
http://8woDGtqC.bzcjx.cn
http://AdkGFSSy.bzcjx.cn
http://heDIIkZ7.bzcjx.cn
http://w0aPb2Jf.bzcjx.cn
http://OQSxTsLe.bzcjx.cn
http://G4GjXFum.bzcjx.cn
http://www.dtcms.com/wzjs/614726.html

相关文章:

  • 鲜花网站源码公司网站建设代码都写完了
  • 佛山网站制作平台嘉兴市建设局网站
  • 抖音推广公司深圳网站优化培训
  • 新浪网站是什么程序做的怎么设计自己logo
  • 做网站排名收益安陆网站
  • 在线建站|网页制作|网站建设平台艺术公司网站定制
  • 柳州网站建设价格查电商官网
  • 福田瑞沃售后服务电话湖南网站优化
  • 在网站建设中要注意的问题公司注册域名需要哪些条件
  • 苏州 网站建设 app网络推广方案范例
  • 白银市建设管理处网站如何维护公司网站
  • 涂鸦网站建设小蝌蚪xkdapp永久免费
  • 物流公司做网站怎样制作微信网站
  • 镇江网站优化哪家好北京做网站公司 seo
  • 网站优化策划方案销往国外的网店怎么开
  • 河池企业网站开发公司设计免费素材网站
  • 深圳手机网站定制开发vps免费
  • dw网页设计的一般步骤长沙官网网站推广优化
  • 还有河北城乡和住房建设厅网站吗龙岩公司注册流程
  • 网站建设怎么跑业务做玄幻封面素材网站
  • 建设标准下载网站建网站需要怎么做
  • 建设网站需要域名还有什么建设银行电子银行网站
  • 太原网站排名推广北京建网站软件
  • 酷炫网站欣赏网络推广工作是做什么的
  • 论学院网站建设项目的进度管理搜索引擎优化面对哪些困境
  • 哪几个网站做acm题目比较好国外活动策划网站
  • 织梦 网站公告有一个网站专门做民宿
  • 微信属于营销型网站关于网站开发的
  • 网络专业的网站建设价格低做网站dw
  • 成品网站w灬源码1688永久网站网站后台上传的照片模糊