C eller Assembler på AVR

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Glattnos
Inlägg: 3106
Blev medlem: 29 oktober 2009, 20:01:18

C eller Assembler på AVR

Inlägg av Glattnos »

Hej!

Beklargar om frågan varit uppe förr men jag har sökt och inte hittat något bra svar. Jag vet att det är lite av en smaksak men ska försöka strukturera några frågor, allt gäller AVR:

1. Tar en compilerad C-kod alltid mer plats i minnet än en Assembler-kod(Vi utgår ifrån att båda koderna gör samma sak och att ingen av dom är onödigt invecklat skriven)?

2. Kan man åstakomma ett program i C som inte går att få till i Assembler?

3. Tvärt om mot 2. Kan man åstakomma ett program i Assembler som inte går att få till i C?

4. Vilken typ av program är lämpligare/enklare att skriva i C resp. Assembler(Detta är en smakfråga såklart)?

Anledningen till att jag frågade är att jag började lära mig C men har nu kommit in på Assembler vilket känns lite lättare att förstå, men det känns som att C är kraftfullare på något sätt. Jag vill höra åsiker av flera om detta.

Mvh Martin
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: C eller Assembler på AVR

Inlägg av sodjan »

1. Finns inget generellt svar på det.
"Ja" om de som skrev C-kompilatorn är duktigare assemblerprogrammerare än vad du är... :-)

2. Nej, självklart inte.
Hur skulle kompilatorn i så fall kunna skapa *sin* assemblerkod ??

3. Kanske...

4. Nej, det är ingen smakfråga.
Det är en rent praktisk fråga och har helt att göra med vad det är man vill göra.
Användarvisningsbild
xraid
Inlägg: 1129
Blev medlem: 20 mars 2009, 04:12:14
Ort: Stockholm

Re: C eller Assembler på AVR

Inlägg av xraid »

1. Tar en compilerad C-kod alltid mer plats i minnet än en Assembler-kod(Vi utgår ifrån att båda koderna gör samma sak och att ingen av dom är onödigt invecklat skriven)?
inte nämnvärt men kan beroende på hur kompilatorn samt metallen är byggda ...
2. Kan man åstakomma ett program i C som inte går att få till i Assembler?
se 1 ;-) man kan knasa vansinnigt i C - i .asm me ...
3. Tvärt om mot 2. Kan man åstakomma ett program i Assembler som inte går att få till i C?
ja
4. Vilken typ av program är lämpligare/enklare att skriva i C resp. Assembler(Detta är en smakfråga såklart)?
igen beroende på situation problemdomän kund . generellt är C mer underhållsvänligt pga. att det är ett högnivåspråk som fler kan arbeta i . där en slags effektivites vinst ses för dom som räknar LOC per dag som effektivitet . givet .asm i fall där det finns extrema krav på att en specification klaras inom vad metallen kan prestera ...

Metall = hårdvaran
LOC = Lines of Code
Glattnos
Inlägg: 3106
Blev medlem: 29 oktober 2009, 20:01:18

Re: C eller Assembler på AVR

Inlägg av Glattnos »

Tack Sodjan!

Jag tror att jag förstår men borde inte svaret på fråga 1. då vara: Nej, inte om de som ......

Jag har för mig att jag har läst någonstans att det är lättare att skriva en kod i C och låta kompilatorn assemblera om det är mycket matematiska beräkningar. Stämmer det eller kan man skriva ekvationer mm rakt av i assembler på något vis(jag gissar på nej)?
Användarvisningsbild
xraid
Inlägg: 1129
Blev medlem: 20 mars 2009, 04:12:14
Ort: Stockholm

Re: C eller Assembler på AVR

Inlägg av xraid »

Jag har för mig att jag har läst någonstans att det är lättare att skriva en kod i C och låta kompilatorn assemblera om det är mycket matematiska beräkningar. Stämmer det eller kan man skriva ekvationer mm rakt av i assembler på något vis(jag gissar på nej)?
beror på hur väl du kan .asm det är enklare i C - då uttryckt eftersom det är närmre matten man lärt sig grundläggande . kan vara elegantare effektivare i .asm då man bara använder sig av absolut minimum av yta och cykler för att utföra . i en konvertering översättnings kompilation kan vissa saker loopa och ta plats i onödigt kopierande till mellanlagrings regster osv. som man kan styra bort i asm . men 97% av alla program klarar sig utan att behöva tänka på det då man vill kasta på upplevt billigare hårdvara än tidsödande programvaruoptimering ......
Senast redigerad av xraid 16 november 2009, 20:05:41, redigerad totalt 2 gånger.
Nerre
Inlägg: 27257
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: C eller Assembler på AVR

