基本信息
姓名 |
出生 |
学历 |
兴趣 |
杨礼林
1993.04.26
本科
linux,FPGA
电话 |
民族 |
专业 |
语言 |
邮箱 |
18408244522
汉族
17届微电子
linux C,python,shell
1657301947@qq.com
INFO
求职意向:嵌入式linux开发工程师
自我评价:
- 自学能力强,主动接受并理解新知识、新事物,能不停评价自己(觉得自己有一定知识广度,但是深度不够,所以到华清深入学习)。
- 在学校学习以实践居多,主动了解或学习学习最新知识.
- 具备电子技术、信息技术和计算机网络方面的知识素养,具有熟练的计算机操作技术。
- 热衷于FPGA技术和linux,拥有无穷的热情和折腾精神,遇到技术障碍不会被击溃,能坚持到解决问题。
- 喜欢开源精神,信奉python的“轮子”哲学,linux的“一切皆文件”哲学。
- 动手能力强,linux装机不下50次,windows更多,能长期只用linux,主要用linux mint.
知识体系
1.知识
- 精通:linux C , linux使用,verilog,vim
- 能用c编写并发服务器,epoll多路复用模型服务器,能做arm linux驱动开发,用c做51,stm32,nionsII,freeRTOS开发等.
- 能长期只用linux,会正则表达式及相关工具(grep,sed,awk),能编写shell脚本做一些自动化。
- 能在linux下安装配置各种开发环境,服务器LNMP/LAMP环境,能修复一些linux问题如grub引导等等,使用过(kali,ubuntu,mint,openSuse,CentOS等),主要使用mint
- 熟练:verilog, java,github,markdown
能做FPGA的小项目开发,简单安卓APP开发,能用git对代码进行版本控制,在github查找有用开源项目,开源库,能用markdown快速编写文档
- 熟悉:python,shell,mysql,sqlite,uboot开发,示波器使用,json解析,xml解析
能用anaconda(一种python集成环境)代替matlab做科学计算,做一些小型辅助工具,能简单使用mysql,sqlite及一些前端软件如phpmydamin,研究过树莓派,S3C2440开发板uboot移植(自学),exynos4412开发(华清学习)
- 了解: C++,QT,pyqt
- 熟悉的开发环境:
eclipse neon,Quartus 15,android studio2.1,anaconda2.4,matlab,keil,cubeMX
工作项目经验
2015.7-2015.8 郫县富士康暑假工 ipad iair2液晶面板检测
- 在幕布围起来的屏幕检测台上放置多台待测ipad air2液晶面板,使面板显示多种单光
、条带光。
- 检测其是否有亮点,暗点,并将非正常的面板交于维修人员。
2016.3-2016.4 寝室 基于树莓派与PC机的服务器负载均衡(独立完成)
- 在PC和树莓派2B+机上搭建LNMP服务器环境(PC系统是linux mint 17.3,树莓派是debian wheezy,同一个TPlink路由)
- 配置分别两机的nginx配置文件,配置方向代理,将输煤派做主机,pc机作为均衡服务器
- 用python编写一个简易并发网页GET网页请求,测试负载均衡
2016.4-2016.5 电子设计竞赛(寝室完成) 基于FPGA、niosII的声音传输数据(独立完成)
由于精力和资金有限,取消声音耦合,采用导线直接耦合DA和AD
1、调制
- 用verilog设计DDS正弦发生器,并下载到开发板
- 将DDS模块包装成带FIFO缓存的FSK调制器,用了两个频率的正弦波12kHz,16kHz。
- 配置niosII模块,并用c语言编写驱动,使ASCII码经经调制器转为信号。
- 连接焊接DA模块,滤波电路,将数字正弦转为模拟正弦信号
2、解调
- 焊接AD模块,连接FPGA开发板
- 用verilog编写将数字正弦信号转换为二进制信号(分离高低频率为二进制,fifo积分法)
- 用c写好niosII驱动,将二进制信号转ASCII码(搜索并同步,按八位对齐)
2016.7-2016.7 华清远见 多功能并发服务器
- 完成一个TCP并发服务器
- 支持网页”GET /”语法
- 支持远程密码登陆后使用,并有常用ls,cd,cat等等指令
- 统一接口,便于增添功能
- 采用增加拓展英汉词典,用sqlite3保存登陆信息和单词元信息
2016.8-2016.8 华清远见 android多功能APP
- 成员各完成一个小功能,我选择音乐播放器功能
- 在github上找一个快速高斯模糊库导入模块供调用
- 用gimp剪切一些图备用
- 使用fragment滑动页面并完成和美化专辑界面,音乐列表界面,和各按键监听事件
- 将包交给组长完成合并各功能模块
2016.9-2016.9 华清远见 设备树类型驱动和播放器
- 用的内核版本是3.*的,所以支持设备树,可采用反射机制于设备树构建
- 用PWM调频来调音 {MOD},用PWM调脉宽来实现身心幅度调节
- 实现更据乐谱音乐播放
社团活动
技能证书
一.证书
1. 通过CET4,能查阅技术类文档资料,各种datasheet。
2. 获得院级奖学金,多次获得助学金,大多用于购买开发板及周边工具。
3. 通过计算机等级二级,计算机操作熟练,没有继续考其他的,认为自己不止二级的知识。
二.技能
- 学习和折腾51单片机,FPGA,树莓派,三星S3C2440开发板,帮助多个同学完成过课程设计如(51矩阵键盘与数码管显示,51串口通信,51转速测量仪,基于fpga的dds,基于fpga的调制和解调),独立做过一些嵌入式小课题
- 有两年linux使用时间,linux mint做主用系统(用过ubuntu,openSuse,CentOS,debian等),linux装机超过50次,借和使用过老师的刀片服务器
- 会编写linux驱动,并且写过一些驱动(ioremap法,mmap法),会arm汇编
- 知道jpg压缩算法,DCT,rgb->yuv,zigzag,huffman变长编码,预测
- 了解过视频传输协议onvif,看过一些文档
- 搭建LAMP、LNMP多次,对负载均衡,大数据hadoop,openstack,docker和几种linux文件系统有点认识。
- 知道常见国内镜像源和使用
- 爱逛github,stackoverflow,喜欢开源精神
#include
#include
#include
#include
typedef struct{
unsigned char b;
unsigned char g;
unsigned char r;
}PIX_t;
#define DATA_t int
enum DIRECT_t{u,d,l,r,ul,ur,dl,dr};
typedef struct{
int x;
int y;
DATA_t data;
enum DIRECT_t dir;
}POINT_t;
int init_point(POINT_t *pnt,int x,int y,enum DIRECT_t d);
DATA_t *init_arr(DATA_t d00,int l);
int display_arr(DATA_t *arr,int l);
int zigzag_step(DATA_t *arr,POINT_t *pnt,int l);
int zigzag_all(DATA_t *arr,POINT_t *pnt,int l);
int zigzag_handle();
int main(int argc, char const* argv[])
{
int len;
if(argc>1){
len=atoi(argv[1]);
}else{
len=15;
}
POINT_t pnt;
init_point(&pnt,0,0,r);
DATA_t *arr=init_arr(pnt.data,len);
zigzag_all(arr,&pnt,len);
return 0;
}
int init_point(POINT_t *pnt,int x,int y,enum DIRECT_t dir)
{
pnt->x=x;
pnt->y=y;
pnt->dir=dir;
pnt->data=0;
return 0;
}
DATA_t *init_arr(DATA_t d00,int l)
{
DATA_t *arr=(DATA_t *)malloc(l*l*sizeof(DATA_t));
memset(arr,0,l*l*sizeof(DATA_t));
*arr=d00;
return arr;
}
int display_arr(DATA_t *arr,int l)
{
int i,j;
for(i=0;ifor(j=0;jprintf("%-3d ",*(arr+i*l+j));
}
putchar('
');
putchar('
');
}
return 0;
}
int zigzag_step(DATA_t *arr,POINT_t *pnt,int len)
{
switch (pnt->dir) {
case d:
printf("d
");
if(pnt->x==0){
pnt->y++;
pnt->dir=ur;
}
break;
case r:
printf("r
");
if(pnt->y==0){
pnt->x++;
pnt->dir=dl;
}
break;
case dl:
printf("dl
");
if(pnt->y==(len-1)){
pnt->dir=ur;
pnt->x++;
}else if(pnt->x==0){
pnt->dir=ur;
pnt->y++;
}else{
pnt->x--;
pnt->y++;
}
break;
case ur:
printf("ur
");
if(pnt->x==(len-1)){
pnt->dir=dl;
pnt->y++;
}else if(pnt->y==0){
pnt->dir=dl;
pnt->x++;
}else{
pnt->x++;
pnt->y--;
}
break;
}
*(arr+len*(pnt->y)+pnt->x)=(++ pnt->data);
if(pnt->x==(len-1) && pnt->y==(len-1))
return 0;
return -1;
}
int zigzag_all(DATA_t *arr,POINT_t *pnt,int l)
{
while(zigzag_step(arr,pnt,l)!=0){
printf("pnt[%d][%d]=%d
",pnt->x,pnt->y,pnt->data);
display_arr(arr,l);
usleep(50000);
system("clear");
}
printf("pnt[%d][%d]=%d
",pnt->x,pnt->y,pnt->data);
display_arr(arr,l);
return 0;
}
效果:
dl
pnt[5][6]=72
0 1 5 6 14 15 27 28 44 45 65 66 0 0 0
2 4 7 13 16 26 29 43 46 64 67 0 0 0 0
3 8 12 17 25 30 42 47 63 68 0 0 0 0 0
9 11 18 24 31 41 48 62 69 0 0 0 0 0 0
10 19 23 32 40 49 61 70 0 0 0 0 0 0 0
20 22 33 39 50 60 71 0 0 0 0 0 0 0 0
21 34 38 51 59 72 0 0 0 0 0 0 0 0 0
35 37 52 58 0 0 0 0 0 0 0 0 0 0 0
36 53 57 0 0 0 0 0 0 0 0 0 0 0 0
54 56 0 0 0 0 0 0 0 0 0 0 0 0 0
55 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
教育背景
2013.9-2017.7 西华大学 微电子科学于工程 本科
- 主要课程:数字电路、模拟电路、固体物理、verilog硬件描述语言