2016-11-01 3 views
0

GUI 자체가 정상적으로 시작됩니다. 버튼을 누를 때마다 SPI를 통해 DAC의 음성 기능이 호출됩니다. 버튼을 누르고 기능 gtk_spin_button_get_value_as_int()이 0을 반환하면 오류가 나타납니다. 그러나 버튼 자체가 작동합니다. Gtk : Gtk-CRITICAL ** : gtk_spin_button_get_value_as_int : 어설 션 'GTK_IS_SPIN_BUTTON (spin_button)'이 실패했습니다.

오류 메시지 :

은 Gtk-CRITICAL ** : gtk_spin_button_get_value_as_int : 여기

#include<stdio.h> 
#include<wiringPi.h> 
#include<gtk/gtk.h> 

#define SPAM 1 

#define SPIDELAY 500 


#define CPLDSPEED 500000 
#define DACSPEED 500000 


GtkWidget *g_lbl_hello; 
GtkWidget *g_lbl_count; 
GtkWidget *spin1,*spin2,*spin3,*spin4,*spin5; 
int channel1,dac1=0; 
int channel2,dac2=0; 
int channel3,dac3=0; 
int channel4,dac4=0; 
int dac5=0; 

//Konvertierung der Adresse zum Sendeformat 
char createAdress(int channel,int dac){ 
    char aout; 
    int test; 
    test=(channel*16)+dac; 
    aout=(channel*16)+dac; 
    printf("\n\nAdeDEC:%i\n",test); 
    printf("Adresse:Fx%0x\n\n",aout); 
    return aout; 
} 

//Kovertierung des DACWertes zum Sendeformmat 
char *createValue(short dacvalue){ 

    static char vout[1]; 
    vout[1]=dacvalue & 0xFF; 
    vout[0]=dacvalue>>8; 
    printf("\n\nWert:Fx%02x%02x\n\n",vout[0],vout[1]); 
    return vout; 
} 

void write_dac(int value,int dac,int channel){ 
    //Sendeformat der Adresse 
    unsigned char a[0]; 
    printf("Schalte CS für DAC%i%i LOW\n",channel,dac); 
     a[0]=createAdress(channel,dac); 
     wiringPiSPIDataRW(0,a,1); 


    printf("Schreibe Wert %hu auf den DAC%i%i",value,channel,dac); 
    wiringPiSPIDataRW(1,createValue(value),2); 

    printf("Schalte CS für DAC%i%i HIGH\n",channel,dac); 
     a[0]=0x00; 
     wiringPiSPIDataRW(0,a,1); 

} 


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

    //Sendeformat des DAC-Wertes 
    unsigned char *v; 

    //Zwischenspeicher für die Daten 
    unsigned short value; 
    int channel,dac, spilocj=0; 
     //SPI Setup 
     wiringPiSetup(); 
    //Kommunikation mit CPLD wird eingerichtet 
     if (wiringPiSPISetup(0,CPLDSPEED)==-1) 
     { 
       printf("Du hast was falsch gemacht beim CPLDSPI\n"); 
     } 

    //Kommunikation mit DAC wird eingerichtet 
     if (wiringPiSPISetup(1,DACSPEED)==-1) 
     { 
       printf("Du hast was falsch gemacht beim DACSPI\n"); 
     } 


    GtkBuilder  *builder; 
    GtkWidget  *window; 

    gtk_init(&argc, &argv); 

    builder = gtk_builder_new(); 
    gtk_builder_add_from_file (builder, "Testgui.glade", NULL); 

    window = GTK_WIDGET(gtk_builder_get_object(builder, "window1")); 
    gtk_builder_connect_signals(builder, NULL); 

    g_object_unref(builder); 

    gtk_widget_show(window); 
    gtk_main(); 

    return 0; 
} 

void prg_dac1(){ 
    write_dac(gtk_spin_button_get_value_as_int(spin1),1,2); 
} 

