年前申请了一块stm32mp157开发板,工作之余研究了一下。STM32MP1多核微处理器,带有650Mhz主频的cortex-A7双核以及一个主频为209Mhz的cortex-M4核。很适合需要上linux系统,同时又需要一些实时需求场合的项目。拿到开发板按官方wiki教程(https://wiki.st.com/stm32mpu)一步一步操作。烧录了openstlinux-4.19系统。系统启动后进入主界面。
图形界面是基于GTK+的,之前在Ubuntu上接触过。使用glade3工具很方便开发出一些小工具。于是想用glade3开发界面编译后在stm32mp157开发板上运行。试了下还真可以。我开发环境是ubuntu16.04
glade3使用教程自行百度下,也不难上手。工具界面如下:
代码编写完后下载到开发板子
代码如下:
#include <gtk/gtk.h>
#include <string.h>
//全局变量
GtkWidget *g_text_view;
GtkTextBuffer *g_buffer;
GtkTextIter *g_Iter;
//我们在UI中,为button1添加的点击函数
static void button1_clicked_cb(GObject *object, gpointer user_data)
{
const gchar *text = &quot;How are you!&quot;;
GtkTextIter start,end;
gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(g_buffer), &start,&end); /*获得缓冲区开始和结束位置的Iter*/
gtk_text_buffer_insert(GTK_TEXT_BUFFER(g_buffer), &start, text, strlen(text)); /*插入文本到缓冲区*/
// g_print(user_data);
// g_print(&quot;\n&quot;);
}
//我们在UI中,为button1添加的点击函数
static void button2_clicked_cb(GObject *object, gpointer user_data)
{
g_print(user_data);
g_print(&quot;\n&quot;);
}
// static void gtk_main_quit(GObject *object, gpointer user_data)
// {
// }
int main(int argc, char *argv[])
{
GObject *button1, *button2;
GtkBuilder *builder;
GtkWidget *window;
// GtkWidget *textView1;
// GtkTextBuffer *buffer;
//1.gtk初始化
gtk_init(&argc,&argv);
//2.创建GtkBuilder对象,GtkBuilder在<gtk/gtk.h>声明
builder = gtk_builder_new();
//3.读取test.glade文件的信息,保存在builder中
if ( !gtk_builder_add_from_file(builder,&quot;test1.glade&quot;, NULL)) {
printf(&quot;connot load file!&quot;);
}
//4.获取窗体指针,注意&quot;window1&quot;要和glade里面的标签名词匹配
window = GTK_WIDGET(gtk_builder_get_object(builder,&quot;window1&quot;));
button1 = gtk_builder_get_object(builder, &quot;btn1&quot;);
button2 = gtk_builder_get_object(builder, &quot;btn2&quot;);
g_text_view = GTK_WIDGET(gtk_builder_get_object(builder, &quot;textview1&quot;));
//测试TextView
g_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(g_text_view)); /*获得文本框缓冲区*/
//手动连接信号
// g_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);
g_signal_connect(button1, &quot;clicked&quot;, G_CALLBACK(button1_clicked_cb), &quot;press button1&quot;);
g_signal_connect(button2, &quot;clicked&quot;, G_CALLBACK(button2_clicked_cb), &quot;press button2&quot;);
// gtk_builder_connect_signals (builder, NULL);//连接响应事件
g_object_unref(G_OBJECT(builder)); //释放xml内存空间
gtk_widget_show_all(window);
gtk_main();
return 0;
}
测试程序实现的功能比较简单,两个按键和一个文本框。key1触发文本框显示一次 How are you!。key2在终端显示press button2。
完整工程在附近中。 |