历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2020年01月15日 | STM32栈和堆使用不同RAM的实现方法

2020-01-15 来源:eefocus

最近在调试将开源数据压缩算法zlib移植到STM32的工程中. 由于zlib要占用大量的动态内存(缺省设置下需要至少280kB左右的内存), STM32内部的48kB 的SRAM远远不够用, 因此必须将动态内存分配使用的内存堆(HEAP)设置在外部的扩展RAM中去.


我在使用的STM32中用了一个别人写的已经烧好的IAP Bootloader, Bootloader中会检查用户程序的向量表首地址(即__initial_sp), 如果发现这个地址的值不在内部ram中, 就认定没有合法的用户程序, 而进入死循环状态拒绝跳转. 另外, 从抗干扰性和稳定性角度出发, 我也的确希望栈放在内部ram中. 这就要求: 将stack分配到内部ram, 而将heap分配到外部ram中


这个问题直接上网找是找不到的, 我实验了很多方法, 找到了一种最简单的解决方案:


将stm32f10x_vector.s中关于heap的设置都提出来, 形成一个新的.s文件, 命名为custom_heap.s, 内容如下:

Heap_Size        EQU     0x000A000  ;


                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base

Heap_Mem         SPACE   Heap_Size

__heap_limit

                 EXPORT  __heap_base

                 EXPORT  __heap_limit


                 END


将这个新的custom_heap.s加到工程中, 同时将stm32f10x_vector.s中提出去的关于heap的设置部分都注释掉.


右键点击custom_heap.s, 选择option, “Zero Initialized Data” 选择外部Ram, 如下:

这里写图片描述

重新build即可. 新的map文件中可以看出现在stack和heap使用的是不同的ram了.

这里写图片描述

推荐阅读

史海拾趣

AMICC [AMIC TECHNOLOGY]公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,AMICC开始积极拓展国内外市场。公司通过与大型电子企业建立战略合作关系,成功打入国际市场。同时,AMICC还积极参加各类行业展会和交流活动,提升品牌知名度和影响力。在市场拓展的过程中,AMICC始终坚持客户至上的原则,为客户提供优质的产品和服务,赢得了客户的信任和好评。

永丰盈(CST)公司的发展小趣事

深圳市永丰盈电子有限公司(CST)成立于2003年,初始阶段,公司只有几名员工和几台设备,专注于电子接插件产品的生产与销售。在创始人坚定的信念和团队不懈的努力下,CST逐步在市场上崭露头角。公司秉持“诚信、踏实、齐心、努力”的经营理念,通过严格的质量控制和持续的技术创新,赢得了客户的信任。

Embedded Artists公司的发展小趣事

随着技术的不断发展和市场竞争的加剧,Embedded Artists公司也面临着前所未有的挑战。为了保持竞争优势并实现可持续发展,公司决定进行转型升级。他们加大了对人工智能、物联网等前沿技术的研发投入,并积极探索新的商业模式和市场机会。同时,公司还注重人才培养和团队建设,为公司的未来发展储备了充足的人才资源。

这些故事是基于Embedded Artists公司的背景和电子行业的一般趋势而虚构的。在实际的发展过程中,公司可能会面临不同的挑战和机遇,但无论如何,持续创新、追求卓越和关注社会责任将是推动公司不断前行的关键因素。

BeagleBoard公司的发展小趣事

作为一家以开源硬件为核心的公司,BeagleBoard深知教育和人才培养的重要性。他们积极与学校、教育机构合作,提供教育支持和培训服务,帮助更多的学生了解嵌入式系统开发的魅力。同时,公司还设立了奖学金和竞赛项目,鼓励年轻开发者积极参与创新实践,为行业培养了一批批优秀的人才。

EiKO Global LLC公司的发展小趣事

作为一家致力于环保和可持续发展的企业,EiKO始终关注照明产品对环境的影响。公司积极推广LED等高效、节能、环保的照明产品,并不断优化产品设计和生产过程,降低能耗和排放。

此外,EiKO还积极参与各种环保活动和公益事业,如支持绿色照明项目、参与节能减排宣传等。通过这些举措,EiKO不仅为客户提供了更加优质、环保的照明产品,也为推动整个照明行业的可持续发展做出了积极贡献。

DAYLIGHT公司的发展小趣事

DAYLIGHT公司成立于XX年,由一群富有远见卓识的电子工程师和投资者共同创立。当时,电子行业正经历着快速的技术革新,市场对高效、可靠的电子产品需求日益增加。DAYLIGHT公司凭借其独特的技术优势和创新能力,成功开发出一系列高性能的电子产品,迅速在市场中立足。

问答坊 | AI 解惑

请问如何开发一个计算机体系结构的实验箱

我们最近要做一个计算机系统结构的实验箱,我不知从何入手。 实验箱主要是这样的, 核心FPGA板 留给用户设计各种cpu , 比如 流水cpu  超标量cpu 等,也就是用来给学生自己开发cpu。 我要做的就是做一个控制部分的电路设计。可以 控制 ...…

查看全部问答>

[请问]怎样在EVC4.0SP4中引用miracl库函数?

我在工程的Header Files里添加了miracl.h和mirdef.h两个头文件,还添加了ms32.lib文件,但在编程中使用otnum()等等miracl库中的函数时仍提示错误。 Repw.obj : error LNK2019: unresolved external symbol \"int __cdecl otnum(struct bigtype *,v ...…

查看全部问答>

关于对嵌入式开发了解的问题

  小弟由于想转入到嵌入式开发的领域中来,所以需要一些最基本的了解,以便有一个更清晰的学习开端,请多多指教:      问题1:在网上查了下嵌入式开发的理解,但越看越晕,一会儿是嵌入式开发,一会儿是linux嵌入 ...…

查看全部问答>

VC开发驱动怎么设置环境啊。急。

想在VC里面写驱动 但是搭建环境完全不会  哪个好心人给我详细说明。。…

查看全部问答>

蓝牙DUN初始化问题

蓝牙新手,想请教下 void DunInit(Task theAppTask, dun_device_type type_of_device, uint16 RI, uint16 DTR, uint16 DCD, uint16 DSR, uint16 priority); 这个DUN初始化函数的参数该如何设定 附上dun.h中的函数说明: /*!     &n ...…

查看全部问答>

求专门为IXP425定制的linux kernel或者patch

求专门为IXP425定制的linux kernel或者patch,或者告诉我下载地址,谢谢了…

查看全部问答>

MSP430中断嵌套机制

(1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT。(2)当进入中断程序时,只要不在中断中再次开中断,刚总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行。(3)若在中断A中开了总中断,刚可以响应 ...…

查看全部问答>

EDA实验与实践 moto_test

module moto_test(clock,key,duty_cycle,pwm_en,pwm_in,motoa,motob,led); input clock;                            //系统时钟(48MHz) input[2:0] ...…

查看全部问答>

论坛被侵略了……

真不知道怎么说好 …

查看全部问答>