void prg_dac2(){ 
    write_dac(gtk_spin_button_get_value_as_int(spin2),2,2); 
} 

void prg_dac3(){ 
    write_dac(gtk_spin_button_get_value_as_int(spin3),3,2); 
} 

void prg_dac4(){ 
    write_dac(gtk_spin_button_get_value_as_int(spin4),4,2); 
} 

void prg_dac5(){ 
    write_dac(gtk_spin_button_get_value_as_int(spin5),5,2); 
} 

그리고 : 주장 'GTK_IS_SPIN_BUTTON (spin_button)는'여기

내 소스 코드입니다 GtkBuilder 파일로 저장된 Gladeproject :

<?xml version="1.0" encoding="UTF-8"?> 
<interface> 
    <!-- interface-requires gtk+ 3.0 --> 
    <object class="GtkAdjustment" id="dacwerte1"> 
    <property name="upper">65535</property> 
    <property name="step_increment">1</property> 
    <property name="page_increment">10</property> 
    </object> 
    <object class="GtkAdjustment" id="dacwerte2"> 
    <property name="upper">65535</property> 
    <property name="step_increment">1</property> 
    <property name="page_increment">10</property> 
    </object> 
    <object class="GtkAdjustment" id="dacwerte3"> 
    <property name="upper">65535</property> 
    <property name="step_increment">1</property> 
    <property name="page_increment">10</property> 
    </object> 
    <object class="GtkAdjustment" id="dacwerte4"> 
    <property name="upper">65535</property> 
    <property name="step_increment">1</property> 
    <property name="page_increment">10</property> 
    </object> 
    <object class="GtkAdjustment" id="dacwerte5"> 
    <property name="upper">65535</property> 
    <property name="step_increment">1</property> 
    <property name="page_increment">10</property> 
    </object> 
    <object class="GtkWindow" id="window1"> 
    <property name="can_focus">False</property> 
    <child> 
     <object class="GtkGrid" id="grid2"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <child> 
      <object class="GtkLabel" id="label5"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="label" translatable="yes">DAC2</property> 
      </object> 
      <packing> 
      <property name="left_attach">1</property> 
      <property name="top_attach">1</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkLabel" id="label6"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="label" translatable="yes">DAC3</property> 
      </object> 
      <packing> 
      <property name="left_attach">2</property> 
      <property name="top_attach">1</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkLabel" id="label7"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="label" translatable="yes">DAC4</property> 
      </object> 
      <packing> 
      <property name="left_attach">3</property> 
      <property name="top_attach">1</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkLabel" id="label8"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="label" translatable="yes">DAC5</property> 
      </object> 
      <packing> 
      <property name="left_attach">4</property> 
      <property name="top_attach">1</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkButton" id="button1"> 
      <property name="label" translatable="yes">button</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">True</property> 
      <signal name="clicked" handler="prg_dac1" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">0</property> 
      <property name="top_attach">3</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkButton" id="button2"> 
      <property name="label" translatable="yes">button</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">True</property> 
      <signal name="clicked" handler="prg_dac2" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">1</property> 
      <property name="top_attach">3</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkButton" id="button3"> 
      <property name="label" translatable="yes">button</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">True</property> 
      <signal name="clicked" handler="prg_dac3" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">2</property> 
      <property name="top_attach">3</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkButton" id="button4"> 
      <property name="label" translatable="yes">button</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">True</property> 
      <signal name="clicked" handler="prg_dac4" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">3</property> 
      <property name="top_attach">3</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkButton" id="button5"> 
      <property name="label" translatable="yes">button</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">True</property> 
      <signal name="clicked" handler="prg_dac5" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">4</property> 
      <property name="top_attach">3</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkToolbar" id="toolbar1"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="toolbar_style">icons</property> 
      <property name="icon_size">10</property> 
      </object> 
      <packing> 
      <property name="left_attach">0</property> 
      <property name="top_attach">0</property> 
      <property name="width">5</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkLabel" id="DAC"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="label" translatable="yes">DAC1</property> 
      </object> 
      <packing> 
      <property name="left_attach">0</property> 
      <property name="top_attach">1</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkSpinButton" id="spin1"> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="max_length">5</property> 
      <property name="invisible_char">●</property> 
      <property name="activates_default">True</property> 
      <property name="width_chars">10</property> 
      <property name="invisible_char_set">True</property> 
      <property name="adjustment">dacwerte1</property> 
      <property name="climb_rate">1</property> 
      <property name="update_policy">if-valid</property> 
      <signal name="editing-done" handler="set_dac1" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">0</property> 
      <property name="top_attach">2</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkSpinButton" id="spin5"> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="max_length">5</property> 
      <property name="invisible_char">●</property> 
      <property name="width_chars">10</property> 
      <property name="invisible_char_set">True</property> 
      <property name="adjustment">dacwerte5</property> 
      <property name="climb_rate">0.02</property> 
      <property name="numeric">True</property> 
      </object> 
      <packing> 
      <property name="left_attach">4</property> 
      <property name="top_attach">2</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkSpinButton" id="spin4"> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="max_length">5</property> 
      <property name="invisible_char">●</property> 
      <property name="width_chars">10</property> 
      <property name="invisible_char_set">True</property> 
      <property name="adjustment">dacwerte4</property> 
      <signal name="editing-done" handler="set_dac4" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">3</property> 
      <property name="top_attach">2</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkSpinButton" id="spin3"> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="max_length">5</property> 
      <property name="invisible_char">●</property> 
      <property name="width_chars">10</property> 
      <property name="invisible_char_set">True</property> 
      <property name="adjustment">dacwerte3</property> 
      <property name="update_policy">if-valid</property> 
      <signal name="editing-done" handler="set_dac3" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">2</property> 
      <property name="top_attach">2</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkSpinButton" id="spin2"> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="max_length">5</property> 
      <property name="invisible_char">●</property> 
      <property name="width_chars">10</property> 
      <property name="invisible_char_set">True</property> 
      <property name="input_purpose">number</property> 
      <property name="adjustment">dacwerte2</property> 
      <property name="wrap">True</property> 
      <signal name="editing-done" handler="set_dac2" swapped="no"/> 
      </object> 
      <packing> 
      <property name="left_attach">1</property> 
      <property name="top_attach">2</property> 
      <property name="width">1</property> 
      <property name="height">1</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
    <object class="GtkWindowGroup" id="windowgroup1"/> 
