Innehåll.


- Inledning.
- Programstruktur
- Komplett program
- Headerfiler.
- Kommandon.
- - For-loop.
- - Textsträngar.
- Kompilering.
- Exekvering.
- Utility, Hjälpmedel.
- Länkar.







Inledning.


Grunder, erfarenheter och tips om programmering i C.
Den här sidan gör inte anspråk på att vara en "lärobok" i C, det finns det andra som gör så mycket bättre. Se Länkar.

En bok som alla som programmerar i C borde ha är:
The C Programming Language av Brian W. Kernighan, Dennis Ritchie. ISBN 91-970296-45 eller 9780131103627.

Innan man börjar koda kan det vara bra om man sätter sig ned och skriver ner programflödet i klartext. Man beskriver i vilken ordning saker och ting ska ske, även små detaljer. Jämför med ett recept, hur det beskriver i vilken ordning man ska göra de olika momenten. Fortsätt sedan med att göra ett flödesschema. Därpå kan det vara aktuellt att börja koda.



Programstruktur.


Grundstrukturen i ett C-program.
main är huvudprogrammet och ska alltid finnas med. Det heter alltid main.

	main()
	{
	   Programkod
	}


main kan även se ut på följande sätt:

	int main(int argc, *char[])
	{
	   Programkod
	}							
							


Exempel:

  #include <stdio.h>
  int main()
  {
      printf( "Hej Världen!\n" );
      getchar();
      return 0;
  }

main inleds alltid med { och avslutas alltid med }


Programdelar.


Header-filer.

  #include <libpiface-1.0/pfio.h>
  #include <stdint.h>
  #include <stdio.h>
  #include <stdlib.h>

........
Om an omger namnet på headerfilen med " ", sitationstecken istället för < och > , "minheader.h", måste man även ange den fullständiga sökvägen. Ofta läggs denna headefil i samma bibliotek som programmet.

Makron, definitioner.

  #define TILL 1
  #define FRAN 0
  #define UT1 0
  #define UT2 1
  #define UT3 2
  #define IN1 0
  #define IN2 1

........
Definiering av funktioner.
I de fall man placerar sina funktioner i slutet av koden måste man definiera dem i början, före main().

  int venta(); // funktion
  int relay(int relaynr, int sek); // funktion

........
Definiering av globala variabler.
Globala variabler definieras före main().

  int tid = 0;
  int stop = 0;

