中期总结:
1. 一直以来都非常感谢林少导师可以给我这次机会,并且一直帮助我解决问题!没有丝毫的抱怨,尽心尽力!谢谢林少导师!谢谢CSDN提供的这次夏令营平台!
2. 目前项目完成情况:
目前从android 4.2上下载的bluedroid代码经过修改,已经可以在rt-thread2.0上成功编译了。
3.第一个月的体会与收获:
bluedroid是一个比较大的项目,代码量很大,里面有很多东西需要考虑,错误很多,同时收获也很多,尽管很艰难,但我会坚持下去!加油!
1) 第一周总结:
第一周看了rt-thread的编程指南,熟悉了rtt的基本编程。
a. rtt对象模型的实现:
封装:隐藏内部实现(采用static修辞把作用范围局限在一个文件的内部);
继承:代码复用(在声明子结构体中将第一个成员定义成父结构体,这样就可以在定义子结构体的变量中,通过强制类型转换,得到父结构体中的成员和方法);
多态:同一消息为不同的对象接受时可产生完全不同的行动(通过函数指针实现的).
b. 线程管理:
创建:rt_thread t rt_thread_create ( const char* name, void (*entry) (void* parameter), void * parameter, rt_uint32_t stack_size, rt_uint8_t priority, rt_uint32_t tick);
初始化:rt_err_t rt_thread_init (struct rt_thread * thread, const char* name, void (*entry) (void* parameter), void * parameter, void* stack start, rt_uint32_t stack size, rt_uint8_t priority, rt_uint32_t tick);
删除:rt_err_t rt_thread_delete (rt_thread_t thread);
脱离线程:rt_err_t rt_thread_detach (rt_thread_t thread);
c. 线程间同步与通信:
关闭中断:
调度器上锁:
信号量:
互斥量:
事件:
邮箱:
消息队列:
d. I/O设备管理:
注册设备:rt_err_t rt_device_register(rt_device_t dev, const char* name, rt_uint8_t flags);
初始化所有设备:rt_err_t rt_device_init_all(void):
查找设备:rt_device_t rt_device_find(const char* name);
打开设备:rt_err_t rt_device_open (rt_device_t dev, rt_uint16_t oflags);
关闭设备: rt_err_t rt_device_close(rt_device_t dev);
……
设备驱动实现的步骤:
1. 实现RT-Thread中定义的设备公共接口,开始可以是空函数(返回类型是rt_err_t的可默认返回RT_EOK)。
2. 根据自己的设备类型定义自己的私有数据域。特别是可以有多个相同设备的情况下,设备接口可以用同一套,不同的只是各自的数据域(例如寄存器基地址)。
3. 按照RT-Thread的对象模型,扩展一个对象有两种方式:
(a) 定义自己的私有数据结构,然后赋值到RT-Thread设备控制块的private指针上。
(b) 从struct rt device结构中进行派生。
4. 根据设备的类型,注册到RT-Thread设备框架中。
2) 第二周总结:
使用Scons构建工程:
创建一个 SConstruct 文件:(SConstruct 是 scons 的配置文件,类似使用