早期工作项目总结
来源:互联网 发布:matlab提取矩阵某一行 编辑:程序博客网 时间:2024/06/11 12:43
2011.3-2011.5 RTSP学习
RTSP: 多媒体实时播放控制协议,用户可以pause/continue。
主要的方法有:
OPTIONS : 询问有哪些方法可用
DESCRIBE: 获取多媒体初始化信息,使用SDP协议
SETUP:设置会话属性,传输模式和 与server建立会话连接(包括客户端端口 和 服务器端端口 的分配)
TEARDOWN, PLAY, PAUSE.
2011.1-2011.3 内核驱动学习笔记
1. 写内核驱动代码有一个固定的模式, 对应的makefile文件也是。
#include “linux/modules.h"#include "linux/init.h"#include "linux/kernel.h"MODULE_LICENCE("版本权限");编写自己的函数, 例如:my_open() / my_read() / my_write() / my_ioctl() struct file_opetation scull_fops ={.open = my_open;.read = my_read;.write = my_write;.ioctl = my_ioctl;};入口函数 int __init my_init() {...}出口函数 void __exit my_exit(){...}2. j建立内核驱动,需要获取设备编号。 ( ls -l /dev/ 可以看到)
register_chrdev_region() / unregister_chrdev_region() / alloc_chrdev_region(). alloc_chrdev_region()动态获得编号,不能提前在/dev下创建节点,需要先读取 /proc/modules文件。
3. 内核在内部使用 struct cdev 结构体来表示字符设备。
cdev_init() / cdev_add() 用于向内核添加一个驱动设备,它的返回值就表示某个字符设备。
cdev_del()
定义自己的类型,包含struct cdev类型。 用户在open()操作的时候, 让 file->private_data指向这个 struct cdev实例。 之后read() / write() / ioctl() 都可以通过 file来坐坐cdev实例。 copy_to_user()/ copy_from_user() 用于内核空间与用户空间的数据拷贝。
4. 并发: 互斥锁(init_Mutex/ down/ up) completion机制: init_completion/ wait_for_completion
5. 字符设备:是一种可以当作一个字节流来存储的设备。例如:键盘
快设备: 系统中能够随机访问固定大小数据片的设备叫做快设备。例如硬盘
2010.3-2010.12 MyTest测试框架
MyTest 是三星内部使用的测试框架,类似于google的 gtest。 那为什么我们不使用gTest,而是要自己搞一套测试框架了?
基于以下几个方面的考虑:
1. 压力测试。 我们某些测试用例,需要连续测试1万次或者10万次,查看性能及内存泄漏。 需要在配置文件中设置测试用例重复的次数。
2. 环境: 要同时支持ARM平台及window平台。 嵌入式平台很复杂,测试工具只能以动态库的形式嵌入到系统中,而不能以exe形式运行。
3. 配置文件: 我们需要有配置文件, 你们可以配置运行哪些测试用例,运行多少次。
4. 由于window平台上面没有默认的正则表达式库,我们这里用到了 boost 你们的 regex库。
项目架构:
如上图所述,
1. 需要一个Manage作为管理类,下面有分为 Config Manage, Output manage, Runner Manage 三个类。
2. 有一个操作系统的适配层。用于保证对上层提供一致的接口,保证与操作系统无关。
3. 配置文件 gtf.conf 里面列举了TS/TC ,测试次数,输出文件名 等信息。可能我们写了10个测试用例,保存在全局的list中, 但我们只想测试其中的5个测试用例,我们可以把这5个测试用例的名字写在gtf.conf 配置文件中。 Runner Manage类的功能就是读取gtf.conf中的测试用例名,与全局的list进行匹配。如果成功,就执行这个用例;如果失败,就跳过。
4. 提供了大量的比较宏: MT_ASSERT/ MT_CHECK
5. 结果保存的方式有三种;*.log 是实时log文件; *.csv 是统计后的文件;console是实时输出在终端的log,与*.log的内容一样。
6. 提供了写测试用例的宏: TEST_SUITE/ TEST_CASE
7. 增加了死亡测试: 核心功能是所有测试用例都是运行在一个新的进程里面,而不是一个线程里面。 这样,如果其中一个测试用例导致进程异常退出,仅仅只是这个进程退出,不影响别的进程,也就是说别的测试用例依然可以正常运行。
函数平台对比;
window linux
头文件 windows.h unistd.h
时间函数 Sleep/GetLocalTime gettimeofday/ sleep
管道 CreatePipe pipe
进程 CreateProcess fork
2008.8-2010.2 FOXCONN手机嵌入式APP开发
2008年毕业参加工作,在FOXCONN参与了 手机嵌入式APP开发工作,今天总结下:
硬件: 手机嵌入式
平台: window mobile 6.1
图形绘制引擎: Edgelib
场景: 短信及拨号界面开发
开发的UI界面如下:
图1-1 图1-2 图1-3
可以看到UI是有很多widget组成的(例如: button,gridlist ,text 等). 这些widget默认是hide的,只有在需要的时候被show出来。
拿短信这个APP来说,它被设计成一个Form。 这个form(它也是widget manager的特殊子类,widget Manager是Widget的子类),有很多widget Manager组成, widget Manager又有widget组成,结构如下:
这些widget/widget Manager/ Form都继承自 widget这个基类。 Widget里面定义了 handleEvent(), Display() 和 widget_ID变量。 Form里面采用组合模式,WidgetManager里面也采用了组合模式。 系统每个一段时间调用Form::Display()函数, Form::Display()会遍历调用所有widget的display()方法(这些widget默认是hide的,只有在需要的时候被show出来)。
我在这个项目中,主要干了两件事情:
第一件事情: 消息转换
手指点击屏幕,只能产生原始的 MSG_STYLE_UP/ DOWN / MOVE 事件及当前点击点相对于屏幕左上角的X,Y坐标,我需要把这些原始事件转化为widget可识别的事件(例如:点击,长按,滑动等)。 那么如何做到了?
在创建每一个widget的时候,都会给出(top, left, width, height)坐标, 这样才能绘制出这个widget。 有了点击点的X,Y坐标,又有了所有widget的区间坐标范围,当然就可以确定是哪个widget被操作了, 然后调用 widget::handleEvent()响应这个操作。
网络查看windows的消息机制,介绍如下:
a. 鼠标点击,产生单击事件,鼠标设备驱动程序根据用户事件,转换成消息,并放置于WINDOWS的系统队列中
b. WINDOWS将系统队列中的消息取出,并投掷于消息对应的应用程序所属的线程队列。
c. 每个应用程序在创建时,系统都会为其创建一个消息队列,发送给应用程序的消息都存放在该消息队列中,等待被处理。 而应用程序的消息引擎
MSG msg;
while
(GetMessage(msg, NULL, NULL, NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
会不停的从自己的专属消息队列中获取消息,并进行消息的翻译和转发(TranslateMessage和DiapatchMessage)
windows的消息机制,是知道鼠标点击在哪个控件上面的。 它怎么知道? 也是用的点击坐标是不是在某个控件的区域坐标范围内。 我们把window后台做的事情,实现了。
第二件事情: 使用状态机模式
还是拿短信APP来说,它有这样几个界面: 上面图1-2的界面, 写短信的界面, 及刚打开短信APP,出现短信list的界面,setting界面。 我们把每个节目设置成一个状态,用状态机来简化代码逻辑。
- 早期工作项目总结
- 2014工作项目总结
- 2012工作及项目总结。
- 工作中的项目总结概览
- 无默认库生成的早期项目
- 为早期项目添加Ribbon界面
- 为早期项目添加Ribbon界面
- 项目早期,运营该做什么?
- CRM 项目总结——工作篇
- 电子政务项目调研工作的总结
- 珈伟工作项目总结(引言)
- 工作项目总结(一)之数据库操作
- 工作项目总结(二)之数据库操作
- 工作项目总结(三)之web开发
- 工作项目总结(五)之web开发
- 工作项目总结(六)之串口通信
- 工作项目总结(七)之USB通信
- 总结:项目管理的工作内容
- Island Communication -遍历邻接表
- 当你学不进去的时候,不妨看看大脑是怎么想的?
- 简单Makefile规则
- 【3】Android新建Activity (Eclipse)
- Java 8大排序算法
- 早期工作项目总结
- webservice soap wsdl 在线接口
- hadoop初级班(四)
- 简单的进程编写
- GitHub Top 100 简介
- Qt之JSON生成与解析
- Object-c的布尔值
- Ubuntu中安装Nvidia驱动
- Android各种Adapter的用法