Thread View: be.comp.programming
13 messages
13 total messages
Started by Toni Van Remortel
Wed, 12 Nov 2003 12:41
pointer naar table
Author: Toni Van Remortel
Date: Wed, 12 Nov 2003 12:41
Date: Wed, 12 Nov 2003 12:41
34 lines
2516 bytes
2516 bytes
Besten, Lang geleden was mijn kennis van ANSI C wat beter dan nu. Ik tracht het volgende te implementeren: int table_project[360][5]; int table_calculate[360][5]; Dus 2 tabellen. Nu moet ik 2 vaste pointers hebben naar die tabellen: 133: int *project_table; 134: project_table = &table_project; zodat ik in een functie beide kan swappen. Doel is dat ��n thread table_calculate vult, terwijl een andere thread table_project uitleest. Als table_calculate vol is, moeten zij geswitched worden van thread, zodat table_project kan opgevuld worden en table_calculate uitgelezen. Lijkt me toch haalbaar met pointers (daar de pointer-naam in beide threads niet kan gewijzigd worden). Hopelijk is mijn uitleg voldoende. Maar ik zit vast. Kan iemand me even duidelijk uitleggen hoe ik dat moet aanpakken? De bovenstaande code levert me enkel dit op: rt_mod.c:134: warning: type defaults to `int' in declaration of `project_table' rt_mod.c:134: conflicting types for `project_table' rt_mod.c:133: previous declaration of `project_table' rt_mod.c:134: warning: initialization makes integer from pointer without a cast rt_mod.c:134: warning: data definition has no type or storage class Makes no sense to me anymore :( -- Groeten, Toni Van Remortel Wetenschappelijk medewerker, D-science lab, Hogeschool Antwerpen Real time Linux for embedded systems: http://linemb.d-sciencelab.com
Re: pointer naar table
Author: Toni Van Remortel
Date: Wed, 12 Nov 2003 13:35
Date: Wed, 12 Nov 2003 13:35
11 lines
1402 bytes
1402 bytes
Op Wed, 12 Nov 2003 12:41:26 +0000, schreef Toni Van Remortel : [pointer stuff] OK, heb het al wat eenvoudiger kunnen maken. Hoe kan ik nu 2 tabellen swappen? -- Groeten, Toni Van Remortel Wetenschappelijk medewerker, D-science lab, Hogeschool Antwerpen Real time Linux for embedded systems: http://linemb.d-sciencelab.com
Re: pointer naar table
Author: Luc Kumps
Date: Wed, 12 Nov 2003 13:50
Date: Wed, 12 Nov 2003 13:50
23 lines
1613 bytes
1613 bytes
Toni Van Remortel wrote: > Besten, > > Lang geleden was mijn kennis van ANSI C wat beter dan nu. > Ik tracht het volgende te implementeren: > > int table_project[360][5]; > int table_calculate[360][5]; > > Dus 2 tabellen. Nu moet ik 2 vaste pointers hebben naar die tabellen: > > 133: int *project_table; > 134: project_table = &table_project; > typedef int tabletype[360][5]; tabletype table_project; tabletype table_calculate; tabletype *project_table; project_table = &table_project; (*project_table)[4][3] = 123; // Luc K
Re: pointer naar table
Author: Roel Schroeven
Date: Wed, 12 Nov 2003 13:55
Date: Wed, 12 Nov 2003 13:55
25 lines
1633 bytes
1633 bytes
Toni Van Remortel wrote: > Besten, > > Lang geleden was mijn kennis van ANSI C wat beter dan nu. > Ik tracht het volgende te implementeren: > > int table_project[360][5]; > int table_calculate[360][5]; > > Dus 2 tabellen. Nu moet ik 2 vaste pointers hebben naar die tabellen: > > 133: int *project_table; > 134: project_table = &table_project; De tabel is een array van arrays, dus je moet twee maal '*' gebruiken: int **project_table; En die '&' moet je niet gebruiken: 'table_project' op zich is al het adres van het eerste element: project_table = table_project. -- "Codito ergo sum" Roel Schroeven
Re: pointer naar table
Author: Toni Van Remortel
Date: Wed, 12 Nov 2003 13:58
Date: Wed, 12 Nov 2003 13:58
16 lines
1696 bytes
1696 bytes
Op Wed, 12 Nov 2003 13:35:52 +0000, schreef Toni Van Remortel : > Op Wed, 12 Nov 2003 12:41:26 +0000, schreef Toni Van Remortel : > [pointer stuff] > > OK, heb het al wat eenvoudiger kunnen maken. > > Hoe kan ik nu 2 tabellen swappen? Merci voor de tips. Ik heb het dus anders aangepakt. En een tabel kopi�ren is rap gedaan met 'memcpy' :) -- Groeten, Toni Van Remortel Wetenschappelijk medewerker, D-science lab, Hogeschool Antwerpen Real time Linux for embedded systems: http://linemb.d-sciencelab.com
Re: pointer naar table
Author: Roel Schroeven
Date: Wed, 12 Nov 2003 14:28
Date: Wed, 12 Nov 2003 14:28
21 lines
1691 bytes
1691 bytes
Toni Van Remortel wrote: > Op Wed, 12 Nov 2003 13:35:52 +0000, schreef Toni Van Remortel : > >> Op Wed, 12 Nov 2003 12:41:26 +0000, schreef Toni Van Remortel : >> [pointer stuff] >> >> OK, heb het al wat eenvoudiger kunnen maken. >> >> Hoe kan ik nu 2 tabellen swappen? > > Merci voor de tips. Ik heb het dus anders aangepakt. > > En een tabel kopiëren is rap gedaan met 'memcpy' :) Euh... dat hangt ervan af hoe groot die tabel is. Mij lijkt dat een hoop verspilde cycles, als het ook anders kan. -- "Codito ergo sum" Roel Schroeven
Re: pointer naar table
Author: Toni Van Remortel
Date: Wed, 12 Nov 2003 15:02
Date: Wed, 12 Nov 2003 15:02
29 lines
2166 bytes
2166 bytes
Op Wed, 12 Nov 2003 14:28:44 +0000, schreef Roel Schroeven : > Toni Van Remortel wrote: > >> Op Wed, 12 Nov 2003 13:35:52 +0000, schreef Toni Van Remortel : >> >>> Op Wed, 12 Nov 2003 12:41:26 +0000, schreef Toni Van Remortel : >>> [pointer stuff] >>> >>> OK, heb het al wat eenvoudiger kunnen maken. >>> >>> Hoe kan ik nu 2 tabellen swappen? >> >> Merci voor de tips. Ik heb het dus anders aangepakt. >> >> En een tabel kopiëren is rap gedaan met 'memcpy' :) > > Euh... dat hangt ervan af hoe groot die tabel is. Mij lijkt dat een hoop > verspilde cycles, als het ook anders kan. Da's wel waar. Maar momenteel is een werkend geheel prioritair tov snellere code. Eens er een werkend exemplaar is, ga ik die pointers er induwen om cycles te winnen. Zoals ik oorspronkelijk gepland had. Tnx 4 the info. -- Groeten, Toni Van Remortel Wetenschappelijk medewerker, D-science lab, Hogeschool Antwerpen Real time Linux for embedded systems: http://linemb.d-sciencelab.com
Re: pointer naar table
Author: Toni Van Remortel
Date: Wed, 12 Nov 2003 15:14
Date: Wed, 12 Nov 2003 15:14
17 lines
1578 bytes
1578 bytes
Op Wed, 12 Nov 2003 13:50:48 +0000, schreef Luc Kumps : > typedef int tabletype[360][5]; > tabletype table_project; > tabletype table_calculate; > tabletype *project_table; > project_table = &table_project; Heel bruikbaar. Nog een vraagje: Kan ik die [5] vervangen door een struct? Dus zodanig dat ik een array van struct heb? -- Groeten, Toni Van Remortel Wetenschappelijk medewerker, D-science lab, Hogeschool Antwerpen Real time Linux for embedded systems: http://linemb.d-sciencelab.com
Re: pointer naar table
Author: Luc Kumps
Date: Wed, 12 Nov 2003 15:27
Date: Wed, 12 Nov 2003 15:27
21 lines
1602 bytes
1602 bytes
Toni Van Remortel wrote:
> Op Wed, 12 Nov 2003 13:50:48 +0000, schreef Luc Kumps :
>
>> typedef int tabletype[360][5];
>> tabletype table_project;
>> tabletype table_calculate;
>> tabletype *project_table;
>> project_table = &table_project;
>
> Heel bruikbaar.
>
> Nog een vraagje:
> Kan ik die [5] vervangen door een struct? Dus zodanig dat ik een
> array van struct heb?
struct myStruct {
int a,b,c,d,e;
};
typedef struct myStruct tabletype[360];
// Luc K
Re: pointer naar table
Author: staf wagemakers
Date: Wed, 12 Nov 2003 15:44
Date: Wed, 12 Nov 2003 15:44
53 lines
2151 bytes
2151 bytes
On 2003-11-12, Roel Schroeven <rschroeven_nospam_ml@fastmail.fm> wrote:
> Toni Van Remortel wrote:
>
>>
>> int table_project[360][5];
>> int table_calculate[360][5];
>>
>> Dus 2 tabellen. Nu moet ik 2 vaste pointers hebben naar die tabellen:
>>
>> 133: int *project_table;
>> 134: project_table = &table_project;
>
> De tabel is een array van arrays, dus je moet twee maal '*' gebruiken:
> int **project_table;
>
> En die '&' moet je niet gebruiken: 'table_project' op zich is al het adres
> van het eerste element:
> project_table = table_project.
>
In principe moet je "int (*project_table)[5]" gebruiken "project_table" is
pointer naar een int array met 5 elementen...
swappen wordt dan een koud kunstje:
main () {
int table_project[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
int table_calculate[2][5]={{11,12,13,14,15},{16,17,18,19,20}};
int (*pt1)[5],(*pt2)[5],(*pt3)[5];
pt1=table_project;
pt2=table_calculate;
printf("%d\n",table_project[1][4]);
printf("%d\n",table_calculate[1][4]);
puts("---------------");
printf("%d\n",pt1[1][4]);
printf("%d\n",pt2[1][4]);
puts("---------------");
pt3=pt1;
pt1=pt2;
pt2=pt3;
printf("%d\n",pt1[1][4]);
printf("%d\n",pt2[1][4]);
}
--
Staf Wagemakers
email: staf at patat.org
homepage: http://staf.patat.org
Re: pointer naar table
Author: Toni Van Remortel
Date: Wed, 12 Nov 2003 15:54
Date: Wed, 12 Nov 2003 15:54
48 lines
2641 bytes
2641 bytes
Op Wed, 12 Nov 2003 15:27:47 +0000, schreef Luc Kumps :
> Toni Van Remortel wrote:
>> Op Wed, 12 Nov 2003 13:50:48 +0000, schreef Luc Kumps :
>>
>>> typedef int tabletype[360][5];
>>> tabletype table_project;
>>> tabletype table_calculate;
>>> tabletype *project_table;
>>> project_table = &table_project;
>>
>> Heel bruikbaar.
>>
>> Nog een vraagje:
>> Kan ik die [5] vervangen door een struct? Dus zodanig dat ik een
>> array van struct heb?
>
> struct myStruct {
> int a,b,c,d,e;
> };
> typedef struct myStruct tabletype[360];
>
> // Luc K
OK, alvast merci voor de info, maar ik zit nu met het volgende:
typedef struct laserpoint
{ u8 x,y,signx,signy,onoff;
} tabletype[POINTS_PER_REV];
tabletype table_project; // the project table
tabletype table_calculate; // the calculate table
tabletype *p_project; // project pointer
tabletype *p_calculate; // calculate pointer
p_project = &table_project;
p_calculate = &table_calculate;
(*p_calculate)[i].x = (u8)(x*63.0) & 0x3F;
Op die laatste lijn geeft de compiler:
invalid type argument of `unary *'
Ik vermoed dat het een restrictie is van de compilatie (het is een Linux
kernel module). Of maak ik toch ergens een fout?
--
Groeten, Toni Van Remortel
Wetenschappelijk medewerker, D-science lab, Hogeschool Antwerpen
Real time Linux for embedded systems: http://linemb.d-sciencelab.com
Re: pointer naar table
Author: Luc Kumps
Date: Wed, 12 Nov 2003 16:39
Date: Wed, 12 Nov 2003 16:39
42 lines
2605 bytes
2605 bytes
Toni Van Remortel wrote:
> OK, alvast merci voor de info, maar ik zit nu met het volgende:
>
> typedef struct laserpoint
> { u8 x,y,signx,signy,onoff;
> } tabletype[POINTS_PER_REV];
> tabletype table_project; // the project table
> tabletype table_calculate; // the calculate table
> tabletype *p_project; // project pointer
> tabletype *p_calculate; // calculate pointer
> p_project = &table_project;
> p_calculate = &table_calculate;
>
> (*p_calculate)[i].x = (u8)(x*63.0) & 0x3F;
>
> Op die laatste lijn geeft de compiler:
>
> invalid type argument of `unary *'
>
> Ik vermoed dat het een restrictie is van de compilatie (het is een
> Linux kernel module). Of maak ik toch ergens een fout?
Ik heb dit eens gecompileerd met de laatste MS VC++ compiler, en ook eens
met de oeroude Borland 3.1 (DOS) compiler, het geeft geen enkel probleem.
Wat gebeurt er als je het als volgt doet:
typedef struct laserpoint
{ unsigned int x,y,signx,signy,onoff;
} tabletype;
tabletype table_project[365]; // the project table
tabletype table_calculate[365]; // the calculate table
tabletype *p_project; // project pointer
tabletype *p_calculate; // calculate pointer
p_project = &table_project[0];
p_calculate = &table_calculate[0];
p_calculate[1].x = (unsigned int)(22*63.0) & 0x3F;
// Luc K
'
Re: pointer naar table
Author: Toni Van Remortel
Date: Thu, 13 Nov 2003 08:35
Date: Thu, 13 Nov 2003 08:35
31 lines
2499 bytes
2499 bytes
Op Wed, 12 Nov 2003 16:39:09 +0000, schreef Luc Kumps :
> Ik heb dit eens gecompileerd met de laatste MS VC++ compiler, en ook
> eens met de oeroude Borland 3.1 (DOS) compiler, het geeft geen enkel
> probleem.
Heb ontdekt dat je voor een Linux kernel module blijkbaar niet alles mag
gebruiken qua pointers. Jammer. Toch bedankt voor de info. Alle
voorstellen geven getzelfde probleem: pointers naar een tabel lukken
gewoonweg niet.
Een andere oplossing zoeken dan maar.
> Wat gebeurt er als je het als volgt doet:
>
> typedef struct laserpoint
> { unsigned int x,y,signx,signy,onoff;
> } tabletype;
> tabletype table_project[365]; // the project table tabletype
> table_calculate[365]; // the calculate table tabletype *p_project; //
> project pointer tabletype *p_calculate; // calculate pointer
>
> p_project = &table_project[0];
> p_calculate = &table_calculate[0];
Geeft dezelfde errors.
--
Groeten, Toni Van Remortel
Wetenschappelijk medewerker, D-science lab, Hogeschool Antwerpen
Real time Linux for embedded systems: http://linemb.d-sciencelab.com
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads