主题中讨论的其他器件: TM4C129XNCZAD
大家好、
我正在使用 EK-TM4C1294XL launchpad、我正在尝试实现图形库的键盘小工具。
我可以将键盘放在显示屏上、但当我按下键盘上的任何键时、代码会挂起并进入故障 ISR。
请帮助解决此问题。 我已附上我的代码。
// //键盘光标闪烁速率。 // #define keyboard_BINK_RATE 100 // //键盘的当前字符串指针。 // static char *g_pcKeyStr; // 键盘的当前字符串索引。 // 静态 uint32_t g_ui32StringIdx; // 键盘上未显示任何内容时使用的占位符字符串。 // 静态 const char g_cTempStr = 0; // 键盘的当前字符串宽度(以像素为单位)。 // static Int32_t g_i32StringWidth; // 光标闪烁计数器。 // 静态易失性 uint32_t g_ui32CursorDelay; /**** 键盘******* / 键盘(键盘、键盘背景、0、0、 &g_sGrRaster16BppDriver、8、190、792、300、 键盘样式填充|键盘样式自动重复| keyboard_style_press_notify | keyboard_style_release_notify | Keyboard _style_BG、 ClrBlack、ClrGray、ClrDarkGray、ClrGray、ClrBlack、 G_psFontCms20b、 100、100、NUM_KEYBOARD_US_ENGLISH、g_psKeyboardUSENGLISH、KeyEvent); 画布(KeyboardText、&KeyboardBackground、&Keyboard、0、 &g_sGrRaster16BppDriver、X_OFFSET、Y_OFFSET、 800、180、 canva_style_app_leed|canva_style_fill | canva_style_text | canva_style_text_left、 ClrBlack、ClrWhite、ClrWhite、g_psFontCms24、&g_cTempStr、 0、文本区域); Canvas (KeyboardBackground、widget_root、0、&KeyboardText、 &g_sGrRaster16BppDriver、X_OFFSET、Y_OFFSET、 800、480、 canva_style_fill、ClrBlack、ClrWhite、 ClrWhite,0,0,0,0); /********* / void textarea (tWidget *psWidget、tContext *psContext) { HandleKeyboard (); GrContextFontSet (psContext、g_psFontCms28b); 环境 ForegroundSet (psContext、ClrRed); GrStringDraw (psContext,"患者 ID:",-1, 5、5、0); GrStringDraw (psContext,"患者姓名:",-1, 5、40、0); GrStringDraw (psContext,"性别:",-1, 5、75、0); GrStringDraw (psContext、"age:"、-1、 5、110、0); GrStringDraw (psContext、"高度:"、-1、 555,5,0); GrStringDraw (psContext、"重量:"、-1、 555,40,0); GrStringDraw (psContext,"日期:",-1, 555,75,0); } void HandleKeyboard (void) { // //如果按中间值,则清除光标。 // if (g_ui32CursorDelay = keyboard_blink_rate / 2) { GrContextForegroundSet (&guiMainContext、ClrBlack); // //现在已处理清除,请保持计数器移动。 // g_ui32CursorDelay --; } 否则、如果(g_ui32CursorDelay = 0) { GrContextForegroundSet (&guiMainContext、ClrWhite); // //现在已绘制光标,重置闪烁延迟 //已处理。 // G_ui32CursorDelay = keyboard_BINK_RATE; } 其他 { 返回; } // //仅在时间时绘制光标。 // GrLineDrawV (&guiMainContext,200 + g_i32StringWidth,20, 40); } 空 键事件(tWidget * psWidget、uint32_t ui32Key、uint32_t ui32Event) { 交换机(ui32Key) { // //查找是否按退格键。 // 案例 Unicode_Backspace: { if (ui32Event == keyboard_event_press) { if (g_ui32StringIdx!= 0) { G_ui32StringIdx--; G_pcKeyStr[g_ui32StringIdx]= 0; } WidgetPaint ((tWidget *)&KeyboardText); // //保存当前字符串的像素宽度。 // G_i32StringWidth = GrStringWidthGet (&guiMainContext、g_pcKeyStr、 100); } 中断; } // //查找按回车键。 这将退出键盘和 //返回当前活动屏幕。 // /*案例 Unicode_return: { if (ui32Event == keyboard_event_release) {
// //如果密钥不是特殊的,则更新文本字符串。 // 默认值: { if (ui32Event == keyboard_event_press) { // //将字符串设置为要更新的当前字符串。 // if (g_ui32StringIdx = 0) { CanvasTextSet (&KeyboardText、&g_pcKeyStr); } G_pcKeyStr[g_ui32StringIdx]=(char) ui32Key; G_ui32StringIdx++; G_pcKeyStr[g_ui32StringIdx]= 0; WidgetPaint ((tWidget *)&KeyboardText); // //保存当前字符串的像素宽度。 // G_i32StringWidth = GrStringWidthGet (&guiMainContext、g_pcKeyStr、 100); } 中断; } WidgetMessageQueueProcedess(); } }