久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1992|回復: 9
收起左側

關于keil5編譯idata數據出錯問題

[復制鏈接]
ID:1079982 發表于 2023-5-26 10:38 | 顯示全部樓層 |閱讀模式
這是為什么啊,我使用的是stc89c52rc,ram明明512,我也使用了idata將數據存放在高128地址位置,為什么顯示data還是超了

51hei截圖20230526103829.png
回復

使用道具 舉報

ID:1079982 發表于 2023-5-26 12:58 | 顯示全部樓層
已解決,我子函數內置了一些數組,導致子函數的數組搶占了data所以空間溢出
回復

使用道具 舉報

ID:123289 發表于 2023-5-26 13:59 | 顯示全部樓層
你確定直接可訪問RAM是512個字節?哪么指令中要用幾位表達訪問它的地址呢?
回復

使用道具 舉報

ID:1079982 發表于 2023-5-26 15:04 | 顯示全部樓層
yzwzfyz 發表于 2023-5-26 13:59
你確定直接可訪問RAM是512個字節?哪么指令中要用幾位表達訪問它的地址呢?

主要問題是我子函數的數組溢出,idata可以將數據存放在高位。
回復

使用道具 舉報

ID:752974 發表于 2023-5-26 16:20 | 顯示全部樓層
樓主沒有明白板凳的意思,idata部分是128byte。
回復

使用道具 舉報

ID:883242 發表于 2023-5-26 19:17 | 顯示全部樓層
munuc_w 發表于 2023-5-26 16:20
樓主沒有明白板凳的意思,idata部分是128byte。

錯,idata可以訪問RAM的全部256byte空間,只是高128byte只能用idata來訪問,高128byte的data空間是SFR,不能當成RAM來用。
回復

使用道具 舉報

ID:624769 發表于 2023-5-27 14:16 來自觸屏版 | 顯示全部樓層
Hephaestus 發表于 2023-5-26 19:17
錯,idata可以訪問RAM的全部256byte空間,只是高128byte只能用idata來訪問,高128byte的data空間是SFR, ...

人家都是錯的,你都是對的。
SFR用的是高位data空間么?只是借用了直接訪問方式的地址而已!
回復

使用道具 舉報

ID:883242 發表于 2023-5-27 14:48 | 顯示全部樓層
188610329 發表于 2023-5-27 14:16
人家都是錯的,你都是對的。
SFR用的是高位data空間么?只是借用了直接訪問方式的地址而已!

c51的基本語法你去查幫助文件。data空間就是直接訪問,idata空間是R0/R1/SP間接尋址。
回復

使用道具 舉報

ID:123289 發表于 2023-5-27 17:13 | 顯示全部樓層
本帖最后由 yzwzfyz 于 2023-5-29 08:19 編輯

1、51系列的RAM分外部分和內部。
外部的用16位地址訪問,訪問空間是65536,就叫X-RAM吧。對于8位機來說,相應的操作指令至少3個字節(命令碼、地址低、地址高),取指至少分3次。這樣速度稍慢。
2、51設立了一個內部的可直接快速訪問RAM,只用8位地址,就叫I-RAM吧,所以尋址空間只能有256個,訪問內部RAM的指令只要兩個字節(命令碼、地址),這樣速度快。
3、單片機需要用到許多寄存器(A,B,SP,……),由于寄存器本身的性質也是RAM,只不過利用率高一些,所以就從內部的256RAM中,切出了一部分,也就是高128個字節,用于給這些特殊寄存器安家,就叫S-RAM吧。
4、這種借用內部RAM的方式,不僅僅發生在高128字節,其中00-07,08-0F,10-17,18-1F,也被借去來表示R0-R7,且可以有四種切換方式。(由PSW切換)
5、這種借用的好處是,不必另制寄存器了,但占用了用戶的資源。為了補上高128字節的空間,后期的51,又增加了128個字節的內部RAM(8052及之后的產品),來填補被特殊寄存器占用的地方。
這就發生了一個矛盾:當訪問高128字節地址時(80-8F)時,究竟是訪問補充的用戶RAM呢,還是特殊寄存器呢?
51想了一個招:用直接訪問指令與間接訪問指令來區分。在選擇上,考慮到特殊寄存器使用頻率高,就把直接訪問指令用于訪問特殊寄存器了。
所以:用戶在使用RAM時,就出現了高128字節要用間接指令訪問!而低128字節間接、直接都可以。
對于用匯編編程的要注意這個,對于用C編程,由編譯平臺來控制,但程序員必須將變量的存儲位置(方式)做個定義,以便編譯平臺作區分。
6、當你對特殊寄存器非常了解時,也可以將它當作普通RAM看待使用。這里強調非常了解!!用C寫程序的人,不要這樣做,風險太大。
7、51與其它類型的單片機比,最靈活的就是有位尋址!同理,8位機的指令,可以訪問256個位。51對這256個位做了安排。當然是在256+128個字節的內部RAM中選出256個位了。
選出的256個位是:
7.1、80-8F特殊寄存器中,能被8整除的地址(只有16個字節,共計128位)。如P0=80H中的各個位。而PCON=87H是不可以位尋址的。現在知道為什么特殊寄存器中有的位,是不可以定義成BIT的了吧,就是那些不能被8整除的地址寄存器。
在位地址對應上:用128~256對應80H.0[P0.0],80H.1[P0.1],80H.2[P0.2],……88H.x[TCON.x]……90H.x[P1.x]……F8H.7[STC有利用,基本51未用]。
7.2、20-2F這16個字節,計128位。在位地址對應上:用0~127對應20H.0~2FH.7。
8、在用匯編編程時,常用一個指令修改8個位,這是常用的技巧。
9、STC在51系列的發展上下了很大功夫,STC對51做了重大改進:
9.1、在80-FFH空間上,將基本51未用到的利用了起來,在其中增插了許多特殊寄存器,如雙DPTR中的第二個DPTR,PWM……,如何定義的,請看STC的手冊,長長見識。
9.2、當80-FFH空間被STC用滿后,又將XRAM中的一部分用來做特殊寄存器,如PWM-N,乘法器,除法器……如何定義的,需要看STC的手冊,去長知識。
9.3、對取指方案作了改進,加入了隊列取指方案,使得原來需要12個機器周期取一條令指方案,提升到1-6個周期。但STC可以選擇保留了原方案,且設置為默認。這就是有STC系列,有1T/12T選擇的原因。
……
回復

使用道具 舉報

ID:1079982 發表于 2023-6-3 15:08 | 顯示全部樓層
yzwzfyz 發表于 2023-5-27 17:13
1、51系列的RAM分外部分和內部。
外部的用16位地址訪問,訪問空間是65536,就叫X-RAM吧。對于8位機來說, ...

講的很詳細,謝謝佬
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕精品一区二区三区精品 | 特级毛片www | 精品国产欧美一区二区三区成人 | a在线视频| av一区在线观看 | 久久久久久精 | 美国av片在线观看 | 精品欧美乱码久久久久久1区2区 | 超碰一区二区 | 91精品国产91久久久久久密臀 | 国产最新视频在线 | 香蕉婷婷| 伊色综合久久之综合久久 | 欧美激情综合五月色丁香小说 | 国外成人在线视频 | 久久高清 | 欧美成人二区 | 欧洲高清转码区一二区 | 国产精品欧美精品 | 午夜丰满少妇一级毛片 | 羞视频在线观看 | 国产区在线视频 | 狠狠插天天干 | 国产精品成人一区二区三区 | 成人欧美一区二区三区黑人孕妇 | 日韩综合色| 欧美v在线 | 国产精品免费观看 | 亚洲一区视频在线播放 | 精品国产乱码一区二区三区 | 色婷婷综合网站 | 精品在线一区 | 色婷婷av久久久久久久 | 成人免费精品视频 | 九九久久这里只有精品 | 91精品久久久 | 成人国产精品久久 | 一区二区久久 | 精品视频一区二区三区在线观看 | 欧美综合在线视频 | 一区二区三区在线播放 |