2016-11-01 6 views
0

GUI自体が正常に起動します。ボタンが押されるたびに、DACのSPIを話す機能が呼び出されます。ボタンが押され、関数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:アサーション 'GTK_IS_SPIN_BUTTON(spin_button')

ここでは私のソースコードです:

#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); 
} 

そしてここにはあります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の:45:116警告:互換性のない ポインタ型WRITE_DACから 'gtk_spin_button_get_value_as_int' の 引数1を通過(gtk_spin_button_get_value_as_int(spin1)、1,2) ; ^ main.cからの/usr/include/gtk-3.0/gtk/gtk.h:185:0、 からのファイル:4:/usr/include/gtk-3.0/gtk/gtkspinbutton.h:194: 7:note:予想される 'struct GtkSpinButton *'ですが、引数の型は 'struct GtkWidget *'ですgint 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); 
関連する問題