En ce qui concerne la communication, elle fonctionne car j'ai créé une fonction C :
1 2 3
| void Test(){
printf("Test !");
} |
Lorsque je l'appelle du C#, cela fonctionne.
En ce qui concerne le format des paramètres dans le C c'est un unsigned long, j'ai mis uint en C# .... mais je vais tester avec UInt32 ... je vous tient au courant.
-- Edit
Le changement de type n'y fait rien, en fait j'avais déjà changé.
En fait, le programme plante lorsque j'appelle cette fonction :
SetGPIODir(GPIO_GND, DIR_OUT);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| /*
gpioNum: GPIO Number
dirOut: GPIO Direction [true:Output false:Input]
*/
void SetGPIODir(DWORD gpioNum, BOOL dirOut)
{
DWORD lockID;
DWORD offset =0;
if(gpioNum>95)
offset =OFFSET_REG3;
lockID=LockAccess(0);
if(dirOut)
*(((DWORD*)&(pGPIOReg->gpdr0))+(gpioNum>>5)+offset)|= (1<<(gpioNum&31));
else
*(((DWORD*)&(pGPIOReg->gpdr0))+(gpioNum>>5)+offset)&= ~(1<<(gpioNum&31));
UnlockAccess(lockID);
} |
où pGPIOReg est defini en global :
static GPIOREG * pGPIOReg = (GPIOREG*)GPIO_BASE;
GPIOREG etant une structure :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| typedef volatile struct
{
DWORD gplr0; // Level Reg. Bank 0
DWORD gplr1; // Level Reg. Bank 1
DWORD gplr2; // Level Reg. Bank 2
DWORD gpdr0; // Direction Reg. Bank 0
DWORD gpdr1; // Direction Reg. Bank 1
DWORD gpdr2; // Direction Reg. Bank 2
DWORD gpsr0; // Output Set Reg. Bank 0
DWORD gpsr1; // Output Set Reg. Bank 1
DWORD gpsr2; // Output Set Reg. Bank 2
DWORD gpcr0; // Output Clr Reg. Bank 0
DWORD gpcr1; // Output Clr Reg. Bank 1
DWORD gpcr2; // Output Clr Reg. Bank 2
DWORD grer0; // Ris. Edge Detect Enable Reg. Bank 0
DWORD grer1; // Ris. Edge Detect Enable Reg. Bank 1
DWORD grer2; // Ris. Edge Detect Enable Reg. Bank 2
DWORD gfer0; // Fal. Edge Detect Enable Reg. Bank 0
DWORD gfer1; // Fal. Edge Detect Enable Reg. Bank 1
DWORD gfer2; // Fal. Edge Detect Enable Reg. Bank 2
DWORD gedr0; // Edge Detect Status Reg. Bank 0
DWORD gedr1; // Edge Detect Status Reg. Bank 1
DWORD gedr2; // Edge Detect Status Reg. Bank 2
DWORD gafr0_l; // Alt. Function Select Reg.[ 0:15 ]
DWORD gafr0_u; // Alt. Function Select Reg.[ 16:31 ]
DWORD gafr1_l; // Alt. Function Select Reg.[ 32:47 ]
DWORD gafr1_u; // Alt. Function Select Reg.[ 48:63 ]
DWORD gafr2_l; // Alt. Function Select Reg.[ 64:79 ]
DWORD gafr2_u; // Alt. Function Select Reg.[ 80:95 ]
DWORD gafr3_l; // Alt. Function Select Reg.[ 96:111]
DWORD gafr3_u; // Alt. Function Select Reg.[112:120]
DWORD res1[35];
DWORD gplr3; // Level Detect Reg. Bank 3
DWORD res2[2];
DWORD gpdr3; // Data Direction Reg. Bank 3
DWORD res3[2];
DWORD gpsr3; // Pin Output Set Reg. Bank 3
DWORD res4[2];
DWORD gpcr3; // Pin Output Clr Reg. Bank 3
DWORD res5[2];
DWORD grer3; // Ris. Edge Detect Enable Reg. Bank 3
DWORD res6[2];
DWORD gfer3; // Fal. Edge Detect Enable Reg. Bank 3
DWORD res7[2];
DWORD gedr3; // Edge Detect Status Reg. Bank 3
} GPIOREG; |
Partager