RT-Thread 学习笔记(五)—— RTGUI代码解读
来源:互联网 发布:淘宝客服打字要求 编辑:程序博客网 时间:2024/06/07 15:58
---恢复内容开始---
RT-Thread 版本:2.1.0
RTGUI相关代码解读,仅为自己学习记录,若有错误之处,请告知maoxudong0813@163.com,不胜感激!
GUI流程:
main() -> rtthread_startup(); -> rt_hw_board_init(); -> rt_components_board_init();
在rt_components_board_init()中:
1 void rt_components_board_init(void) 2 { 3 #if RT_DEBUG_INIT 4 int result; 5 const struct rt_init_desc *desc; 6 for (desc = &__rt_init_desc_rti_board_start; desc < &__rt_init_desc_rti_board_end; desc ++) 7 { 8 rt_kprintf("initialize %s", desc->fn_name); 9 result = desc->fn();10 rt_kprintf(":%d done\n", result);11 }12 #else13 const init_fn_t *fn_ptr;14 15 for (fn_ptr = &__rt_init_rti_board_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++)16 {17 (*fn_ptr)(); //此处回调所有组件的初始化函数18 }19 #endif20 }
查找init_fn_t的定义:(参考阅读:http://blog.csdn.net/sunheshan/article/details/48596103)
1 /* initialization export */ 2 #ifdef RT_USING_COMPONENTS_INIT 3 typedef int (*init_fn_t)(void); 4 #ifdef _MSC_VER /* we do not support MS VC++ compiler */ 5 #define INIT_EXPORT(fn, level) 6 #else 7 #if RT_DEBUG_INIT 8 struct rt_init_desc 9 {10 const char* fn_name;11 const init_fn_t fn;12 };13 #define INIT_EXPORT(fn, level) \14 const char __rti_##fn##_name[] = #fn; \15 const struct rt_init_desc __rt_init_desc_##fn SECTION(".rti_fn."level) = \16 { __rti_##fn##_name, fn};17 #else18 #define INIT_EXPORT(fn, level) \ //重点就是在这两行19 const init_fn_t __rt_init_##fn SECTION(".rti_fn."level) = fn //INIT_APP_EXPORT(rtgui_system_server_init) 相当于__rt_init_rtgui_system_server_init @ .rti_fn.6
20 #endif
21 #endif
22 #else
23 #define INIT_EXPORT(fn, level)
24 #endif
25
26 /* board init routines will be called in board_init() function */
27 #define INIT_BOARD_EXPORT(fn) INIT_EXPORT(fn, "1")
28 /* device/component/fs/app init routines will be called in init_thread */
29 /* device initialization */
30 #define INIT_DEVICE_EXPORT(fn) INIT_EXPORT(fn, "2")
31 /* components initialization (dfs, lwip, ...) */
32 #define INIT_COMPONENT_EXPORT(fn) INIT_EXPORT(fn, "3")
33 /* file system initialization (dfs-elm, dfs-rom, ...) */
34 #define INIT_FS_EXPORT(fn) INIT_EXPORT(fn, "4")
35 /* environment initialization (mount disk, ...) */
36 #define INIT_ENV_EXPORT(fn) INIT_EXPORT(fn, "5")
37 /* appliation initialization (rtgui application etc ...) */
38 #define INIT_APP_EXPORT(fn) INIT_EXPORT(fn, "6")
根据INIT_APP_EXPORT,找到GUI初始化函数:
1 int rtgui_system_server_init(void) 2 { 3 rt_mutex_init(&_screen_lock, "screen", RT_IPC_FLAG_FIFO); 4 5 /* init image */ 6 rtgui_system_image_init(); 7 /* init font */ 8 rtgui_font_system_init(); 9 10 /* init rtgui server */11 rtgui_topwin_init();12 rtgui_server_init();13 14 /* use driver rect for main window */15 rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &_mainwin_rect);16 17 /* set the default font */18 #if RTGUI_DEFAULT_FONT_SIZE == 1619 rtgui_font_set_defaut(&rtgui_font_asc16);20 #elif RTGUI_DEFAULT_FONT_SIZE == 1221 rtgui_font_set_defaut(&rtgui_font_asc12);22 #else23 rtgui_font_set_defaut(&rtgui_font_asc12);24 #endif25 26 return 0;27 }28 INIT_APP_EXPORT(rtgui_system_server_init);
在.map文件中:
可以看到__rt_init_rtgui_system_server_init的地址和.rti_fn.6的地址是相同的。
至此可大致了解RT Thread组件初始化的方式,在固定的地址段存放相关的初始化函数,然后用一个回调函数去逐个调取执行,以完成响应组件的初始化。
阅读全文
0 0
- RT-Thread 学习笔记(五)—— RTGUI代码解读
- RT-Thread 学习笔记(四)——添加RTGUI组件
- RT-Thread 学习笔记(十二)--- 开启基于RTGUI的LCD显示功能(2)<编译测试>
- RT-Thread 学习笔记(十一)--- 开启基于RTGUI的LCD显示功能(1)<LCD驱动接口移植>
- RT-Thread 学习笔记(十三)--- 开启基于RTGUI的LCD显示功能(3)<触屏屏驱动移植和测试>
- RT-Thread 学习笔记(五)---编辑、下载、调试程序
- STM32 + RT Thread OS 学习笔记[五]
- RT-Thread 学习笔记(六)——串口
- RT-Thread 学习笔记(三)——读取MCU ID及FLASH大小
- rt-thread学习笔记开篇
- RT-Thread 学习笔记(二)---配置github代码版本控制工具
- RT-Thread 学习笔记(一)---配置RT-Thread开发环境
- RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
- 【RT-Thread学习笔记 2】RT-Thread的线程(任务)处理
- RT-Thread 学习笔记(一)---系统节拍tick
- STM32 + RT Thread OS 学习笔记[一]
- STM32 + RT Thread OS 学习笔记[二]
- STM32 + RT Thread OS 学习笔记[三]
- RT-Thread 学习笔记(二)---线程创建及任务间通信之中断锁
- 汇编语言基础知识(cortex-M3 指令)
- RT-Thread 学习笔记(三)——读取MCU ID及FLASH大小
- HDU1062 Text Reverse
- RT-Thread 学习笔记(四)——添加RTGUI组件
- RT-Thread 学习笔记(五)—— RTGUI代码解读
- HDU 5719Arrange(类似排列组合问题)
- The connected J-Link is defective,Proper operation cannot be guaranteed.......
- Windows10下安装TensorFlow(CPU、GPU)
- 控制台光标相关
- 堆和栈的区别
- 如何在桌面电脑上使用 SAS 硬盘
- python 函数基本知识
- 断点续传