为何单片机上的程序不怎么使用malloc,PC上经常使用?_银河国际网站器件银河国际官网网 - 银河国际官网
大比特商务网 |资讯中心 |技术论坛 |解决方案 登录 注册 |数字刊 |招聘/求职
您的位置: 银河国际网站器件银河国际官网网 >>行业要闻 >> 行业新闻 >> 为何单片机上的程序不怎么使用malloc,PC上经常使用?

为何单片机上的程序不怎么使用malloc,PC上经常使用?

2018-05-16 12:00:54 来源:21ic电子网

【大比特导读】从单片机上知道,在上电的那一刻,MCU的程序指针会被初始化为上电复位时的地址,从那个地址处读取将要执行的指令,由此程序在MCU上开始执行。

单片机上知道,在上电的那一刻,MCU的程序指针会被初始化为上电复位时的地址,从那个地址处读取将要执行的指令,由此程序在MCU上开始执行(当然在调用程序的main之前,还有一系列其他的初始化要做,如堆栈的初始化,不过这些我们很少会去修改)。PC在上电时,和MCU差不多,不过读取的是BIOS,有它完成了很多初始化操作,最后,调用系统的初始化函数,将控制权交给了操作系统,于是我们看到了Windows,Linux系统启动了。

如果将操作系统看作是在处理器上跑的一个很大的裸机程序(就是直接在硬件上跑的程序,因为操作系统就是直接跑在CPU上的,这样看待是可以的,不过这个裸机程序功能很多很强大),那么操作系统的启动很像MCU程序的启动。前者有一个很大的初始化程序完成很复杂的初始化,后者有一段不长的汇编代码完成一些简单的初始化。这一点看,它们在流程上是很相似的。

为何单片机上的程序不怎么使用malloc,PC上经常使用?

如果是系统上的程序启动呢?它们是由系统来决定的。Linux上在shell下输入./p后,首先检查是否是一个内建的shell命令;如果不是,则shell假设它是一个可执行文件(Linux上一般是elf格式),然后调用一些相关的函数,将在硬盘上的p文件的内容拷贝到内存(DDR RAM)中,并建立一个它的运行环境(当然这里边还有内存映射、虚拟内存、连接与加载等一些其它东西),准备执行。

由以上可知,单片机上的程序和平时在系统上运行的程序,在启动时差异是很大的(如果将程序调用main以前的动作,都抽象为初始化的话,程序的启动可以简化为:建立运行环境+调用main函数,这样程序的执行差异是不大的)。因为单片机上跑的程序(裸机程序)是和操作系统一样跑在硬件上的,它们属于一个层次的。过去之所以没有区分出单片机上的程序和PC机上的程序的一些差异,就是没有弄明白这一点。

由此,以前的一些疑惑也就解开了。为什么在单片机上的程序不怎么使用malloc,而PC上经常使用?因为单片机上没有已经写好的内存管理算法的代码,而在PC上操作系统里运行的程序,libc已经把这些都做了,只需要调用就可以了。如果在单片机上想用动态内存,也可以,但是这些代码要自己去实现,并定义一个相应的malloc,有时候一些公司会给提供一些库函数可能会实现malloc,但是因为单片机上RAM内存十分有限,如果不知道它的运行方式,估计会很危险。同样,因为在PC的系统上运行的程序与裸机程序不同,裸机程序不会有动态链接,有的只是静态链接。

关于程序在执行时,从哪里读取指令,哪里读取数据,也曾因为没有弄清楚系统上的程序和裸机程序之间的区别,而疑惑了很久。虽然在《微型计算机原理》课上知道程序运行时,从内存中读取指令和数据进行执行和回写。但是单片机上只有几K的RAM,而Flash一般有几十K甚至1M,这个时候指令和数据都在内存中吗?(这里指的内存仅指RAM,因为PC上我们常说的内存就是DDR RAM memory,先入为主以至于认为单片机上也是这样,还没有明白其实RAM和Flash都是内存)?这不可能,因为课上老师只说内存,但是PC上内存一般就是DDR RAM,不会是硬盘,硬盘是保存数据的地方;由此类比时,自己把自己弄晕了,单片机的RAM对应于DDR RAM,那Flash是不是就对应于硬盘了呢?在CSAPP上明白了,PC上之所以都在DDR RAM上,是速度的因素。硬盘的速度太慢,即使是即将到来的SSD比起DDRRAM,还是差着几个数量级,所以拷贝到DDRRAM中。这时,一个程序的代码和数据是连续存放的,其中代码段是只读区域,数据段是可读写区域(这是由操作系统的内存管理机制决定的)。运行时,再将它们拷贝到速度更快的SRAM中,以得到更快的执行速度。

  • 赞一个(
    0
    )
  • 踩一下(
    0
    )
分享到:
阅读延展
单片机 内存
  • 数字手写板采用Nordic蓝牙方案 笔记和草图低延时传输到智能手机

    数字手写板采用Nordic蓝牙方案 笔记和草图低延时传输到智能手机

    Nordic的nRF52832多协议SoC器件集成了一个64MHz、32位Arm® Cortex™ M4F处理器与2.4GHz多协议射频组件(支持蓝牙5、ANT™和私有2.4GHz RF软件),具有-96dB接收灵敏度,以及512kB Flash内存和64kB RAM。

  • 中国三大存储公司将量产内存、闪存:2019年开始

    中国三大存储公司将量产内存、闪存:2019年开始

    对于关注国产内存、闪存的用户来说,从明年开始将会有实质性的成果,因为长江存储、晋华集成电路以及合肥Innotro存储都将量产。

  • 存储芯片为什么这么重要?大国崛起还得靠它

    存储芯片为什么这么重要?大国崛起还得靠它

    国内的内存芯片厂商取得了一些成绩,但我们得清醒地认识到,在核心技术、市场份额、人才储备等方面,差距仍然很大。很多国外厂商以知识产权等方式压制国内厂商,这更要求企业拥有自己的核心技术。

  • 尺寸最小 功耗最低的X86嵌入式主板

    尺寸最小 功耗最低的X86嵌入式主板

    研华科技在近期推出了MI/O Extension系列最新嵌入式单板电脑MIO-2261。该主板搭载了Intel最新超低功耗Atom™ N2600/N2800双核处理器和NM10芯片组,最大能够支持4 GB DDR3 内存。在完全负荷时,功耗仅为8 ~ 9.6 W。

  • 拥有第八代处理器!全新MacBook Pro笔记本电脑正式发布

    拥有第八代处理器!全新MacBook Pro笔记本电脑正式发布

    最大的提升莫过于升级了第八代处理器,全新的 13 英寸 MacBook Pro 标配了 2.3GHz Core i5 四核心处理器,Intel Iris Plus Graphics 655(有 128MB 嵌入式 DRAM),8GB 2133MHz DDR3 内存,屏幕支持了原彩显示技术,既 True Tone,跟 iPhone 上的一样。

  • 三星被曝抑制内存产能以防内存降价,银河国际网站设备厂商遭殃

    三星被曝抑制内存产能以防内存降价,银河国际网站设备厂商遭殃

    DRAM内存及NAND闪存两大存储芯片去年的产值超过了1320亿美元,占了全球银河国际网站芯片市场的三分之一,相比2016年的800多亿美元暴涨了65%,主要原因就是持续近两年的涨价所致,如今NAND闪存的价格已经由涨转跌,但是DRAM内存价格一直居高不下,这其中不是单纯的市场因素,三星作为全球最大的DRAM供应商被爆减产以控制

微信

第一时间获取电子制造行业新鲜资讯和深度商业分析,请在微信公众账号中搜索“大比特商务网”或者“big-bit”,或用手机扫描左方二维码,即可获得大比特每日精华内容推送和最优搜索体验,并参与活动!

发表评论

  • 最新评论
Copyright Big-Bit © 1999-2016 All Right Reserved 大比特资讯公司 版权所有      未经本网站书面特别授权,请勿转载或建立影像,违者依法追究相关法律责任