</interface> 

추가 할 때 GtkWidget 포인터 spin1 등과 관련된 데이터 유형에 대한 컴파일 경고가 표시됩니다. 그러나 데이터 유형을 적절한 것으로 변경하면 GtkSpinButton이 도움이되지 않습니다.

의 main.c : 함수 'prg_dac1'에서 다음의 main.c : 116 : 45 :주의 : 호환 포인터 형 WRITE_DAC에서 'gtk_spin_button_get_value_as_int'의 1 인수 전달 (gtk_spin_button_get_value_as_int (spin1), 1,2) ; ^ main.c : 4에서 /usr/include/gtk-3.0/gtk/gtk.h:185:0, 의 파일에 있음 : /usr/include/gtk-3.0/gtk/gtkspinbutton.h:194 : 7 : 참고 : 'struct GtkSpinButton *'이 (가) 예상되지만 'struct GtkWidget *'유형의 인수입니다. gtk_spin_button_get_value_as_int (GtkSpinButton * spin_button);

답변

0

Glade 파일의 개체에는 spin1 등을 할당하지 마십시오. gtk_builder_get_object()을보십시오.

경고 유형을 없애려면 호출 사이트에서 명시 적 변환을 사용하고 변수 유형을 GtkWidget으로 유지하십시오. GTK +는 사용할 수있는 특수 매크로를 제공합니다 :

write_dac(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin1)),1,2);