自学STM32 发表于 2012-10-12 00:53:16

新手求助RT-THREAD学习的问题

本帖最后由 自学STM32 于 2012-10-12 00:54 编辑

    这两天一直在学习RTT,有个问题困惑着,
int rt_application_init()
{
        rt_thread_t init_thread;


        init_thread = rt_thread_create("init",
                                                                rt_init_thread_entry, RT_NULL,
                                                                2048, 8, 20);


        if (init_thread != RT_NULL)
        {
                rt_thread_startup(init_thread);
        }

        return 0;
}

建立的init线程系统是怎么知道他只要运行一次 然后在idle线程里把init线程删除的,什么原理?

还有就是不知道怎么用RTGUI,我用的是ILI93282.8寸的TFT ,设置成横屏模式,现在可以画水平直线 垂直直线 任意坐标画指定长度的水平直线,我主要是为了学习RT-Thread系统,在驱动文件里已经加上下面的代码:
struct rt_device_graphic_ops lcd_ili_ops =
{
    rt_hw_lcd_set_pixel,
    rt_hw_lcd_get_pixel,
    rt_hw_lcd_draw_hline,
    rt_hw_lcd_draw_vline,
    rt_hw_lcd_draw_blit_line
};

struct rt_device _lcd_device;
static rt_err_t lcd_init(rt_device_t dev)
{
    return RT_EOK;
}

static rt_err_t lcd_open(rt_device_t dev, rt_uint16_t oflag)
{
    return RT_EOK;
}

static rt_err_t lcd_close(rt_device_t dev)
{
    return RT_EOK;
}

static rt_err_t lcd_control(rt_device_t dev, rt_uint8_t cmd, void *args)
{
    switch (cmd)
    {
    case RTGRAPHIC_CTRL_GET_INFO:
    {
      struct rt_device_graphic_info *info;

      info = (struct rt_device_graphic_info*) args;
      RT_ASSERT(info != RT_NULL);

      info->bits_per_pixel = 16;
      info->pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB565P;
      info->framebuffer = RT_NULL;
      info->width = 320;
      info->height = 240;
    }
    break;

    case RTGRAPHIC_CTRL_RECT_UPDATE:
      /* nothong to be done */
      break;

    default:
      break;
    }

    return RT_EOK;
}

void rt_hw_lcd_init(void)
{
   /* register lcd device */
    _lcd_device.type= RT_Device_Class_Graphic;
    _lcd_device.init= lcd_init;
    _lcd_device.open= lcd_open;
    _lcd_device.close = lcd_close;
    _lcd_device.control = lcd_control;
    _lcd_device.read= RT_NULL;
    _lcd_device.write = RT_NULL;

    _lcd_device.user_data = &lcd_ili_ops;
    ILI9328_CPT28_Initial();

    /* register graphic device driver */
    rt_device_register(&_lcd_device, "lcd",
                     RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STANDALONE);
}

也把RTGUI的代码加进来了
void rtgui_system_server_init(void)
{
        /* init image */
        rtgui_system_image_init();
        /* init font */
        rtgui_font_system_init();

        /* init rtgui server */
        rtgui_topwin_init();
        rtgui_server_init();

        /* init theme */
        rtgui_system_theme_init();
}

static void rt_init_thread_entry(void* parameter)
{
          extern void rtgui_system_server_init(void);
          extern void rt_hw_lcd_init();
          extern void rtgui_touch_hw_init(void);
                rt_device_t lcd;
                /* init lcd */
                rt_hw_lcd_init();

                /* init touch panel */
               //rtgui_touch_hw_init();
                /* re-init device driver */
                rt_device_init_all();

                /* find lcd device */
                lcd = rt_device_find("lcd");

                /* set lcd device as rtgui graphic driver */
                rtgui_graphic_set_device(lcd);
                /* init rtgui system server */
                rtgui_system_server_init();
        }

触摸屏 rtgui_touch_hw_init(); 没有运行,先不考虑,我想等把基本GUI跑起来再搞,这样应该没有问题吧,启动以后FINSH超级终端显示


关于ILI9328的问题我在STM32版块的求助http://www.amobbs.com/thread-5500902-1-1.html

自学STM32 发表于 2012-10-15 22:42:57

终于在RTGUI下看见屏有显示了,本来都准备放弃学RT_THREAD,还好没有放弃

aozima 发表于 2012-10-16 12:45:30

支持,祝贺,多写笔记与心得。{:victory:}

爱学习的妞 发表于 2012-11-27 14:05:26

我按照你的程序,只是用的800 × 480 的屏,打印出来的结果如图,并且下面显示都是无数的lcd设备,请问我这可能是什么问题导致的?

aozima 发表于 2012-11-27 14:43:02

爱学习的妞 发表于 2012-11-27 14:05 static/image/common/back.gif
我按照你的程序,只是用的800 × 480 的屏,打印出来的结果如图,并且下面显示都是无数的lcd设备,请问我这 ...

LCD被重复注册了么?

爱学习的妞 发表于 2012-11-27 14:58:47

aozima 发表于 2012-11-27 14:43 static/image/common/back.gif
LCD被重复注册了么?

好像是我注册了两次,刚刚屏蔽掉一处,发现正常了

爱学习的妞 发表于 2012-11-27 15:11:15

刚刚的问题已经解决了,是我重复定义了,现在我在GUI里又新建了一个线程,运行之后,shell显示的结果如果。线程被挂起了,这可能是什么问题?
页: [1]
查看完整版本: 新手求助RT-THREAD学习的问题