80c196kc at stack vanturo

K

kasd

Guest
Kahit sino ay may karanasan sa Intel 80c196kc at ang stack vanturo?

Mayroon akong problema sa aking deklarasyon stack vanturo sa mga external memory address kahit datasheet ang sabi ng stack ay matatagpuan sa panlabas o panloob na ....Ako ay may baluktot up ang data MCU at address ng mga linya sa isang analyzer lohika at natagpuan na ang MCU napupunta maling address matapos Isinasagawa ng isang magbawas 2 mula sa stack vanturo kung vanturo ang mga naninirahan sa mga panlabas na memorya.

PS: Gumagamit ako ng IAR compiler para sa binary henerasyon.

 
Ako ay walang problema sa panlabas na stack sa 196KC, gayunpaman ay hindi ko matandaan subtracting mula sa stack vanturo.

Subalit, tulad ng stack vanturo mismo ay isang SFR (sa parehong mga address at hwindow para sa parehong basahin at isulat), doon ay dapat na isang bagay sino pa ang paririto.Kung ikaw ay nagtatrabaho sa C at sa paligid ng messing sa stack, tingin ko kayo ay gumagawa ng isang mapanganib na negosyo; compiler ay hindi inaasahan ang gumagamit gawin sa stack.Bakit mo sa pagtatangka upang gawin iyon?

Paano mo mismo ang gumagawa ng "alis 2 mula sa stack vanturo"?Ka makakapag-post ng mga naipon listing (naglalaman ng pagtitipon) ng mga kaugnay na bahagi?

wek

 
Hindi ko gawin sa stack.Ito ay nangyayari kapag ang mga pangunahing function ay ipinasok bilang makikita mo sa ibaba.Hindi ko maintindihan kung bakit ang IAR compiler produces pagpupulong na ito upang alisin ang SP masyadong ...

Anyhow kung ang point ko ang SP sa panloob na RAM sa address na 0x200 at sa ibaba, ito gumagana gayon pa man, kahit na may na alis sa pagpasok sa main.

Code:1 # isama <IO196_KC.H>\ Sa segment NEAR_AC, sa 0xf

\ Hindi linagdaan char sumpungin __near __IO_PORT1;

\ __IO_PORT1:

\ 000000 DSB 1\ Sa segment NEAR_AC, sa 0x10

\ Hindi linagdaan char sumpungin __near __IO_PORT2;

\ __IO_PORT2:

\ 000000 DSB 1

2 /************************************************ ************************************************** ********

3 * CONSTANTS

4 ************************************************* ************************************************** *******/

5

6 /************************************************ ************************************************** ********

7 * variable

8 ************************************************* ************************************************** *******/

9

10 /************************************************ ************************************************** ********

11 * * * function modelo

12 ************************************************* ************************************************** *******/

13

14

15 /************************************************ ************************************************** ********

16 * * * MAIN

17 ************************************************* ************************************************** *******/

18\ Sa segment CODE, align 2

19 void main (walang laman)

\ Pangunahing:

\ 000000 nangangailangan? CL96KCSF_6_02_L08