........
Huvudprogram, start.

  int main(void)
  {

alternativt:

  int main(int argc, char *argv[])
  {

argc = argument count (antal argument), argv[] = argument value (argumentvärde).
Detta innebär att när programmet körs/startas kan man ange ett eller flera värden som programmet ska behandla.
........
Definiering av variabler.
I C måste alla variabler typdefinieras innan de kan användas. Samtidigt kan man ge variabeln ett startvärde.
int är heltal mellan -32768 och + 32767.
long är långt heltal.
float är 32-bitars flyttal med 6 signifikanta siffror.
double är flyttal med dubbel precision.
char är tecken, en byte långt.
char [] är tecken. Inom [] anges hur många tecken som ska rymmas i ordet.

  int n,m;
  char ord[15];

........
Funktionsanrop.

  // Dra utgång 1
  relay(UT1,9);	// utgång 1 i 9 sek
  // Utgång 2
  relay(UT2,6);	// utgång 2 i 6 sek
........

Huvudprogram, slut.

  // Programmet slut    
  pfio_deinit();
}

........
Funktioner.
I de fall man placerar sina funktioner i slutet av koden måste man definiera dem i början, före main().

Fuktioner inleds alltid med { och avslutas alltid med }

.

  int venta()
  {
	  int n =0;
	  n = pfio_digital_read(IN2);
	  if(n != 0){
		  stop = 1;
	  }								
	  sleep(1);
	  niva();
	  tid = tid +1;
	  return tid;
  }

  int relay(int relaynr, int sek)
  {
	  tid = 0;
	  // Dra utgång relaynr
	  printf("Drar utgång %d\n",relaynr+1);
	  pfio_digital_write(relaynr, TILL);
	  while (tid < sek){
		  venta();
	  }
	  // Släpp utgång relaynr
	  pfio_digital_write(relaynr, FRAN);
}



Komplett program.
Programmet är för Raspberry Pi med PiFace Digital I/O.


Till början.



Headerfiler.


Header-filerna innehåller färdiga funktioner för olika ändamål. <stdio.h> till exempel innehåller funktioner för att hantera in- och utmatning av bland annat text.


<assert.h> · <ctype.h> · <errno.h> · <float.h> · <iso646.h> · <limits.h> · <locale.h> · <math.h> · <setjmp.h> · <signal.h> · <stdarg.h> · <stddef.h> · <stdio.h> · <stdlib.h> · <string.h> · <time.h> · <wchar.h> · <wctype.h>

Länk till beskrivning av vilka funktioner repektive header-fil innehåller.
.


Till början.



Kommandon.



For-loop
Olika sätt att skriva en for-loop.
Först:
for(;;)
vilket ger en oändlig loop.

Dessutom kan man skriva:
for(;x == y;)
vilket gör att loopen körs ända tills x=y sätts med ett annat kommando inne i loopen.

Den normala for-loopen:
for(i = 1; i <= 10; i++)

Textsträngar.
Strängar måste hanteras på ett lite annorlunda sätt än siffervariabler. Strängvariabler hanteras som följd av tal med avslutande nolltecken '\0'.
För det första måste programmet innehålla direktivet: #include <string.h>
Därpå ska strängvariabel definieras:
char *str1 = "HELLO";
char str2[10];
Första radens *str1 är en pekare till platsen där ordet HELLO lagras.
Andra radens str2[10] skapar bara ett minnesutrymme på 10 tecken.

Exempel på hur man kan föra med sig en strängvariabels värde till en funktion:


Länk: String Handling



Till början.



Kompilering.


Det simplaste kommandot för att kompilera ett C-program är:
gcc programnamn.c
Detta ger den körbara filen a.out
Ett bättre sätt är att lägga till flaggan -o och programnamn:
gcc programnamn.c -o programnamn
Det ger den körbara filen programnamn

Ofta behöver man lägga till ett flertal flaggor för att kompilatorn ska hitta specifika programbibliotek. Exempel:
gcc programnamn.c -L/usr/lib64/mysql -L/usr/lib64 -lmysqlclient -o programnamn
Flaggorna -L och -l anger programbibliotek som behövs för att kompilatorn ska hitta funktioner som anropas inne i programmet programnamn


Till början.



Exekvering.


Avbryta körningen/exekveringen av ett program i Linux.
1. Ett program som körs i ett terminalfönster.
Programmet kan avbrytas med tangenttryckningen Ctrl-C. Tryck ner tangenterna Ctrl och C samtidigt.
2. Ett program som körs i bakgrunden.
Börja med att kör shellkommandot ps -ef som listar processerna som pågår. Leta i listan efter kommandot/programnamnet som startade programmet,
ssh pi@caesarion_wifi. Notera PID, processID. Kör shellkommando kill -9 PID. Byt ut PID mot det nummer som du fann i listan, t ex kill -9 8053.


Till början.



Utility, Hjälpmedel.


Ett bra IDE, Integrated development environment, (ett grafiskt utvecklingshjälpmedel) är Geany.
Ett hyfsat program för att skapa flödesscheman är Dia.


Till början.



Länkar.


Standard C. http://cs.stmarys.ca/~porter/csc/ref/std_c/
C Tutorial. http://www.cprogramming.com/tutorial/c-tutorial.html
Programming in C. http://www.cs.cf.ac.uk/Dave/C/
LÄTTPOCKET om C-programmering av Jesper EK. Dataförlaget.
C - Wikipedia.

.


Till början.