prechod z asm do C

C,C++,C#

Moderátori: psichac, Moderátori

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

prechod z asm do C

Príspevok od používateľa gogo » 12 Dec 2016, 20:44

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!
Prílohy
PROGRAM.C
(1.35 KiB) 78 stiahnutí
0

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: prechod z asm do C

Príspevok od používateľa Sender » 12 Dec 2016, 20:59

Tyhle procesory neznám ,ale tak mě napadá -není zapnutej watchdog timer nebo prostě něco po čem nastane reset procesoru ?
0

hen
Okoloidúci
Okoloidúci
Príspevky: 4
Dátum registrácie: 12 Dec 2016, 22:39
Bydlisko: BA

Re: prechod z asm do C

Príspevok od používateľa hen » 12 Dec 2016, 22:45

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.
0

Používateľov profilový obrázok
xmilos
Ultimate člen
Ultimate člen
Príspevky: 3671
Dátum registrácie: 04 Máj 2011, 00:00
Bydlisko: Povazie

Re: prechod z asm do C

Príspevok od používateľa xmilos » 13 Dec 2016, 07:31

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.
0

Používateľov profilový obrázok
zen
Stály člen
Stály člen
Príspevky: 483
Dátum registrácie: 22 Nov 2013, 14:33
Bydlisko: Cadca

Re: prechod z asm do C

Príspevok od používateľa zen » 13 Dec 2016, 18:50

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é?
Program v Arduino ma dve hlavne casti:

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)

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: prechod z asm do C

Príspevok od používateľa gogo » 15 Dec 2016, 19:52

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.
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 15 Dec 2016, 21:47

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í.

Používateľov profilový obrázok
xmilos
Ultimate člen
Ultimate člen
Príspevky: 3671
Dátum registrácie: 04 Máj 2011, 00:00
Bydlisko: Povazie

Re: prechod z asm do C

Príspevok od používateľa xmilos » 16 Dec 2016, 07:05

A - neda sa mi zapojit prives za auto
B - skus odomknut zamok na privese
..
..
A - asi kupim nove auto

:--)
0

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: prechod z asm do C

Príspevok od používateľa gogo » 18 Dec 2016, 19:42

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!
Prílohy
PROGRAM.hex
(1.05 KiB) 33 stiahnutí
program.txt
(13.9 KiB) 53 stiahnutí
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 18 Dec 2016, 21:01

Fúha to teda je ten prekladač riadne prešpekulovaný.

Kód: Vybrať všetko

  85   1       delayms(1000);
  86   1       P4 = 0x80;
  87   1       delayms(1000);
  88   1       
  89   1       //stop();
  90   1      }
Posledný príkaz funkcie main je preložený nie s call ale s jmp.

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
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.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

MiroH
Stály člen
Stály člen
Príspevky: 176
Dátum registrácie: 13 Dec 2009, 00:00
Bydlisko: Nitra
Vek: 60

Re: prechod z asm do C

Príspevok od používateľa MiroH » 18 Dec 2016, 21:18

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:

Kód: Vybrať všetko

#declare .....

#include .....

void main()
{
    //inicializacia premennych
    //inicializacia mikroprocesora a periferii

    while(1)
    {
        //moj vykonny kod

    }
}
a mam pod kontrolou celu cinnost mikroprocesora
0

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: prechod z asm do C

Príspevok od používateľa gogo » 30 Dec 2016, 20:19

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.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok