error: incompatible types in assignement



  • #include <stdlib.h>
    #include <stdio.h>
    
    extern volatile int test(unsigned char* adr);
    
    int mutex_lock(unsigned char* stink)
    {
    	printf("%d",stink);
    	return test(stink);
    }
    
    int main()
    {
    	unsigned char a[200];
    	a = "h";
    	while(!mutex_lock(&a));
    	printf("erstes mutex geschafft");
    	while(!mutex_lock(&a));
    
    	return 0;
    }
    

    Er gibt mir diese Fehlermeldungen beim compilieren aus:

    mutex.c: In function 'main':
    mutex.c:16: error: incompatible types in assignment (=a = "h";)
    mutex.c:17: warning: passing argument 1 of 'mutex_lock' from incompatible pointer type (=while(!mutex_lock(&a));)
    mutex.c:19: warning: passing argument 1 of 'mutex_lock' from incompatible pointer type (=while(!mutex_lock(&a));)

    kann mir bitte jemand sagen was ich falsch mache? grad schein ich irgendwie ein wenig blind zu sein.

    vielen dank im voraus

    P.S.: Falls es jemanden interessiert. assemblercode der test:
    .file "test.c"
    .section ".text"
    .align 4
    .global test
    .type test, #function
    .proc 04
    test:
    ldstub [%o0], %o0
    retl
    nop
    .LL2:
    jmp %o7+8
    mov 0, %o0
    .size test, .-test
    .ident "GCC: (GNU) 4.0.2"



  • unsigned char a[200] = "h"; 
    while(!mutex_lock(a));
    ...
    


  • ich hab das mitlerweile geändert und daher sieht der code so aus:

    #include <stdlib.h>
    #include <stdio.h>
    
    //extern int test(unsigned char* adr);
    extern int tsl(unsigned char* adr);
    
    void mutex_lock(unsigned char* stink)
    {
    
    	while(!tsl(stink));
    
    }
    
    unsigned char a;
    
    int main()
    {
    
    	mutex_lock(&a);
    	mutex_lock(&a);
    
    	return 0;
    }
    

    er compiliert alles und das programm läuft durch. sollte es aber nicht. er soltle sich beim 2. aufruf der mutex_lock in einer endlosschleife befinden.

    kann das irgendwie an den übergaben liegen? mach ich da vielleicht doch was falsch? die funktion tsl ist scheinbar korrekt und vorgegeben. Jemand ne idee?

    danke nochmals


Anmelden zum Antworten