20 (

\ 000000 69020018 sub SP, # 2

21 sumpungin hindi linagdaan char x;

22 __IO_PORT1 = 0xFF;

\ 000,004 B1FF .. LDB? GR 0:8, # 255

\ 000,007 C7000F .. STB? GR 0:8, 15:8 [0]

23 __IO_PORT2 = 0xFF;

\ 00000B C70010 .. STB? GR 0:8, 16:8 [0]

24 / * __IO_PORT2 = 0x00; * /

25

26 para sa (;;)
 
Ah nakikita ko.Ito ay kakaiba; gayunpaman ko hindi C sa 196KC.

Saan subukan mong i-set ang SP sa?Ano ang iyong panlabas na memorya-aayos?At kung paano ko malalaman mo ang "MCU napupunta maling address" at kung saan ang address na ito?

wek

 
I-set ang SP sa startup kapulungan ng file na ibinigay ng compiler / assembler.

Ang mga pagpupulong sa ibaba execute sa address 0x2080 at # SFE (CSTACK) ay tumatagal ng isang halaga na tinukoy ko sa isang configuration.Bakit ito kaya kumplikado.Balon, compiler / assembler default procedure.

Ang halaga ng # SFE (CSTACK) ay tinukoy sa pamamagitan ng 0x0180 na gumagana ng maayos o 0x1700 na kung saan ay hindi gumagana ng maayos.

Code:RSEG CSTARTstartup:

LD SP, # SFE (CSTACK); Mula mataas sa mababang address
 
Kung ang Bluetooth stack na naka-set sa 0100-01FF, kayo ay maaaring sumulat sa RAM sa 1600-16FF magsulat at magbasa ng mga salita sa likod?(sa ibang salita, ay ang iyong panlabas na memorya ng hardware na OK?)

wek

 
Sa tingin ko RAM ay ok dahil kapag ang SP ay nakatutok sa mga panlabas na address 0x1700, ang MCU ay may kakayahan upang sunduin mula sa panlabas na lokasyon.I-tsek ito sa analyzer lohika.

Ngunit pagkatapos ng MCU gawin ang sunduin @ address 0x1700 para sa alisin, ang MCU napupunta gulo sa pamamagitan ng pagkuha ng data mula sa address 0x0000 at pagkatapos incrementally.

Siguro ang dapat kong subukan ang ibang compiler.

 
Nonono!Ito ay dapat HINDI sunduin mula sa 0x1700 para sa SP sub, # 2!Ito fetches ng stack vanturo at address 0x18 (ito ay isang SFR), hindi ang NILALAMAN ng stack!

Ano sa tingin ko ang nangyayari ay, na matapos mong i-set ang SP sa 0x1700 isang magpabasa ay naisakatuparan; na fetches ilang mga basura (pinaka marahil 0x0000), kung saan pagkatapos ay inilalagay sa PC at patuloy na tumatakbo mula doon ...

Siguro mong ilagay ang mga SP-setup sa isang hindi tamang lugar.

Dapat mong subukan marahil sa hakbang sa pamamagitan ng mga nakabuo ng hex / binary sa ilang mga simulator?

wek

PS.Umaasa ako na magkaroon ng kamalayan na ng paglagay ng stack sa mga external memory makabuluhang degrades ang pagganap ng 196KC, lalo na kung ang stack ay sa isang 8-bit RAM.

 
hi wek,

salamat para sa iyong mga sagot sa ngayon.

matapos na ako basahin ang iyong sagot, ako nalaman ako ay nakagawa ng isang maling paglalarawan ng pagpapatupad ng programa.dito ay kung ano ang nangyayari matapos na muling lloking sa pagkuha ng LA.

Tunay na mga pangyayari nakuha:
matapos na nakakakuha ng pansin ang unang pagtuturo ng pangunahing function na kung saan ay ang mga sub SP, # 2.ang MCU sunduin mula sa 0x14FE lokasyon at makakuha ng 0x0000.Matapos na ang MCU simulan upang makuha ang data mula sa 0x0000 pataas.Dont ko maintindihan ang tungkol sa pagkuha mula sa 0x14FE lokasyon dahil sa SP ko may nakasulat na 0x1700 tulad ng ipinapakita sa ibaba.0x14FE lang ay masyadong malayo.

lokasyon Machine Assembly
0x2080 A1001718 LD SP, # 1700H

 
Well doon maaaring isang bagay sino pa ang paririto sa pagitan ng mga LS SP, # 1700h at sub SP, # 2, na kung saan nagbago ang SP mismo.Hindi ko sabihin ito nang walang alam ang mga detalye kaya kailangan mo siguro ay pumunta sa pamamagitan ng pagtuturo ng buong LA-by-pagtuturo at mabasa kung ano ang mangyayari ...

wek

 

Welcome to EDABoard.com

Sponsor

Back
Top