datouyuan 發(fā)表于 2022-7-12 12:03
1.51的任何子程序都需要通過堆棧傳遞PC值,最少2字節(jié)。
2.51的中斷子程序通過堆棧傳遞PC、ACC、PSW ,最少 ...
Y_G_G 發(fā)表于 2022-7-12 12:26
8051是軟件堆棧,如果不是刻意去填滿它,堆;旧鲜遣粫袉栴}的
卡死的問題不一定是堆棧的問題,可能是中 ...
hb_lhw 發(fā)表于 2022-7-12 15:00
每次中斷,自動入棧一個PC寄存器,具體幾個字節(jié)我忘了,然后中斷返回的時候再自動出棧,樓主沒考慮這個,所 ...
datouyuan 發(fā)表于 2022-7-12 12:03
1.51的任何子程序都需要通過堆棧傳遞PC值,最少2字節(jié)。
2.51的中斷子程序通過堆棧傳遞PC、ACC、PSW ,最少 ...
Y_G_G 發(fā)表于 2022-7-12 12:26
8051是軟件堆棧,如果不是刻意去填滿它,堆;旧鲜遣粫袉栴}的
卡死的問題不一定是堆棧的問題,可能是中 ...
newlined 發(fā)表于 2022-7-12 14:28
謝謝您的回復,我明白了您的意思,您是說,中斷觸發(fā)間隔的時間短,而中斷本身執(zhí)行的時間長,結果就是CPU ...
Y_G_G 發(fā)表于 2022-7-12 16:56
大概就是這么個意思了
也就是說程序是在中斷之間來回跑的
主程序幾乎沒有執(zhí)行的時間
Y_G_G 發(fā)表于 2022-7-12 16:56
大概就是這么個意思了
也就是說程序是在中斷之間來回跑的
主程序幾乎沒有執(zhí)行的時間
188610329 發(fā)表于 2022-7-12 16:25
是不是堆棧大小的問題, 用KEIL 編譯后,仿真一下,看一下 SP_max 就知道了。有什么好算得?
我現(xiàn)在好奇 ...
newlined 發(fā)表于 2022-7-12 14:21
謝謝您的回復,我算的是最多需要20字節(jié),您算的最少需要20字節(jié)
我是這樣理解的同為高級的2個中斷B ...
考慮一個最復雜的情況,主程序在調用A3時,堆棧用了6個字節(jié),這時發(fā)生E中斷,E中斷在調用E3時,堆棧用了8個字節(jié),這是發(fā)生B中斷,在B中斷調用B2時,堆棧用了6個字節(jié),這樣堆棧最多用20個字節(jié)就可以了
newlined 發(fā)表于 2022-7-12 17:13
大約1小時前回復過,不知道回帖為什么沒有了。今天下午我拿示波器跟蹤了各個中斷的執(zhí)行時間,有2個是1毫 ...
188610329 發(fā)表于 2022-7-12 16:25
是不是堆棧大小的問題, 用KEIL 編譯后,仿真一下,看一下 SP_max 就知道了。有什么好算得?
我現(xiàn)在好奇 ...
newlined 發(fā)表于 2022-7-13 13:32
您好,以前的程序就是沒有對DPTR保護?戳四陌l(fā)言后,我看了下程序,里邊的確用了DPTR,不知道為什么程 ...
datouyuan 發(fā)表于 2022-7-12 17:35
C51中斷中使用函數(shù)是很不好的習慣。
你把中斷中的函數(shù)改成不是函數(shù),以代碼空間換時間和RAM。
應該能解決 ...
newlined 發(fā)表于 2022-7-13 13:47
您好,您這一說,我意識到一個問題,函數(shù)重入,這個程序編譯時曾經(jīng)出過這個警告,后來我把一個函數(shù)復制了 ...
一個函數(shù)復制了一份,另起了一個名字
datouyuan 發(fā)表于 2022-7-12 17:35
C51中斷中使用函數(shù)是很不好的習慣。
你把中斷中的函數(shù)改成不是函數(shù),以代碼空間換時間和RAM。
應該能解決 ...
newlined 發(fā)表于 2022-7-13 15:42
您說的對,開始我并沒有理解您的意思,剛才看中斷中的函數(shù),我想到,假設在中斷中,我使用了R0,然后調用 ...
好在我用R0都是用來訪問間接尋址的地址,隨用隨賦值
datouyuan 發(fā)表于 2022-7-13 15:52
當然可以。但這又會增加堆棧需求。
匯編代碼要自己考慮如何保護現(xiàn)場,恢復現(xiàn)場。
newlined 發(fā)表于 2022-7-13 16:11
您是說中斷自己不能恢復現(xiàn)場,需要人為的PUSH,POP來恢復現(xiàn)場?而函數(shù)調用,C51的編譯器可以調用函數(shù)時, ...
newlined 發(fā)表于 2022-7-13 16:11
您是說中斷自己不能恢復現(xiàn)場,需要人為的PUSH,POP來恢復現(xiàn)場?而函數(shù)調用,C51的編譯器可以調用函數(shù)時, ...
Y_G_G 發(fā)表于 2022-7-12 18:20
所謂"死機"和中斷無法跳出,這不過是推測而已,說不定可能就是其它的小問題而已
匯編是很容易出問題的
如 ...
Y_G_G 發(fā)表于 2022-7-12 18:20
所謂"死機"和中斷無法跳出,這不過是推測而已,說不定可能就是其它的小問題而已
匯編是很容易出問題的
如 ...
datouyuan 發(fā)表于 2022-7-13 17:12
只有PC值能自動恢復,其它值得恢復要靠軟件操作。
newlined 發(fā)表于 2022-7-14 08:39
您好,是這樣,程序是匯編的,擴展名是ASM,但是在KEIL C下編譯的,我注意到一個問題,在KEIL C下新建一個 ...
newlined 發(fā)表于 2022-7-14 09:57
剛才仿真了下,只看的R0,在中斷下,給它賦一個值,比如說5,然后調用一個函數(shù),在函數(shù)中對R0修改為8,函 ...
newlined 發(fā)表于 2022-7-14 08:26
您好,這個可能不方便貼出,隨說是20年的程序,但老板交代過。
經(jīng) 188610329大神提醒,我DPTR沒有保護造 ...
Y_G_G 發(fā)表于 2022-7-14 20:43
DPTR,R0,R1什么的,你在多個地方用到了,就進行保護,如果用不到就不用管
匯編子程序的原則是你在調用的時 ...
188610329 發(fā)表于 2022-7-14 21:07
R0~R7 屬于 通用寄存器, 是不能PUSH的。
如果是完全自己寫的代碼,配合USING 可以用 PUSH AR0~AR7 方式 ...
Hephaestus 發(fā)表于 2022-7-14 19:44
你的軟件用到了idata了嗎?
Hephaestus 發(fā)表于 2022-7-14 21:41
函數(shù)的好處是可以復用,一處定義多處調用,節(jié)約程序空間。
但是對于大多數(shù)8位單片機編譯器,包括C51,沒 ...
188610329 發(fā)表于 2022-7-14 21:07
R0~R7 屬于 通用寄存器, 是不能PUSH的。
如果是完全自己寫的代碼,配合USING 可以用 PUSH AR0~AR7 方式 ...
newlined 發(fā)表于 2022-7-15 11:15
您好,四組寄存器都已經(jīng)用到了,其中有1組還是有2個同級別的低級中斷共用的.考慮到這2個低級別中斷不會同 ...
Y_G_G 發(fā)表于 2022-7-15 14:06
我感覺你還是把代碼上傳上來吧
既然你說是多年前的程序,那就說明以前的代碼是對的,問題估計就是出現(xiàn)你自己 ...
188610329 發(fā)表于 2022-7-15 15:34
看你另外一個帖子, 你再找單片機原理的書? 所以,問題出在,你并不理解你的單片機?
我之前34樓的問題,你也 ...
Hephaestus 發(fā)表于 2022-7-15 20:13
現(xiàn)在越來越混亂了。樓主在20樓說重入警告,這是c51獨有的,匯編的重入問題完全由用戶控制,根本不可能出現(xiàn) ...
188610329 發(fā)表于 2022-7-14 20:06
如果,你進入中斷,用的是不同的寄存器組, 那么,你對 R0 的操作,是不會影響 主程序的 R0的,因為,此 ...
newlined 發(fā)表于 2022-7-16 08:42
程序中,四個工作區(qū)都用到了,其中兩個低級中斷共用一個區(qū),因為不會同時被單片機響應,不會出問題。以前的堆 ...
newlined 發(fā)表于 2022-7-16 08:42
程序中,四個工作區(qū)都用到了,其中兩個低級中斷共用一個區(qū),因為不會同時被單片機響應,不會出問題。以前的堆 ...
newlined 發(fā)表于 2022-7-16 08:24
不好意思,最近記憶力嚴重衰退,連老板都笑話我,也許我記串了。有一次,一個問題我們兩個人,商討后解決 ...
newlined 發(fā)表于 2022-7-16 08:42
程序中,四個工作區(qū)都用到了,其中兩個低級中斷共用一個區(qū),因為不會同時被單片機響應,不會出問題。以前的堆 ...
datouyuan 發(fā)表于 2022-7-16 10:13
看來你這代碼問題很大。
51的堆棧要安排在ram的最后。
例如你需要32字節(jié)堆棧,那么堆棧空間為0xe0~0xff ...
datouyuan 發(fā)表于 2022-7-16 11:58
這樣只是解決了編譯器報警問題。
前提你要保證你的業(yè)務邏輯是正確的,假如業(yè)務邏輯有bug,即使你添加了 ...
188610329 發(fā)表于 2022-7-16 18:00
堆棧不能這么搞, 堆棧是向上增長的,所以應該分配在內存的最末尾,而且,我不知道你用的什么單片機,最 ...
IMG_20220718_165504[1].jpg (3.82 MB, 下載次數(shù): 717)
IMG_20220718_165516[1].jpg (3.14 MB, 下載次數(shù): 705)
newlined 發(fā)表于 2022-7-18 16:53
我知道堆棧是向上生長的,程序中以前就是那樣設定的,我也不知道為什么,我設定的話起碼會設在80H之前, ...
188610329 發(fā)表于 2022-7-18 19:36
AR0~AR7 是偽地址, 屬于KEIL A51 專用,在KEIL的幫助里面可以找到,一般講匯編的書,不會寫,要講KEIL的 ...
Y_G_G 發(fā)表于 2022-7-19 01:18
你要看的是這一本書,網(wǎng)上應該可以搜索到不要錢的PDF版本,也可以買二手的,馬云家30塊左右,超過這個價錢就 ...
newlined 發(fā)表于 2022-8-1 08:21
看了這個帖子,我明白了,AR7是不是已經(jīng)宏定義成了07H?我以前對地址了解不透徹,看來我要對這方面仔細揣 ...
188610329 發(fā)表于 2022-8-1 17:21
AR7 不一定是 07H, 也可能是 0FH, 17H 或者 1FH。 這牽涉到另一條 偽指令: USING , 當代碼向上搜索 ...
Y_G_G 發(fā)表于 2022-8-1 13:17
這么些天了,還沒有搞明白這個?
00H-1FH 這就是R0-R7的幾個工作組
20H-2FH 這是可以位尋址的,位地址是從0 ...
newlined 發(fā)表于 2022-8-4 09:59
這一段我還不理解,但我會盡量避免出現(xiàn)這個問題,以后我會慢慢領會。現(xiàn)在我遇到一個新的問題,就是單片機 ...
188610329 發(fā)表于 2022-8-4 14:56
要說保護的話……
ISP_CMD, ISP_CONTR,之外,ISP_ADDRH, ISP_ADDRL 這些都要一起保護。
但是這些都沒 ...
newlined 發(fā)表于 2022-8-6 14:32
讀指令movc可以不需要保護iap相關寄存器嗎?我仔細揣摩下。
Y_G_G 發(fā)表于 2022-7-19 01:18
你要看的是這一本書,網(wǎng)上應該可以搜索到不要錢的PDF版本,也可以買二手的,馬云家30塊左右,超過這個價錢就 ...
188610329 發(fā)表于 2022-8-7 17:59
STC的 Eeprom 是把 Flash 空間模擬成 Eeprom 來操作,尤其是STC8系列,他在物理上就是 ROM的一部分。所以 ...
newlined 發(fā)表于 2022-10-6 09:28
好的,您說的,我慢慢理會。這一段時間,正看程序,原程序中bug不少,比如,一個子程序,有時用LCALL調用 ...
188610329 發(fā)表于 2022-10-6 15:00
唉…… 這是基礎中的基礎啊……
給你舉個例子吧:
有個函數(shù):
newlined 發(fā)表于 2022-10-25 13:50
你好,這個例子,我一直試圖理解,但我沒有想通。我是這樣理解的,LCALL 一個函數(shù)時,堆棧會保存當前調用 ...
newlined 發(fā)表于 2022-10-25 13:50
你好,這個例子,我一直試圖理解,但我沒有想通。我是這樣理解的,LCALL 一個函數(shù)時,堆棧會保存當前調用 ...
188610329 發(fā)表于 2022-10-25 14:58
CALL 一次 就會把地址 存入棧 然后 跳轉執(zhí)行, 運行到 RET 就會從 棧中取出 地址, 返回CALL 的地方。 ...
Hephaestus 發(fā)表于 2022-10-25 18:44
我這個效率比你的還要高,連LJMP都省掉了,你的匯編還沒學到家。
我用的是Intel MCS-51 MACRO ASS ...
Hephaestus 發(fā)表于 2022-10-25 18:44
我這個效率比你的還要高,連LJMP都省掉了,你的匯編還沒學到家。
我用的是Intel MCS-51 MACRO ASS ...
newlined 發(fā)表于 2022-10-26 02:20
您這個看起來更簡單,俗話說人外有人,天外有天,但我現(xiàn)在是更看不懂,感謝大家提供不同的代碼讓我 ...
Hephaestus 發(fā)表于 2022-10-26 03:38
這不是“人外有人,天外有天”的問題,時間久了你就能明白最重要的學問是數(shù)學和英語。
188610329 發(fā)表于 2022-10-26 20:02
所以,先把數(shù)學學好, 數(shù)一數(shù)你這編譯出來多少字節(jié), 在來講話, 然后把語文學好,學學怎么講話。
先不 ...
Hephaestus 發(fā)表于 2022-10-26 20:18
教你一句成語——不屑一顧。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |