搜索
bottom↓
回复: 31

求助,程序跑飞了。

[复制链接]

出110入93汤圆

发表于 2014-9-11 16:40:17 | 显示全部楼层 |阅读模式
问题:RT-Thread 绘制屏幕时,函数执行完毕无法返回。
对MCU开发不熟,找不出原因,请帮忙。

代码:
  1. void mos_main()
  2. {
  3.     rt_thread_t thread ;

  4.     thread = rt_thread_create("gui",
  5.         m_gui_thread_entry, RT_NULL,
  6.         8192, 26, 7);
  7.    
  8.     if (thread != RT_NULL)
  9.         rt_thread_startup(thread);
  10.    
  11.     thread = rt_thread_create("event",
  12.         m_event_thread_entry, RT_NULL,
  13.         512, 1, 7);
  14.    
  15.     if (thread != RT_NULL)
  16.         rt_thread_startup(thread);
  17. }

  18. void gui_menu_entry(void)
  19. {
  20.     mos_form_t form;
  21.     mos_button_t button;
  22.     mos_rect_t rect = {10,10,40,35};
  23.     mos_point_t point = {5,60};
  24.    
  25.     mos_create_form(&form);
  26.     form.parent.handler = ui_menu_handler;
  27.    
  28.     mos_create_button(&button, rect);
  29.     button.parent.paint(&button.parent);
  30.    
  31.     mos_draw_text(point,"Please Enter Password:");
  32.     point.y += 25;
  33.     mos_draw_text(point, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  34.     point.y += 25;
  35.     mos_draw_text(point, "123567890~`!@#$%^&*()_+:;"");
  36.     point.y += 25;
  37.     mos_draw_text(point, "'{]}[|\\<>?/.,\1");
  38.    
  39.     form.doLoop(&form);
  40. }

  41. void mos_draw_text(mos_point_t location, char* text)
  42. {
  43.     mos_font_data_t* font;
  44.     rt_uint16_t buff[MDF_ASC24GRY_WIDTH * MDF_ASC24GRY_HEIGHT];
  45.     mos_rect_t rect;
  46.     rect.x1=location.x;
  47.     rect.y1= location.y;
  48.     rect.y2= location.y + MDF_ASC24GRY_HEIGHT - 1;
  49.    
  50.     while(*text)
  51.     {
  52.         font = mos_font_asc24gray[*text];
  53.         rect.x2= rect.x1 + font->width - 1;
  54.         
  55.         mos_batch_gray2rbg565p((const char*)font->data, &buff[0], font->width * MDF_ASC24GRY_HEIGHT * 4 / 8, MDF_ASC24GRY_WIDTH * MDF_ASC24GRY_HEIGHT);
  56.         mos_blit_box((const char*)&buff[0], rect);

  57.         text++;
  58.         rect.x1 += font->width;
  59.     }
  60. }

  61. void mos_gray2rgb565p(char src, mos_color_t* dst)
  62. {
  63.         mos_color_t c255;

  64.         //c255 = (0xf - src) << 4;
  65.     c255 = src << 4;
  66.         c255 = ((c255 >> 3) << 11) | ((c255 >> 2) << 5) | (c255 >> 3);

  67.         *dst = c255;
  68. }

  69. void mos_batch_gray2rbg565p(const char* src, mos_color_t* dst, rt_size_t byteSize, rt_size_t maxBytes)
  70. {
  71.     if (byteSize > maxBytes)
  72.     {
  73.         rt_kprintf("size override.");
  74.         return;
  75.     }
  76.         while(byteSize--)
  77.         {
  78.                 mos_gray2rgb565p((*src) >> 4, dst++);
  79.                 mos_gray2rgb565p((*src) & 0xf, dst++);
  80.                 src++;
  81.         }
  82. }

  83. // char ~
  84. const unsigned char mos_font_asc24gray_7E_dat[] = {
  85. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  86. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  87. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  88. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x0D,0xEF,0xD6,0x0B,
  89. 0xB0,0x7D,0x00,0xAF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  90. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  91. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  92. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
  93. mos_font_data_t mos_font_asc24gray_7E = {
  94. 10,24,
  95. &mos_font_asc24gray_7E_dat[0]};

  96. // data list
  97. mos_font_data_t* mos_font_asc24gray[] = {&mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,
  98.     &mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,
  99.     &mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,
  100.     &mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,
  101.     &mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,&mos_font_asc24gray_01,
  102. ............
复制代码


调试跟踪,在函数 void mos_draw_text(mos_point_t location, char* text) 执行完毕后,不知道跑哪去了,不能返回上及调用代码。



只显示了一行,后面的代码不执行了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出110入93汤圆

 楼主| 发表于 2014-9-11 16:44:11 | 显示全部楼层
  1. #define MDF_ASC24GRY_WIDTH                  18
  2. #define MDF_ASC24GRY_HEIGHT                 24
  3. #define MDF_ASC24GRY_BITS                    4
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出110入93汤圆

 楼主| 发表于 2014-9-11 16:48:58 | 显示全部楼层
呃,找到原因了。
定义 buff 时,长度算小了,应该
#define MDF_ASC24GRY_WIDTH                  24
而不是18。

出110入93汤圆

 楼主| 发表于 2014-9-11 16:49:20 | 显示全部楼层
送分了,有人来领么?

出110入93汤圆

 楼主| 发表于 2014-9-11 16:51:34 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-11 16:51:58 | 显示全部楼层
哈哈,恭喜。   

出0入0汤圆

发表于 2014-9-11 16:53:50 | 显示全部楼层
嗯 找不到就难了

出0入0汤圆

发表于 2014-9-11 16:54:10 | 显示全部楼层
复位不考虑硬件因素,堆栈溢出,指针指乱,非法指令和寻址错误,还有是把狗给饿着了。一般都会引起复位的。

出110入93汤圆

 楼主| 发表于 2014-9-11 16:58:27 | 显示全部楼层
怎么给分结帖?

出0入0汤圆

发表于 2014-9-11 16:40:18 | 显示全部楼层
给我分吧

出0入0汤圆

发表于 2014-9-11 17:36:38 | 显示全部楼层
有时候,就该多想想,少发帖求助。

出0入0汤圆

发表于 2014-9-11 17:36:51 | 显示全部楼层
恭喜楼主啊。。。

出0入0汤圆

发表于 2014-9-11 18:26:31 | 显示全部楼层
Shampoo 发表于 2014-9-11 17:36
有时候,就该多想想,少发帖求助。

发贴包含自己的想法即可,共同学习。

出0入0汤圆

发表于 2014-9-11 18:40:20 | 显示全部楼层
这类问题  一般都是溢出问题   编程的时候对于长度控制  特别长度是变量时  要特别注意 一般限定下范围就可以了

出0入0汤圆

发表于 2014-9-11 18:50:44 | 显示全部楼层
自己动手,丰衣足食。

出110入93汤圆

 楼主| 发表于 2014-9-11 21:16:09 | 显示全部楼层
Shampoo 发表于 2014-9-11 17:36
有时候,就该多想想,少发帖求助。

赞同。
不过,有时坐在电脑前,脑子搭牢,就是找不出原因,没想发个帖子,嘿,发现问题了

出0入0汤圆

发表于 2014-9-11 21:35:30 | 显示全部楼层
这是什么屏幕

出0入0汤圆

发表于 2014-9-11 21:38:26 | 显示全部楼层
memstone 发表于 2014-9-11 21:16
赞同。
不过,有时坐在电脑前,脑子搭牢,就是找不出原因,没想发个帖子,嘿,发现问题了  ...

所以要静下心来。
做点跟程序无关的事。
这样反而更好。

出110入93汤圆

 楼主| 发表于 2014-9-11 21:46:16 | 显示全部楼层

普通的 4.3 寸 tft

出0入0汤圆

发表于 2014-9-11 22:17:16 | 显示全部楼层
楼主好人!

出0入0汤圆

发表于 2014-9-11 22:18:31 | 显示全部楼层
楼主好人

出0入0汤圆

发表于 2014-9-12 11:57:53 | 显示全部楼层
这个是rtt官方板子吗?

出110入93汤圆

 楼主| 发表于 2014-9-12 13:29:38 | 显示全部楼层
craigtao 发表于 2014-9-12 11:57
这个是rtt官方板子吗?

不是,奋斗V3开发板

出0入0汤圆

发表于 2014-9-12 13:39:02 | 显示全部楼层
memstone 发表于 2014-9-12 13:29
不是,奋斗V3开发板

哦,,我以为是rtt官方板子呢,你现在在弄什么的?

出110入93汤圆

 楼主| 发表于 2014-9-12 13:39:41 | 显示全部楼层
craigtao 发表于 2014-9-12 13:39
哦,,我以为是rtt官方板子呢,你现在在弄什么的?

在玩而已。

出0入0汤圆

发表于 2014-9-12 13:40:00 | 显示全部楼层

你现在弄rtt的吗?

出110入93汤圆

 楼主| 发表于 2014-9-12 13:44:32 | 显示全部楼层
craigtao 发表于 2014-9-12 13:40
你现在弄rtt的吗?

在玩 RTT

出0入0汤圆

发表于 2014-9-12 15:08:33 | 显示全部楼层

玩的怎么样了?

出110入93汤圆

 楼主| 发表于 2014-9-12 16:20:40 | 显示全部楼层

只是皮毛,还没入门吧。

出0入0汤圆

发表于 2014-9-12 16:27:26 | 显示全部楼层
memstone 发表于 2014-9-12 16:20
只是皮毛,还没入门吧。

我也只是皮毛现在,

出0入0汤圆

发表于 2014-9-12 16:33:34 | 显示全部楼层
可以仿真器看看

出0入0汤圆

发表于 2014-9-12 16:44:49 | 显示全部楼层
首先看看外围硬件有没有问题,会造成复位,排除后,看软件,是不是 开了Watchdog,还有指针,堆栈使用上有没有问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-11 04:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表