打印
[uCOS/RTOS]

关于程序在内存中运行的理解。

[复制链接]
1052|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我想我笑|  楼主 | 2016-8-9 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       本人近期想学ARM Linux,买了开发板后发现真的很有难度,由于大学是自动化专业没有学习过操作系统的相关知识,决定先从UCOS入手,理解一下操作系统基本原理。今天突然在书上看到了操作系统的服务有把用户数据和应用程序装入内存中运行。这句话自己之前从来没有思考过,一直觉得是理所当然正确的,但是又有点想不通,所以在此说一下我的理解,劳烦大家看看我理解的对不对。
      首先从8086裸机程序说起,对于8086系统,配置上基本的ROM程序就可以运行,我们一般将程序存放在ROM中,程序运行时,CPU中的控制器把程序读入到指令队列中,执行器从指令队列中取指令,这里即使没有用RAM(也就是内存),程序也能正常执行。对于stm32单片机的裸机程序运行应该也是类似,只不过对于RAM的应用应该是编译器讲局部变量的地址分配在RAM中。所以说来,对于裸机来说,程序的运行并不会装入到内存中去,对么?
      程序在内存中运行应该是操作系统的功能,以ucos为例,当任务就绪时,操作系统通过函数指针,将函数及所用数据调入内存中去,然后再运行。是这样吧?另外函数名应该就是函数代码所在位置的首地址,对么?
      

相关帖子

沙发
JasonWangSE| | 2016-8-11 08:38 | 只看该作者
只要对应的器件具备运行代码的能力,程序在哪里跑都是可以的,和裸机、用不用操作系统没什么关系。
操作系统也可以在ROM中跑;只有RAM的系统,只要有其他系统将其要运行的镜像放到RAM中,跑裸机程序也是没有问题的

使用特权

评论回复
板凳
soulmist| | 2016-8-11 08:48 | 只看该作者
不说STM32这种高级的单片机,就连普通的51单片机都有RAM。程序运行都需要RAM的,去看看51或者32的内存映射就知道了,一部是特殊功能寄存器另外一部分就是用户使用的R0-R7运行RAM了(针对51来说)。跑操作系统的关键是这个单片机是否有没有MMU(虚拟能存管理单元),这样是因为操作系统提供的内存空间有可能大于实际的物理内存空间 所以需要做一个内存映射。楼主多看看基础的51的datasheet或者是相关C语言知识就能大概明白这些了。

使用特权

评论回复
地板
xinzha| | 2016-8-11 16:52 | 只看该作者
理论上来讲,没有RAM是可以工作的,但是这样没有RAM的系统就没有了弹性,不能接受输入,只能输出预先确定好的输出,没有buffer,没有复杂算法,并且相同大小的直接可读写ROM比RAM可是贵得多,既然能带来这么多好处还便宜,为啥不用RAM呢,所以目前的系统设计中,都会默认RAM是不可缺少的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

18

帖子

0

粉丝