OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4824|回复: 10

有沒有大俠知道rom裡的code是怎麼搬到ram執行的...

[复制链接]

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2016-1-8 16:08:07 | 显示全部楼层 |阅读模式
10金钱
因為最近看到有8051的code 是在keli C中開發,但最後下載到SPI FLASH (怎麼開發跟下載的過程我不懂...)

把問題簡化成標題那樣..
要如何把function在run time換到內部ram上執行...
之前寫過TI的DSP有指令可以用...所以過程也都不懂...很好奇在其他芯片上是怎麼做的...

我試過直接從entry點的位址開始順序搬數據 隨便搬個20筆在強制轉換成function調用
然後程式就崩潰了...



最佳答案

查看完整内容[请看2#楼]

8051的代码没办法搬运到ram里面执行的。8051属于哈佛结构,指令和数据总线是分开寻址的,和8086的冯诺依曼结构不一样的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1863
金钱
1863
注册时间
2011-3-29
在线时间
139 小时
发表于 2016-1-8 16:08:08 来自手机 | 显示全部楼层
8051的代码没办法搬运到ram里面执行的。8051属于哈佛结构,指令和数据总线是分开寻址的,和8086的冯诺依曼结构不一样的。
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-1-8 16:23:11 | 显示全部楼层
或者,你可以找个ARM架构的CPU试试
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2016-1-8 16:30:23 | 显示全部楼层
本帖最后由 civic7366 于 2016-1-8 16:35 编辑

那我看它好像是因為rom code 的.bin已經64KB了 還是rom code因為某些原因不能改...所以才又有flash

我開flash的project出來看也是keil C的 裡面只差沒有main 其他都是C語言的變數 func等...

超好奇 它在下載在spi裡的code(也是.bin) 要怎麼在8051上執行...



2F大大的意思是 就算搬移也只能搬到rom的位址 因為指令取址空間就在那邊吧...

那好奇怪阿...8051也可以在run time 改寫rom嗎   

以前TI的也是抓官方的FlashAPI.lib出來調用才能在run time修改 過程都不懂...
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-1-8 17:19:16 | 显示全部楼层
本帖最后由 xuande 于 2016-1-8 17:21 编辑

1、51芯片自身只有FLASH,没有SPI FLASH,外接就随便了。
2、51速度比较慢,是直接从ROM里取指令进行译码;而DSP则要搬移到RAM区域运行。3、51不能用自身的程序修改自己,它的FLASH必须施加编程电压(好像是12v),它的启动过程也不具备自我修改的机制。所以不能实现IAP。
4、LZ认为SPI FLASH里面装的是“程序”吗?这理解不对。



回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2016-1-8 17:37:40 | 显示全部楼层
我剛忍不住去問了老鳥是跟我說

51內部還有放了一個program ram, SPI code可以在 run time搬過來 執行的時候會rom ram切來切去

所以應該就是我看到的這個51比正常的51還多了一個 program ram...


回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-1-8 19:55:28 | 显示全部楼层

什么型号?

回复

使用道具 举报

5

主题

163

帖子

0

精华

高级会员

Rank: 4

积分
615
金钱
615
注册时间
2011-11-7
在线时间
180 小时
发表于 2016-1-9 00:47:56 来自手机 | 显示全部楼层
有这种51单片机的。曾经见过,单片机内部的代码区是OTP的
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2016-1-11 09:26:17 | 显示全部楼层
非標準品的...只是我以前幾乎沒用過8051...
所以現在看著舊的專案檔+網路上查資料 查不到是怎麼做的
它內部的都是mask rom(64K) 所以才需要放一些code在外面...

只是我查到的資訊是只要指令有MOVC跟MOVX 8051就會短暫拉低/PSEN與/WR和/RD電平
所以讀外部或內部 是51會自動控制的 不需要coder切換
現在多了一個ram來儲存程序 不曉得是怎麼切換的...

切換的時候是跟我說 後面48K-64K可以切成ram
回复

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-1-6
在线时间
60 小时
发表于 2016-1-14 11:15:24 | 显示全部楼层
一般单片机自带的rom都是norflash,其好处是直接在rom中执行程序而不需要将其调入到ram。
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2016-1-14 13:43:59 | 显示全部楼层
本帖最后由 civic7366 于 2016-1-14 13:46 编辑

我看的這個專案很怪...是用keil開發成2個專案
一個rom.uvproj  一個flash.uvproj

A( )定義在rom裡面  他可以在flash裡調用A( )...
最後就是2個.bin 一個下載到mask rom 一個放在SPI Flash...

看來看去都不知道是怎麼link的...我看源碼看不出所以然...
有在L51_BANK.A51看到用戶自定BankSwitch( UBYTE ubBank)
偏偏2個專案都沒看到有調用的地方

老鳥又不太想理我...

原來8051也可以搞得這麼困難...
原先只有用過DSP F28335跟STM32F103
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 13:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表