Inlägg av Nerre »

Det som jag ser som den stora fördelen med program i C är väl att man slipper hålla reda på storlek (bitlängd) på variabler och sånt själv. D.v.s. deklarerar man dem korrekt så talar kompilatorn om ifall man försöker stoppa in nåt som inte får plats.

Det är också svårare att "trassla in sig" om man skriver i C.

Skriver man i assembler gissar jag att det väldigt ofta också blir en massa globala variabler (eftersom det är enklare att hantera än att lägga variabler på stacken eller i olika register). Skriver man i C optimerar kompilatorn och använder register och stacken till mycket.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: C eller Assembler på AVR

Inlägg av sodjan »

> Jag tror att jag förstår men borde inte svaret på fråga 1. då vara: Nej, inte om de som ......

Jo, helt rätt, det blev "inverterat" där... :-)
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: C eller Assembler på AVR

Inlägg av Micke_s »

Det går att köra inline assembler också där det behövs.
Det är mer tidskritiska grejor som är vettig att skriva i assembler, om man nu har sådana. Räkna cycler är sådär kul egentligen.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: C eller Assembler på AVR

Inlägg av Swech »

Kör man C så är det lätt att helt förbise hur processorn funkar och
skriva lösningar som blir besvärliga under huven.
Det spelar ju oftast inte någon roll men programkoden blir onödigt stor.

Sen kan man också se att det är väldigt frestande att använda sig
av cut and paste i C.
Man gör en rutin som utför något och sen kopierar man hela rasket
och ändrar bara på t.ex. en hårdvarupinne

eller upprepade beräkningar
t.ex.
If (a+3*x) > (b-4) then...
else if (a+3*x) = (b-4) then....
(man kan ju se hur bra jag är på C... jag vet att man inte skriver så men ni fattar principen)


Swech
Gimbal
Inlägg: 8687
Blev medlem: 20 april 2005, 15:43:53

Re: C eller Assembler på AVR

Inlägg av Gimbal »

Assembler är bra för att öka förståelsen för hur processorn jobbar, när man väl har förstått det så bör man klättra vidare mot C. Att sitta och peta på bittnivå helt i onödan är läskigt improduktivt. Det är bara att fråga vilken programmerare som helst som skriver större program än pyttesmå.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: C eller Assembler på AVR

Inlägg av Swech »

Det beror helt på....
Programmen jag skriver ligger pä > 3000 rader. En av de större är ca 6000 rader assembler...
och det är väldigt lite peta på bitnivå....

Swech
Gimbal
Inlägg: 8687
Blev medlem: 20 april 2005, 15:43:53

Re: C eller Assembler på AVR

Inlägg av Gimbal »

Då antar jag att du har ett riktigt bra skäl. Får man fråga vad det är?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: C eller Assembler på AVR

Inlägg av Swech »

Envishet :wink:
Har oftast hela stommen till programmen givna eftersom man pulat ihop 150-200 olika projekt.

Swech
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: C eller Assembler på AVR

Inlägg av E85 »

Jag röstar på C. Det finns ju t.o.m exempelkod i C i databladen så ser ingen anledning heller att brottas med assembler där det inte är absolut nödvändigt. Och om man håller på med så pass avancerade saker att man måste använda assembler så vet man nog om det redan. Kompilatorn är ofta bättre än människan på att optimera kod så att programmen blir mindre i assembler behöver inte vara fallet.
Användarvisningsbild
4kTRB
Inlägg: 20836
Blev medlem: 16 augusti 2009, 19:04:48

Re: C eller Assembler på AVR

Inlägg av 4kTRB »

Programmerar man mycket i assembler så bygger man upp hela bibliotek
med användbara funktioner med tiden. Då går det betydligt snabbare
sedan att skriva större program. Loopar och andra strukturer standardiserar
man i assembler vilket gör att man snabbare kan få till bra assemblerprogram.
Sånt är betydligt lättare med en processor som har många instruktioner.
Skriv svar