prechod z asm do C
Moderátori: psichac, Moderátori
prechod z asm do C
Zdravim všetkých
a zároveň by som požiadal o radu.
Od strednej školy programujem v asm(x51) a teraz by som chcel vyskúšať C.
Možno už v mojom vyžšom veku to nebude ono.
Mám vývojovú dosku s mcu od Silabs C8051F040 a skúšam prvý program.
Postupné rozsvecovanie led na porte. Iba sa zatial učím.
Mám takýto problém. V knihách je písané, že keď chcem nekonečný
cyklus, (tak ako aj v asm sa musí dať hlavný program do cyklu) musím použiť v hlavnej
funkcii main cyklus While(1). Mne to robí cyklus aj keď nepoužijem cyklus While? Je to možné?
Skúšal som to v Keily aj vo vývojovom prostredí od Silabs a robí to to isté.
Skúšal som aj funkciu Stop na zastavenie programu a tá funguje, zastaví program.
V prílohe je skúšaný program.
Vedel by mi niekto poradiť.
Ďakujem!
a zároveň by som požiadal o radu.
Od strednej školy programujem v asm(x51) a teraz by som chcel vyskúšať C.
Možno už v mojom vyžšom veku to nebude ono.
Mám vývojovú dosku s mcu od Silabs C8051F040 a skúšam prvý program.
Postupné rozsvecovanie led na porte. Iba sa zatial učím.
Mám takýto problém. V knihách je písané, že keď chcem nekonečný
cyklus, (tak ako aj v asm sa musí dať hlavný program do cyklu) musím použiť v hlavnej
funkcii main cyklus While(1). Mne to robí cyklus aj keď nepoužijem cyklus While? Je to možné?
Skúšal som to v Keily aj vo vývojovom prostredí od Silabs a robí to to isté.
Skúšal som aj funkciu Stop na zastavenie programu a tá funguje, zastaví program.
V prílohe je skúšaný program.
Vedel by mi niekto poradiť.
Ďakujem!
- Prílohy
-
- PROGRAM.C
- (1.35 KiB) 78 stiahnutí
0
Re: prechod z asm do C
Tyhle procesory neznám ,ale tak mě napadá -není zapnutej watchdog timer nebo prostě něco po čem nastane reset procesoru ?
0
Re: prechod z asm do C
Mozno je problem vo funkcii Oscillator_Init() a v nastaveni registra RSTSRC.
Nepomohlo by RSTSRC = 0x00; ?
Pripadne zmazat riadok, kedze 0x00 bude zrejme implicitna hodnota.
Nepomohlo by RSTSRC = 0x00; ?
Pripadne zmazat riadok, kedze 0x00 bude zrejme implicitna hodnota.
0
Re: prechod z asm do C
Mno vidim to tak, ze program bezi dalej, az pretecie PC a zacne odznovu.
V Keil - y si nastav priznak pre vytvorenie lst vystupu s ASM kodom a tam to ako asemblerista uvidis.
V Keil - y si nastav priznak pre vytvorenie lst vystupu s ASM kodom a tam to ako asemblerista uvidis.
0
Re: prechod z asm do C
Program v Arduino ma dve hlavne casti:gogo napísal:keď chcem nekonečný cyklus, (tak ako aj v asm sa musí dať hlavný program do cyklu) musím použiť v hlavnej
funkcii main cyklus While(1). Mne to robí cyklus aj keď nepoužijem cyklus While? Je to možné?
void setup() {zde sa dava to, co sa urobi jedenkarat na zaciatku}
void loop() {toto sa toci donekonecna ako keby bola prva instrukcia while(1)}
Celkom dobre si dovedem predstavit, ze tvoj main() sa sprava ako loop() u Arduina.
0
Samozřejmě, že dědeček nemá kapesní hodinky poháněné elektřinou. Takový nesmysl si může vymyslit jen Saturnin. (Zdenek Jirotka, 1942)
Re: prechod z asm do C
Zdravim,
bol so dva dni mimo, tak neskoršia odpoveď.
Ďakujem za odpovede.
Register RSTSRC je nastavený na reset, ak vypadne hodinový
signal, tak resetujue a watchdog je deaktivovaný sekvenciou
zápisov do registra WDTCN #DEh a následne #ADh. Toto nastavenie
je v poriadku.
Skúsim ešte s iným mcu rodiny x51.
bol so dva dni mimo, tak neskoršia odpoveď.
Ďakujem za odpovede.
Register RSTSRC je nastavený na reset, ak vypadne hodinový
signal, tak resetujue a watchdog je deaktivovaný sekvenciou
zápisov do registra WDTCN #DEh a následne #ADh. Toto nastavenie
je v poriadku.
Skúsim ešte s iným mcu rodiny x51.
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: prechod z asm do C
To je na nič. Asi to bude ako píše xmilos. Aj spôsob ako to overiť ti napísal. Daj sem ten lst a o chvíľu ti to povieme. Alebo stačí aj hex. Nejaký disassmebler na 51 sa určite nájde.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: prechod z asm do C
A - neda sa mi zapojit prives za auto
B - skus odomknut zamok na privese
..
..
A - asi kupim nove auto
:--)
B - skus odomknut zamok na privese
..
..
A - asi kupim nove auto
:--)
0
Re: prechod z asm do C
Zdravim.
konečne som sa dostal k PC.
Nemyslel som kupovať inú vývojovú dosku. Mám ešte s mcu ADuC812,
tak skúsiť to na tom ako to pôjde.
Pridávam súbory lst a hex.
Súbor lst nejde pridať, tak má príponu txt.
Ďakujem!
konečne som sa dostal k PC.
Nemyslel som kupovať inú vývojovú dosku. Mám ešte s mcu ADuC812,
tak skúsiť to na tom ako to pôjde.
Pridávam súbory lst a hex.
Súbor lst nejde pridať, tak má príponu txt.
Ďakujem!
- Prílohy
-
- PROGRAM.hex
- (1.05 KiB) 33 stiahnutí
-
- program.txt
- (13.9 KiB) 53 stiahnutí
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: prechod z asm do C
Fúha to teda je ten prekladač riadne prešpekulovaný.
Posledný príkaz funkcie main je preložený nie s call ale s jmp.
To znamená že pri návrate dôjde k podtečeniu zásobníka. Návrat na adresu 0 sa urobí len preto že niekde na začiatku vynulovali celú internú pamäť dát. Takže predpokladajú že za zásobníkom je uložená adresa 0 a preto sa to začne opakovať od začiatku.
Toto sa mi teda hodne nepáči ako to má ten Keil vyriešené.
Ja som raz skúmal ako to má GNU AVR C a tam majú na to funkciu exit()(co je ekvilalent tej tvojej stop). Tú si môžeš zavolať sám, alebo sa zavolá po skončení funkcie main. Nerobí nič iného než že zakáže prerušenia a vbehne do nekonečnej loop. Čo sa mi vidí oveľa zodpovednejšie. Nuž ale profi je profi a tak ju po skončení main zabudli zavolať. Alebo to nie je bug ale feature. Tažko súdiť.
Ono to že podtečenie zásobníka vyvolá ako keby reset je fajn. Ale prečo by mal byť reset keď skončí main nechápem.
Kód: Vybrať všetko
85 1 delayms(1000);
86 1 P4 = 0x80;
87 1 delayms(1000);
88 1
89 1 //stop();
90 1 }
Kód: Vybrať všetko
; SOURCE LINE # 85
002A 120000 R LCALL L?0020
; SOURCE LINE # 86
002D 75C880 MOV P4,#080H
; SOURCE LINE # 87
0030 7FE8 MOV R7,#0E8H
0032 7E03 MOV R6,#03H
0034 020000 R LJMP _delayms
Toto sa mi teda hodne nepáči ako to má ten Keil vyriešené.
Ja som raz skúmal ako to má GNU AVR C a tam majú na to funkciu exit()(co je ekvilalent tej tvojej stop). Tú si môžeš zavolať sám, alebo sa zavolá po skončení funkcie main. Nerobí nič iného než že zakáže prerušenia a vbehne do nekonečnej loop. Čo sa mi vidí oveľa zodpovednejšie. Nuž ale profi je profi a tak ju po skončení main zabudli zavolať. Alebo to nie je bug ale feature. Tažko súdiť.
Ono to že podtečenie zásobníka vyvolá ako keby reset je fajn. Ale prečo by mal byť reset keď skončí main nechápem.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: prechod z asm do C
a nie je to prasaren ak sa do main neda nekonecna slucka ? Potom to robi, nie to co ja chcem, ale preteka to kade tate ako to prelozi prekladac. Nie som programator, tak sa pytam. Ja som vzdy pisal takto:
a mam pod kontrolou celu cinnost mikroprocesora
Kód: Vybrať všetko
#declare .....
#include .....
void main()
{
//inicializacia premennych
//inicializacia mikroprocesora a periferii
while(1)
{
//moj vykonny kod
}
}
0
Re: prechod z asm do C
Konečne sa tomu môžem venovať.
Toto som písal v prvom príspevku o tom, že keď tam nedám While(1),
prečo to ide odznova.
Myslím, že peterple to napísal jasne, posledný príkaz main nie je
s volaním podprogramu call ale so skokom jmp.
Toto som písal v prvom príspevku o tom, že keď tam nedám While(1),
prečo to ide odznova.
Myslím, že peterple to napísal jasne, posledný príkaz main nie je
s volaním podprogramu call ale so skokom jmp.
0