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

做公司月刊网站赤峰做网站的

做公司月刊网站,赤峰做网站的,做数据的网站有哪些内容,济宁市环保局建设项目审批网站本文介绍MCU平台下确定栈空间大小的方法。 通常使用IDE开发MCU程序在生成Image文件时,Image文件被划分为代码区,数据区,BSS区,堆区,栈区。其中,代码区,数据区,BSS区空间大小由编译器…

本文介绍MCU平台下确定栈空间大小的方法。

通常使用IDE开发MCU程序在生成Image文件时,Image文件被划分为代码区,数据区,BSS区,堆区,栈区。其中,代码区,数据区,BSS区空间大小由编译器最终决定,对于MCU,堆区一般设置为0,唯一不好确定的就是栈区空间的大小了。栈空间大小由非常关键,弄不好会导致栈溢出,后果非常严重。本文基于实测的方式,确定栈区空间的大小。

1.基本概念

栈空间分为静态栈空间和动态栈空间。

1)静态栈空间

静态栈空间大小一般可由编译器分析函数调用关系及调用深度来确定,顾名思义,它只能分析固定的函数调用关系,而我们的MCU程序运行过程中可能会有中断,造成函数的调用关系及深度是无法预料的,如果仅按静态栈大小来设置栈空间大小,很有可能是不够的。查看静态栈空间大小有助于我们确定最小的栈空间大小。

如Keil中可以在Link中增加“--callgraph”来生成静态调用图,其中也包括栈的使用,也可以用“--info=stack”或“--info=summarystack”列出所有全局符号的栈的使用情况。

2)动态栈空间

动态栈空间大小就是我们的程序在运行过程中(包含中断)的栈空间大小。实际使用的栈空间大小是动态变化的(随中断及函数调用而变化),确定栈空间的大小就是要确定动态栈空间最大能有多大,再预留一定的裕量,就是我们在编写程序时需要设置的栈空间大小。也是本文后续要介绍的。

2.方法&步骤

1)预先分配一个足够大的栈空间大小,这个空间在确定栈空间大小后会修改。这个在Keil中通过“startup.s”文件进行设置,在gcc编译器中可通过“.ld”文件确定。同时我们也知道栈顶的位置(通常在RAM空间的最后)。

2)编写一小段程序初始化这段栈空间大小为一个确定的数字,如“0xDEADDEAD”。代码如下:

InitStack(0x20003ffb, 0x400);void InitStack(uint32_t Address, uint32_t nLength)
{while ((int32_t)nLength > 0){*(volatile uint32_t *)Address = 0xDEADDEAD;Address -= 4;nLength -= 4;}
}

3)运行我们的程序,我们可以进行一系列的测试,包括外部中断及各种输入以确保程序执行中函数调用关系处于最深的情况。

4)当程序执行完毕后,我们检查2)中特定数值被修改的位置,这个位置和栈顶的偏移就是我们实际需要的栈空间大小。如我们使用JLink-Commander的“Mem32”指令可在程序运行过程中读取指定地址及长度的数据。指令如下(连接过程略):

Mem32 20003ffb  0x100

5)获得栈空间大小后,为了以防万一(步骤3)测试不充分),可以再保留一定的裕量(如50%),将此值作为最终的栈空间大小的设定值。

总结,本文介绍了MCU平台下确定栈空间大小的方法。

http://www.yayakq.cn/news/999737/

相关文章:

  • 满分作文网站小程序问答库
  • 免费婚恋网站设计wordpress网站反应慢
  • 外贸公司英文网站怎么做行业网站营销特点
  • asp.net旅游网站开发文档天河岗顶棠下上社网站建设设计
  • 平台和网站有什么区别天河做网站哪家强
  • 重庆网站建设莉公共建设工程中心网站
  • 网络设计网站建设类网站模板安徽网页设计培训
  • 体育设施建设发布有没有网站wordpress品牌分类
  • 爱站网综合查询百度竞价品牌广告
  • 做网站需要域名跟服务器吗钛钢饰品网站建设
  • 优是是什么网站wordpress 下载失败
  • 国外网站dns在线解析旅游网站的设计思路
  • 韩国明星都在那个网站做直播怎么做百度里面自己的网站
  • 云开发网站google 浏览器
  • 您提供的产品已经提交过网站备案wordpress怎么添加标签页
  • 重庆网站建设费用网络服务器可提供的常见服务有什么、什么、什么和什么服务
  • 做外贸网站报价企业邮箱手机怎么登录
  • 上海建设厅焊工证查询网站徐州做网站哪家好
  • 网站开发培训费自己做网站用php最快么
  • asp.net网站和空网站有什么区别珠海市工程造价信息网
  • 做论坛网站凡客沙发是几线品牌
  • 网站后台发布图片upload failediis网站服务器 建立出现问题
  • thinkphp 网站源码营销点子
  • 一起做网商网站怎么样nginx wordpress多个站点
  • 网站设置右击不了如何查看源代码58同城旧房翻新
  • 网站开发公司会计企业内部网站模板
  • 网站建设要用H5吗wordpress表情不显示
  • 定制型网站制作装修设计公司图片
  • 免费企业网站如何建设网站栅格布局
  • 网站开发工具.枫子科技长沙百姓网招聘信息