![](http://www.elektronika.lt/_sys/img/dot.gif) |
![](/_sys/img/dot.gif)
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2024 09 01, 03:00. Visos datos yra GMT + 2 valandos.
|
|
|
![](/_sys/img/box_ico.gif) |
Forumas » Mikrovaldikliai » kaip i C kompiliatoriaus programa ideti asmblerio gabala?
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 16, 19:59 |
|
|
|
Niekaip nepavyksta issiaiskinti kaip i MPLABe rasoma programa (C kalboje PIC32MX440 procesoriukui) iterpti asemblerio gabaliuka...
Senesniems mikrovaldikliams rasydavau taip (seniau naudojau CCS kompiliatoriu):
#asm
nop
BCF 0xf8a, 0x1 // LCD_CLK_0
BSF 0xf8a, 0x1 // LCD_CLK_1
MOVWF 0xf95
MOVFF 0xf83, 0xd
nop
#endasm
o kaip parasyti kad ir ta pati 'nop' MPLABo kompiliatoriui (32 bitu procui)? |
|
|
|
|
![](/_sys/img/dot.gif) |
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 11:53 |
|
|
|
R2D2 rašo: |
gal išeitų tokia chaltūra kaip labai trumpas delay, ir kompiliatorius jį padarytų į nop
arba ieškoti kokiuose headeriuose kuriuos duoda mplab ir gal ten pavyktų užtikti asm aprašymą
arba pamėgint šitą: http://ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
nors čia ir skirta GCC bet gal vėl, sueis... |
nelabai supratai, man nereikia "nop" komandos iterpt i C kompiliatoriuas program..., nesugebu issiaiskint kaip 32 bitu procesoriukui isvis atrodo asemblerio komandos iterpemos i C (MPLABo) kompiliatoriaus programa... (o ka as jau ten noriu iterpt tai esmes nekeicia (viskas reikalinga norint isspaust maksimalu greiti irasant i vidini RAM duomenis ateinancius per 8 bitu lygiagretu porta...)) |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 13:36 |
|
|
|
dariusmano rašo: |
nelabai supratai, man nereikia "nop" komandos iterpt i C kompiliatoriuas program..., nesugebu issiaiskint kaip 32 bitu procesoriukui isvis atrodo asemblerio komandos iterpemos i C (MPLABo) kompiliatoriaus programa... (o ka as jau ten noriu iterpt tai esmes nekeicia (viskas reikalinga norint isspaust maksimalu greiti irasant i vidini RAM duomenis ateinancius per 8 bitu lygiagretu porta...)) |
Tam reikalui tas PIC DMA neturi? |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 13:45 |
|
|
|
Socrates rašo: |
dariusmano rašo: |
nelabai supratai, man nereikia "nop" komandos iterpt i C kompiliatoriuas program..., nesugebu issiaiskint kaip 32 bitu procesoriukui isvis atrodo asemblerio komandos iterpemos i C (MPLABo) kompiliatoriaus programa... (o ka as jau ten noriu iterpt tai esmes nekeicia (viskas reikalinga norint isspaust maksimalu greiti irasant i vidini RAM duomenis ateinancius per 8 bitu lygiagretu porta...)) |
Tam reikalui tas PIC DMA neturi? |
tikrai turi, bet man kolkas dar nesuprantamas tas DMA ... (gal kada ir issiaiskinsiu su kuo ji valgo....) , o siuo metu zinant kad C i masinini programos koda prikisa visokiu siuksliu noriu ju isvengt gabaleli programos rasant asembleriu....
Dabar tikslas padaryt kiek galima greitesni duomenu irasima, o jau ateityje issiaiskinus kaip DMA veikia ir pasiekti max irasimo reiksme.... (pakoreguojant tik programa (nelieciant gelezies)) (aisku nebent kas sugebetu konkreciai parodyt pavizdziu kaip dirbama su DMA (netikiu kad tokiu atsiras, tad , kaip ir seniau, man anglu kalba netapo gimtoji.... - kazka suprantu, bet nera noro angliskai skaityt viso DMA aprasimo ir gaist savaites kad perprast panaudojima. |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 16:18 |
|
|
|
dariusmano rašo: |
nelabai supratai, man nereikia "nop" komandos iterpt i C kompiliatoriuas program..., nesugebu issiaiskint kaip 32 bitu procesoriukui isvis atrodo asemblerio komandos iterpemos i C (MPLABo) kompiliatoriaus programa... (o ka as jau ten noriu iterpt tai esmes nekeicia (viskas reikalinga norint isspaust maksimalu greiti irasant i vidini RAM duomenis ateinancius per 8 bitu lygiagretu porta...)) |
o .h failuose mėginai ieškoti kaip apsirašo asm?
arba parodyk kaip tu tą C kodą rašai ir bus aišku kodėl ten kažkas ne taip greitai daroma (tik pridėk komentarus).
o dėl DMA, tai žinok jis nesveikai geras dalykas ir verta dėl jo paaukoti savaitę, na bet mes apie DMA jau diskutavome, kiek pamenu. |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 16:36 |
|
|
|
R2D2 rašo: |
dariusmano rašo: |
nelabai supratai, man nereikia "nop" komandos iterpt i C kompiliatoriuas program..., nesugebu issiaiskint kaip 32 bitu procesoriukui isvis atrodo asemblerio komandos iterpemos i C (MPLABo) kompiliatoriaus programa... (o ka as jau ten noriu iterpt tai esmes nekeicia (viskas reikalinga norint isspaust maksimalu greiti irasant i vidini RAM duomenis ateinancius per 8 bitu lygiagretu porta...)) |
.... parodyk kaip tu tą C kodą rašai ir bus aišku kodėl ten kažkas ne taip greitai daroma (tik pridėk komentarus)... |
kaip apsirasyta...:
#define PIC_C_0 mPORTBClearBits (BIT_5)
#define PIC_C_1 mPORTBSetBits (BIT_5)
#define PIC_DATA mPORTERead()
mano C toks:
PIC_C_1;
PIC_C_0;
Buferis[0] = PIC_DATA;
PIC_C_1;
PIC_C_0;
Buferis[1] = PIC_DATA;
PIC_C_1;
PIC_C_0;
Buferis[2] = PIC_DATA;
....
pasiunciamas "PIC_C" taktavimo impulsas (1, paskui 0), ir jau tada nuskaitoma gauta info is PIC_DATA
ir visa tai uztrunka 11Cycles (prie 80MHz=137,5ns=7,27MHz) kaip ir mazoka man.... idealiu variantu noretus pasiekt irasimo greiti 20 ar 40MHz
Senesniem PICams rasant programos dalis kritines greiciui rasydavau su asembleriu ir idedavau i C programa.... taip esu pasiekes ir 7 kartus greitesni programos atkarpos darba. |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 16:43 |
|
|
|
dariusmano rašo: |
kaip apsirasyta...:
#define PIC_C_0 mPORTBClearBits (BIT_5)
#define PIC_C_1 mPORTBSetBits (BIT_5)
#define PIC_DATA mPORTERead()
|
dabar parodyk kaip tas mPORTERead() atrodo.
ir kaip buffer apsirašęs esi. |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 16:50 |
|
|
|
R2D2 rašo: |
dariusmano rašo: |
kaip apsirasyta...:
#define PIC_C_0 mPORTBClearBits (BIT_5)
#define PIC_C_1 mPORTBSetBits (BIT_5)
#define PIC_DATA mPORTERead()
|
dabar parodyk kaip tas mPORTERead() atrodo.
ir kaip buffer apsirašęs esi. |
....
UINT8 Buferis[512] ;
....
nesupratau klausimo- "dabar parodyk kaip tas mPORTERead() atrodo."
ta turejai galvoj:
TRISE = 0b11111111; // iejimai |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 17:01 |
|
|
|
dariusmano rašo: |
....
UINT8 Buferis[512] ;
....
nesupratau klausimo- "dabar parodyk kaip tas mPORTERead() atrodo."
ta turejai galvoj:
TRISE = 0b11111111; // iejimai |
žinoma kad ne tas. TRISE gi ne prie ko.
parodyk kaip ta f-ja mPORTERead() atrodo. nors iš esmės tai čia ji tau greičiausiai ir darys daugiausiai instrukcijų. |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 17:06 |
|
|
|
R2D2 rašo: |
dariusmano rašo: |
....
UINT8 Buferis[512] ;
....
nesupratau klausimo- "dabar parodyk kaip tas mPORTERead() atrodo."
ta turejai galvoj:
TRISE = 0b11111111; // iejimai |
žinoma kad ne tas. TRISE gi ne prie ko.
parodyk kaip ta f-ja mPORTERead() atrodo. nors iš esmės tai čia ji tau greičiausiai ir darys daugiausiai instrukcijų. |
neisivaizduoju kaip ta funkcija atrodo.... ji yra standartine kompiliatoriaus (ne mano)
"mPORTERead()" sunaudoja 5Cycles (62,5ns) (ant senu PIC uztekdavo 3Cycles)
"mPORTBClearBits (BIT_5)" sunaudoja 3Cycles (37,5ns) (ant senu PIC uztekdavo 1Cycles)
"mPORTBSetBits (BIT_5)" sunaudoja 3Cycles (37,5ns) (ant senu PIC uztekdavo 1Cycles) |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 17:10 |
|
|
|
va ka parodo dissasembleris:
44: PIC_C_1;
9D00204C 3C03BF88 lui v1,0xbf88
9D002050 24020020 addiu v0,zero,32
9D002054 AC626068 sw v0,24680(v1)
45: PIC_C_0;
9D002058 3C03BF88 lui v1,0xbf88
9D00205C 24020020 addiu v0,zero,32
9D002060 AC626064 sw v0,24676(v1)
46: Buferis[0] = PIC_DATA;
9D002064 3C03A000 lui v1,0xa000
9D002068 3C02BF88 lui v0,0xbf88
9D00206C 8C426110 lw v0,24848(v0)
9D002070 A0620DB4 sb v0,3508(v1) |
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
kaip i C kompiliatoriaus programa ideti asmblerio gabala? |
Parašytas: 2010 07 17, 17:13 |
|
|
|
Socrates rašo: |
O koks clock'as? Mano nuomone, kad tu dabar gaishti laika kazka spausdamas, nei ismoktum kaip veikia DMA PIC'ams manau rusu literaturos nemazai. |
nemanau kad pamaisytu zinoti kaip asemleri iterpt i C... man dabar gal labiau princio reikalas issiaiskint (jei neatsibos anksciau)
p.s. lygiagreciai siam susirasinejimui skaitau ir apie DMA (tik naudos )
Clock'as= 80MHz (cia po daugintuvu ir dalikliu) (esme ne tame...):
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_8 |
|
|
|
|
|
![](http://www.elektronika.lt/_sys/img/box_ico.gif) |
Google paieška forume |
|
![](http://www.elektronika.lt/_sys/img/box_ico.gif) |
Naujos temos forume |
|
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
LEGO
Mänguköök,
mudelautod,
nukuvanker |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
![Reklama](http://www.elektronika.lt/_sys/img/rrr2.gif)
|
![Reklama](http://www.elektronika.lt/_sys/img/rrr1.gif) |