Hur Lära sig C?.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Fagge
Inlägg: 3930
Blev medlem: 27 maj 2003, 13:59:51
Ort: Blekinge

Hur Lära sig C?.

Inlägg av Fagge »

Nu vill jag lära mig C så jag kan komma i gång med Renesas M32 processorn. Men vad ska jag börja?.
De böcker jag har kikat på som finns i elfa, är ju för att göra windows program, är det nån skilnad mellan processor programering & windows programering när man kör C?.

Någon som vet nån bra bok för att lära sig skiten, eller ha en bok i PDF format eller nått liknande som är bra för en nybörjare ?.
Givetvis så ska den vara på SV, annars så tappar man lätt sugen om man hakar upp sig på nått ord :? .

Tack på förhand...
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Du ska väl börja i början eller hur?

http://www.functionx.com/ har en del matrial som kan vara bra att kolla på fast på engelska såklart.

C programmering är C, om det är till Win eller Renasas spelar ingen roll! Uppbyggnaden och funktionerna är de samma. Heter funktionerna exakt lika gör de exakt likadan om det är de förut definierade i C-språket!

MEN: Det spiller roll så till vidare att inställning av serieporta osv (hårdvara) skiljer från målsystem till målsystem, inget konstigt med det. Att komma åt serieport i Win är t.ex. helt annolunda än på Renesas men med den rette programmering i grunden kan du göra det lika.
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Användarvisningsbild
AndLi
Inlägg: 18274
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Inlägg av AndLi »

Där finns en sak att tänka på när du börjar provköra "Hello world" exempeln på renesas platformen.

Många grundläggande exempel använder printf för att skriva ut saker. Printf skriver ut till nått som kallas stdout (standard out). Vilket i normala fall är ditt consol fönster. Denna funktionalitet är sällan implementerad som standard för inbyggda system.

Så du får hitta på egna sätt att få ut status, blinka lite med lysdioderna, skriva texter på LCD eller liknande.

Har inte själv tittat på hur mycket jobb det är att implementera de hårdvarunära funktionerna i stdio på renesas för att få det att fungera, det hade varit lite coolt att kunna göra en printf("hello world") till displayen :)

Jag rekomenderar trial and error metoden för att lära sig C :)
Titta lite i den sida strombom länka till och prova med testprojektet som var med kittet. Det är föredömligt enkelt och rent skrivet ...
Användarvisningsbild
Fagge
Inlägg: 3930
Blev medlem: 27 maj 2003, 13:59:51
Ort: Blekinge

Inlägg av Fagge »

Nä det hjälpte mig inte mycke, i mina ögon är det fortfarande massa obegriplig text ihopblandad med paranteser, kommatecken, semikolon mm.
Och i vilken fil ska man skriva skiten bland all annan obegriplig texti & i vilken ordning körs programen?.
Nä jag känner jag behöver en guid som är för riktiga nybörjare!.l :?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Att läsa C de första gånger är ganska svårt, jag tror att C är en av de svåraste språk att läsa som "okunnig" och man måste lita på kommentaren.

Om det inte finns massor av kommentarer kan det vara mycket svårt att komma till skott.

En hjälp kan vara att veta att en block börjar med '{' och slutar med '}'.

Det kan t.ex. vara så att man skriver:
if(IamStupid == true)
{
// Här kan det stå en jävla massa rader
}
betyder det att om IamStupid-variablen innehåller ett värde som är lika med true (standart grej = 1) utföras allt som står mellan { och }.
Bemärk att de kan nestas vilket betyder att man kan stacka fler {} inuti varandra och de hör ihop.

Alltså (skriver {1 som start på block 1, }1 som slut på block 1 osv):
if(IamStupid == true)
{1
if(YouareStupidToo == true)
{2
printf("Sucker!");
{3
}3
}2
}1

Detta medför att om IamStupid inte är sant kommer inget inom block 1 att utföras.

Detta medför att man kan beta av små funktioner och bestämma var de börjar och slutar och sen är det "vanlig" programmering.

Det kan dock vara mycket bra att skaffa (göra?) en tabell över de olika notationer som finns i C som t.ex. ++, --, =, ==, != osv som kan vara ganska förvirrande tills man fattar dom.

A++ betyder A = A + 1
A-- betyder A = a - 1
A = 123 betyder just A = 123
A == 123 betyder "om A = 123" är det sant, annars är det falsk
A != 123 betyder "om A <>(olika) 123" är det sant, annars är det falsk

X = A++ betyder: X = A och därefter A = A + 1
men
X = ++A betyder: A = A + 1 och därefter X = A
Användarvisningsbild
AndLi
Inlägg: 18274
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Inlägg av AndLi »

C kod (brukar) startar i void main(void) funktionen och sen uträtta div funktionsanrop.
Funktionsanrop brukar vara rätt lätta att se... ofta är det bara funktionsnamn(); eller funktionsnamn(parameter1,param2,param3,osv);

Funktioner kan också returnera värden:
i = funktionsnamn(parameter);
i kommer då få det värde funktionsnamn returnerar.

Första boken jag läste var C++ programering vilket är på svenska och behandlar dock C++ och inte C. Jag har letat lite och frågat lite men ingen har hört talas om nått på svenska för nybörjare...
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Det finns en bok om ANSI C, "The C programming language" som paradoxalt även heter så på svenska :)

Den är på runt 200 sidor och förklarar C på ett bra och grundläggande sätt tycker jag.
Användarvisningsbild
AndLi
Inlägg: 18274
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Inlägg av AndLi »

Logiskt :)

Den verkar rätt bra, har den engelska versionen liggande här. Trodde inte den fanns på svenska, men med den tittel förstår jag att jag missa den :)
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Jo, jag har den svenska versionen liggande hemma. Den är inte riktigt heltäckande, men tar upp det viktigaste i alla fall.
Lallas
Inlägg: 463
Blev medlem: 30 november 2003, 18:46:51
Ort: Malmö

Inlägg av Lallas »

Icecap skrev: if(IamStupid == true)
Annars gillar jag Perl väldigt mycket eftersom det förutsätter redan att man är dum: :lol:

if(IamStupid){
}
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Det är samma sak i C. Finns inget som heter "true" om man inte definierar en konstant som heter "true", men praxis säger att konstanter bör ha stora bokstäver.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Jag skriver ju alltid if(!i) istället för if(i == 0) och liknande, det sparar ju flera knapptryckningar! :)

Men det är ju förutsatt att variabeln har ett nollskillt värde, jag tolkade föregående post som att perl tolkar grejer som true "by default", dvs även om det inte finns något variabel med det namnet.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag kör konsekvent med
if(x) om jag ska testa för ett värde som är olik 0 och såklart
if(!x) om jag ska testa för 0.

En riktig programmör är lat!

Jag är van från BCB6 att 'true' och 'false' är definierat men jag definierar dom i alla andra compilers tillsamman med 'Yes' och 'No'.
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Är "true" definierat till 1 då? Det är ju en viss skillnad på if(a) och if(a==true) isåfall.
Skriv svar