Sida 1 av 4

Hur Lära sig C?.

Postat: 2 februari 2005, 16:19:56
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...

Postat: 2 februari 2005, 16:44:31
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.

Postat: 2 februari 2005, 17:35:31
av strombom

Postat: 2 februari 2005, 17:55:07
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 ...

Postat: 3 februari 2005, 11:52:39
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 :?

Postat: 3 februari 2005, 12:56:05
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

Postat: 3 februari 2005, 13:14:22
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...

Postat: 3 februari 2005, 13:24:05
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.

Postat: 3 februari 2005, 13:30:04
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 :)

Postat: 3 februari 2005, 13:31:52
av Schnegelwerfer
Jo, jag har den svenska versionen liggande hemma. Den är inte riktigt heltäckande, men tar upp det viktigaste i alla fall.

Postat: 3 februari 2005, 22:40:58
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){
}

Postat: 3 februari 2005, 23:04:27
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.

Postat: 3 februari 2005, 23:19:07
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.

Postat: 3 februari 2005, 23:23:13
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'.

Postat: 3 februari 2005, 23:33:30
av henkebenke
Är "true" definierat till 1 då? Det är ju en viss skillnad på if(a) och if(a==true) isåfall.