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)'이 실패했습니다.
내 소스 코드입니다 GtkBuilder 파일로 저장된 Gladeproject :은 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)는'여기
<?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);