Svetelektro.com

Svetelektro.com

Meno:
Heslo:
SVETELEKTRO • prechod z asm do C

prechod z asm do C

C,C++,C#

Moderátori: psichac, Moderátori

prechod z asm do C

Odoslaťod gogo » 12 Dec 2016, 21: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) Stiahnutá 46 krát
gogo
Obrázok používateľa
Stály člen
Stály člen
Príspevky: 111
Založený: 28.09.2009
Bydlisko: Skalica
Karma: 1

Re: prechod z asm do C

Odoslaťod Sender » 12 Dec 2016, 21:59

Tyhle procesory neznám ,ale tak mě napadá -není zapnutej watchdog timer nebo prostě něco po čem nastane reset procesoru ?
Sender
Obrázok používateľa
Stály člen
Stály člen
Príspevky: 425
Založený: 26.05.2008
Karma: 0

Re: prechod z asm do C

Odoslaťod hen » 12 Dec 2016, 23: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.
hen
Okoloidúci
Okoloidúci
Príspevky: 1
Založený: 12.12.2016
Karma: 0

Re: prechod z asm do C

Odoslaťod xmilos » 13 Dec 2016, 08: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.
xmilos
Obrázok používateľa
Ultimate člen
Ultimate člen
Príspevky: 3495
Založený: 04.05.2011
Bydlisko: Povazie
Karma: 14

Re: prechod z asm do C

Odoslaťod zen » 13 Dec 2016, 19: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.
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)
zen
Obrázok používateľa
Stály člen
Stály člen
Príspevky: 214
Založený: 22.11.2013
Bydlisko: Cadca
Karma: 4

Re: prechod z asm do C

Odoslaťod gogo » 15 Dec 2016, 20: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.
gogo
Obrázok používateľa
Stály člen
Stály člen
Príspevky: 111
Založený: 28.09.2009
Bydlisko: Skalica
Karma: 1

Re: prechod z asm do C

Odoslaťod peterple » 15 Dec 2016, 22: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.
peterple
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1288
Vek: 50.14
Založený: 25.06.2013
Bydlisko: Krajné
Karma: 36

Re: prechod z asm do C

Odoslaťod xmilos » 16 Dec 2016, 08:05

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

:--)
xmilos
Obrázok používateľa
Ultimate člen
Ultimate člen
Príspevky: 3495
Založený: 04.05.2011
Bydlisko: Povazie
Karma: 14

Re: prechod z asm do C

Odoslaťod gogo » 18 Dec 2016, 20: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) Stiahnutá 3 krát
program.txt
(13.9 KiB) Stiahnutá 8 krát
gogo
Obrázok používateľa
Stály člen
Stály člen
Príspevky: 111
Založený: 28.09.2009
Bydlisko: Skalica
Karma: 1

Re: prechod z asm do C

Odoslaťod peterple » 18 Dec 2016, 22: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.
peterple
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1288
Vek: 50.14
Založený: 25.06.2013
Bydlisko: Krajné
Karma: 36

Re: prechod z asm do C

Odoslaťod MiroH » 18 Dec 2016, 22: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
MiroH
Obrázok používateľa
Stály člen
Stály člen
Príspevky: 103
Vek: 53.25
Založený: 13.12.2009
Bydlisko: Nitra
Karma: 0

Re: prechod z asm do C

Odoslaťod gogo » 30 Dec 2016, 21: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.
gogo
Obrázok používateľa
Stály člen
Stály člen
Príspevky: 111
Založený: 28.09.2009
Bydlisko: Skalica
Karma: 1


Naspäť na C,C++,C#

Kto je prítomný

Užívatelia prezerajúci si toto fórum: Žiadny registrovaný používateľ a 1 hosť.

Forums ©
Autor stránky je Ondrej Závodský(zawin), o graficky design sa stará Ľuboš Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
Čas potrebný k spracovaniu stránky 0.14 sekúnd