一种裸机多核AMP固件分配共享内存的方法与流程

文档序号:28445987发布日期:2022-01-12 03:21阅读:292来源:国知局
一种裸机多核AMP固件分配共享内存的方法与流程
一种裸机多核amp固件分配共享内存的方法
技术领域
1.本发明涉及内存领域,具体是一种裸机多核amp固件分配共享内存的方法。


背景技术:

2.在多核amp裸机固件中,通常定义共享内存的方法是使用绝对地址来进行地址分配,这样需要手动计算每个共享变量的大小,保证各个共享变量地址相互不重叠,在需要修改,增加,删除某个变量的时候,通常需要修改其地址后共享变量的地址,稍有不慎就会出现地址重叠,导致固件运行异常的问题。


技术实现要素:

3.针对现有的缺陷,本发明提供一种裸机多核amp固件分配共享内存的方法,由编译器自动分配共享变量的地址,无需手动计算每个共享变量的地址和大小,增加,删除,修改共享变量无需修改该变量地址前后的其他共享变量。
4.为了解决所述技术问题,本发明采用的技术方案是:一种裸机多核amp固件分配共享内存的方法,本方法将不同核的共享变量定义在相同的源文件中,并使用相同的编译选项和相同的链接脚本段来编译,从而实现编译出的各个核的共享变量的地址相同。
5.进一步的,本方法的实施步骤为:s01)、编写共享内存分配源文件,在该文件中定义共享变量结构,并为该文件中的每个变量都加入保留变量选项__attribute__((used)),保证不会因为未使用而被编译器优化掉;s02)、修改每个核的链接脚本文件,为共享内存分配源文件分配一个单独的段,保证这个段在每个核中的起始地址和大小都相同;s03)、每个核编译的时候都编译共享内存分配源文件,将编译出的对象文件文件链接到每个核的可执行文件中。
6.进一步的,步骤s01)执行完以后,如果对共享变量的起始位置有对齐要求,加入对齐附加属性选项__attribute__((aligned (n)),其中n为需要对齐的字节数。
7.进一步的,执行完步骤s03)之后,执行步骤s04):查看各个核编译出的可执行文件的反汇编,确认共享内存分配源文件中各个共享变量的绝对地址是否相同。
8.本发明的有益效果:本发明提供一种裸机多核amp固件分配共享内存的方法,由编译器自动分配共享变量的地址,无需手动计算每个共享变量的地址和大小,增加,删除,修改共享变量无需修改该变量地址前后的其他共享变量。使用该发明可以简化多核amp固件中共享内存的定义方法,使得代码可读性提高,有效避免因人工地址分配失误而造成的错误,可以提高开固件发效率。
附图说明
9.图1为本方法使用于双核amp裸机的示意图。
具体实施方式
10.下面结合附图和具体实施例对本发明作进一步的说明。
11.实施例1当多核amp系统中,对于不同的mcu使用的是同一个编译器和链接器的时候,同样的源文件,并且源文件所在的段相同,编译选项配置也相同的情况下,在不同的mcu核中编译出来的变量地址也是相同的,我们利用这个特点将不同核的共享变量定义在相同的.c中,并使用相同的编译选项和相同的链接脚本段来编译,从而实现编译出的各个核的共享变量的地址相同,使用这种方法可以替代传统使用绝对地址进行共享内存分配的方法。
12.本实施例以双核amp裸机固件为例,说明共享内存分配的方法,具体包括以下步骤:1.编写共享内存分配源文件,如share_mem.c,在该文件中定义共享变量结构,并为该文件中的每个变量都加入保留变量选项__attribute__((used),保证不会因为未使用而被编译器优化掉;2.如果对共享变量的起始位置有对齐要求,可加入对齐附加属性选项__attribute__((aligned (n)),其中n为需要对齐的字节数;3.修改每个核的链接脚本文件,为share_mem.c分配一个单独的段,保证这个段在每个核中的起始地址和大小都相同;4.每个核编译的时候都编译share_mem.c,并将编译出的对象文件share_mem.o文件链接到每个核的可执行文件中;5.查看各个核编译出的可执行文件的反汇编,确认share_mem.c中各个共享变量的绝对地址是否相同,如果相同,则分配共享内存成功,如果不相同,则检查上述步骤是否有错误,重新执行。
13.以上描述的仅是本发明的基本原理和优先实施例,本领域技术人员根据本发明做出的改进和替换,属于本发明的保护范围。


技术特征:
1.一种裸机多核amp固件分配共享内存的方法,其特征在于:本方法将不同核的共享变量定义在相同的源文件中,并使用相同的编译选项和相同的链接脚本段来编译,从而实现编译出的各个核的共享变量的地址相同。2.根据权利要求1所述的裸机多核amp固件分配共享内存的方法,其特征在于:本方法的实施步骤为:s01)、编写共享内存分配源文件,在该文件中定义共享变量结构,并为该文件中的每个变量都加入保留变量选项__attribute__((used)),保证不会因为未使用而被编译器优化掉;s02)、修改每个核的链接脚本文件,为共享内存分配源文件分配一个单独的段,保证这个段在每个核中的起始地址和大小都相同;s03)、每个核编译的时候都编译共享内存分配源文件,将编译出的对象文件链接到每个核的可执行文件中。3.根据权利要求2所述的裸机多核amp固件分配共享内存的方法,其特征在于:步骤s01)执行完以后,如果对共享变量的起始位置有对齐要求,加入对齐附加属性选项__attribute__((aligned (n)),其中n为需要对齐的字节数。4.根据权利要求2所述的裸机多核amp固件分配共享内存的方法,其特征在于:执行完步骤s03)之后,执行步骤s04):查看各个核编译出的可执行文件的反汇编,确认共享内存分配源文件中各个共享变量的绝对地址是否相同。

技术总结
本方法涉及内存领域,具体是一种裸机多核AMP固件分配共享内存的方法,本方法将不同核的共享变量定义在相同的源文件中,并使用相同的编译选项和相同的链接脚本段来编译,从而实现编译出的各个核的共享变量的地址相同。本方法由编译器自动分配共享变量的地址,无需手动计算每个共享变量的地址和大小,增加,删除,修改共享变量无需修改该变量地址前后的其他共享变量。使用该发明可以简化多核AMP固件中共享内存的定义方法,使得代码可读性提高,有效避免因人工地址分配失误而造成的错误,可以提高开固件发效率。高开固件发效率。高开固件发效率。


技术研发人员:粟汝发 王璞
受保护的技术使用者:山东华芯半导体有限公司
技术研发日:2021.10.18
技术公布日:2022/1/11
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1