怎么制作免费网站,烟台市建设局网站,北京科技公司名单,公司网站建设基本流程前言#xff1a;
嘻嘻#xff0c;12月底广州降温了又到了写年终总结的时间#xff0c;这也是我第二年写年终总结。今年的年终总结主要记录了我大三下学期和大四上学期这两个时间段的学习和收获#xff0c;也是我尝试走出校园#xff0c;接触社会的第一年#xff08;感触…
前言
嘻嘻12月底广州降温了又到了写年终总结的时间这也是我第二年写年终总结。今年的年终总结主要记录了我大三下学期和大四上学期这两个时间段的学习和收获也是我尝试走出校园接触社会的第一年感触良多。大致的主线就是正点原子IMX6ULL开发板的一些收尾工作、学习Qt修改出厂综合历程来达到最初买这块开发板的目的牛客刷笔试、面试题参加面试来知道自己的不足、积累面经两段嵌入式软件岗位的实习音频网络。因为是大三下学期这一年对我来说终于摆脱了奖学金和绩点的束缚我不用把时间花在这些事上前两年拿过奖学金了绩点、年级排名也够用。加上我也没有打算考研或考公所以我就可以把心思全部投入到实习当中。总的来说最大的感触就是企业级的代码跟学校完成课程设计的代码完全是两个量级实习可以学到一些之前没有见过的代码架构和处理逻辑。在学校的课程设计主要是完成功能为主企业级代码注重稳定性对不同场景的考虑也会更加严谨。年末我第一个参与的产品也是成功通过测试在官网发布了市面上终于有一款产品里有我写的代码OLT。前言差不多就到这接下来就具体介绍一下我这十二个月分别做了什么有哪些收获和感触。
一月正点原子IMX6ULL开发板Qt C教程、QML开发板出厂综合历程修改
实话实说学Qt是我目前在嵌入式学习中最快乐的一段时光好吧我承认是因为有蛇姐我在写一月份这部分总结的时候回想起来都笑得好开心。
话说回来在开始之前先学习了一些C的基础类、对象、封装、继承、多态等基本概念。因为主要是学习Qt中控件的使用C的学习就没有比较系统和全面。Qt一开始是从基本的常用控件开始我没有用Qt Designer直接拖出控件来进行界面设计。刚开始都是用C一个一个控件学习像pushbutton、scroll、spacer、table等调整布局中要到的horizontal、vertical、grid。用代码这样可以更好地熟悉底层实现逻辑直接拖控件完成起来会比较快但是如果最后工程大一些直接界面设计就没这么方便维护起来也更困难。进一步就是掌握信号与槽的机制、qss文件改变样式表等。 图 1 信号与槽 图 2 qss设置控件样式 图 3 自定义控件使用 之后我就用了Qt中自带的QSerialPort、QSerialPortInfo两个类进行设计一个串口。基本功能就是可以设置串口的一些参数波特率、奇偶校验位、停止位、数据位、哪个串口等设置完成之后可以实现开发板和PC进行简单的数据收发。
#include widget.h
#include ui_widget.h
#include QMessageBoxWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);//lcd屏的分辨率是1024X600this-setFixedSize(QSize(1024, 600));//new 一个QSerialPort对象serialPort new QSerialPort(this);//通过foreach语句将windows或imx6ull可用串口识别出来并添加至对应的下拉选择框QStringList serialList;foreach(const QSerialPortInfo info, QSerialPortInfo::availablePorts()){serialList info.portName();}ui-comboBox-addItems(serialList);//设置串口的信号与槽connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData()));}Widget::~Widget()
{delete ui;
}void Widget::on_radioButton_clicked(bool checked)
{//点击“打卡串口”button之后的一些串口配置操作和一些逻辑关系if(checked){//设置串口端serialPort-setPortName(ui-comboBox-currentText());//设置波特率serialPort-setBaudRate(ui-comboBox_2-currentText().toInt());//设置停止位serialPort-setStopBits(QSerialPort::StopBits(ui-comboBox_4-currentText().toInt()));//设置数据位serialPort-setDataBits(QSerialPort::DataBits(ui-comboBox_6-currentText().toInt()));//设置校验位switch(ui-comboBox_5-currentIndex()){case 0:serialPort-setParity(QSerialPort::Parity::NoParity);break;case 1:serialPort-setParity(QSerialPort::Parity::EvenParity);break;case 2:serialPort-setParity(QSerialPort::Parity::OddParity);break;case 3:serialPort-setParity(QSerialPort::Parity::SpaceParity);break;case 4:serialPort-setParity(QSerialPort::Parity::MarkParity);break;default:break;}serialPort-setFlowControl(QSerialPort::NoFlowControl);if(!serialPort-open(QSerialPort::ReadWrite)){QMessageBox::about(this, 串口打开错误提示, 可能被占用了);return;}//打开串口之后其他的选择按钮设置成不可用ui-comboBox-setEnabled(false);ui-comboBox_2-setEnabled(false);ui-comboBox_4-setEnabled(false);ui-comboBox_5-setEnabled(false);ui-comboBox_6-setEnabled(false);ui-radioButton-setText(关闭串口);}else{serialPort-close();ui-comboBox-setEnabled(true);ui-comboBox_2-setEnabled(true);ui-comboBox_4-setEnabled(true);ui-comboBox_5-setEnabled(true);ui-comboBox_6-setEnabled(true);ui-radioButton-setText(打开串口);}}void Widget::readData()
{//将串口中的数据打印到textBrowser中ui-textBrowser-insertPlainText(serialPort-readAll());
}void Widget::on_pushButton_clicked()
{//点击“发送”button之后将textEdit中的内容写入串口serialPort-write(ui-textEdit-toPlainText().toUtf8());
}void Widget::on_pushButton_2_clicked()
{//清屏操作ui-textEdit-clear();ui-textBrowser-clear();
}PC和开发板用不同的编译链进行编译出来就可以在对应的环境执行。 图 4 Windows使用串口软件 图 5 Linux开发板使用串口软件 学了差不多半个月了我打算去修改正点的例程了但是我发现这个项目不只有Qt C还有一些qml的文件。后来了解到qml也是Qt主推的一种界面设计Qt Quick提供一些更方便使用的类像竖屏滑动横屏翻页等。 图 6 正点Qt出厂综合历程 图 7 Qt提供的多种工程模板 新建一个qml工程的界面整个新工程基于某些类的初始化简单创建一个Qt Quick工程的文件。 图 8 新建Qt Quick工程文件 我在B站看的qml教程讲的比较细致有讲基础的控件使用重点是在C和qml端如何进行交互。 图 9 B站QML教程 在Qt C和qml两方面都准备好后就开始修改综合例程了。正点的综合例程工程主体框架就是C会使用系统调用来获取数据例如打开文件read、write而qml是将C端获得的数据进行显示并修改样式类似于一个前端、一个后端。C和qml的通信主要是main.cpp 中通过 qmlRegisterType()来完成类的注册然后在 qml 端通过 import 导入对应的模块进行数据调用。花了差不多一个礼拜进行修改和调试最终也是实现了想要的效果。 图 10 开发板修该过后的最终界面 具体的展示视频地址和仓库工程链接
正点原子Linuximx6ull开发板出厂Qt综合历程修改_哔哩哔哩_bilibili
正点原子QDesktop例程学习 · master · 门牙会稍息 / 正点原子IMX6ULL开发板综合历程修改 · GitCode
到这里我也是结束了正点这块板的学习耗时半年从最初的裸机开发、驱动开发、到Linux C 应用开发、最后Qt的学习这块板也是真正地带我走进了嵌入式Linux收获颇丰。
二月观看正点原子视频重新学习、巩固STM32的基础知识体验K210开发板
23年其实没有受到疫情的影响出校很方便我的计划是想过完年三月初在广州找一份实习。但是花了半年的时间在Linux这了一些裸机、STM32外设、总线协议的基础知识遗忘了许多。赶在三月份之前也是看了看正点新推出的视频复习了stm32外设的一些基本知识实操回顾了之前做过的一些实验例程。然后也是在裸机的基础上尝试移植freertos操作系统和lvgl开源图形库但是我感兴趣的还是LinuxQt这种组合。学习freertos、lvgl主要是在于了解和应付一些面试我不是特别想走单片机加一个操作系统的职业方向。可能是因为我在Linux这边花了更多时间相较于这种单片机的方向更有底气。 图 11 复习stm32基础知识 二月下旬的时候买了块K210的板子试了试怎么说呢也没太发挥出它的性能和应用场景。对于我来说主要是锻炼一下快速上手一款陌生的芯片或开发板如何将之前stm32的知识进行迁移这块板没花什么时间不是特别上心。 图 12 K210开发板显示图片 图 13 K210开发板和stm32通过串口进行通信 二月中旬的时候我开始投递简历二月底我也是得到了绿辰的面试邀约。面试流程总共有两轮第一轮是电话面另一轮是线下面。电话面主要是嵌入式相关的公司线下面技术的稍微少一点主要是看能不能合得来共事。因为绿辰是做音频相关的特地多注意了ADC、DAC、I2S这部分内容。电话面的时候印象比较深的有一个问题问的是音频的数据输入和输出如果不同步可以用什么方法数据怎么存储之类的这个我是没有答上来的。后来面试官也是很耐心的跟我讲解可以用环形buffer串口数据接收也可以用这种方式。环形缓冲区可以用于延迟补偿将输入音频样本推迟一段时间再进行处理这样可以保持同步和正确的处理结果。我个人感觉电话面的一般但还好给了我一个机会去公司线下面试挺紧张的也是第一次出校园到公司去面试。面试前将之前学的内容又过了一遍也是提前一天晚上去公司旁边踩了点。面试的那天下午我把正点那块修改了综合历程的开发板带过去公司展示了可能是因为有音频的输入输出他们就感觉我会音频的一套体系就录用我了。怎么说呢我整个人是有点发虚的音频也不是专门弄过但也没想这么多了先干着看看吧。 图 14 绿辰公司周边 三月绿辰实习、开始踏入社会
面试通过了在三月初办理了入职也是正式开始第一份实习。进去之后带我的是奇哥搞音频算法相关的。电话面试我的是宇哥他是专门搞嵌入式的人在长沙的一家公司平时不在公司。宇哥和老板是朋友平时会帮忙提出一些设计思路和面试招人。 图 15 绿辰offer 实习的第一个礼拜没有什么特别的任务就是下载开发环境Andesight熟悉山景公司芯片的SDK历程。学习基本的开发流程如何下载代码到开发板上一个一个历程下来和32挺像的。开发板主控用的是上海山景的BP10系列下面这张图是芯片功能的基本介绍图来源于上海山景官网也是第一次用专业的蓝牙音频编解码的芯片。 图 16 山景芯片资源、性能介绍 图 17 工位 图 18 第一天下午下班 开发板SDK例子的功能主要是围绕ADC、DAC、USB Audio、Bluetooth展开的。搞音频躲不掉Au软件的使用其中有一个历程就是手机和开发板通过蓝牙进行连接手机放歌通过蓝牙发送到bp10上bp10中有内置的蓝牙协议栈进行接收接收到的音频数据进行Audio ADC转换最后通过USB Audio将数据传入到PC上的Au软件进行采集。一套流程下来后计算信噪比、功率比这些参数。但是我肯定没有那些专门搞音乐搞音频的人那么专业基本上就是体验了一下走了一遍流程如果要细弄真弄不来。像音频、USB、蓝牙随便拎出一个来都有得来搞让人头大。音频有MP2、MP3、FLAC、AAC等许多编解码格式DMA水位要怎么设置、音频数据的读写速度要怎么调整。USB协议中又有细分音频、HID设备之类的蓝牙协议栈就更不用说了脑子里都没概念。 图 19 Au录制音频 图 20 BP10芯片SDK介绍 后面按奇哥要求花了一段时间通过学习USB协议将开发板通过USB线和PC进行连接PC将开发板识别成USB HID设备这里是枚举成了键盘。讲到这里就要感谢圈圈大佬了没有《圈圈教你玩USB》这本书的话我都不知道该怎么办真是圈圈帮了大忙。USB里那么多种类的描述符和包结构直接看USB协议会无从下手。虽然圈圈的书是在0几年写的但是实在是经典看圈圈的书入门USB是最好的选择。最后也是写了一篇博客来记录圈圈书上的一些知识点。 图 21 圈圈USB学习总结 这周快结束的时候也是通过开发板上的按键来模拟日常用的键盘这里就只实现了两个键(a和c)基本的流程是走通了要添加其他的按键或者改成其他类型的HID设备也不会太难了。 图 22将开发板枚举成HID设备键盘 图 23 开发板的按键成功设置成键盘功能 差不多一个月过去了其实也没有什么特别的产出就将开发板枚举成键盘这个算是真正烧了脑、折磨了一个礼拜。其他的时间都是在学SDK历程过了一周左右就开始要写周报了这个月也写了三次周报。 图 24 3月周报 四月前半月Looperdrum操作流程 LCD显示、后半月粤嵌GEC6818开发板实现电子相册、普中DSP课程设计
四月初奇哥也开始叫我做项目了做的是一个录音机内置鼓机的项目。这个产品有一个LCD屏用来显示音频的相关数据、两个编码器旋钮和两个踩钉用于人机交互。产品的使用方式就是一端接音频的输入可以是吉他这个产品可以录制多个音轨录制的音频可以输出到调音台进行播放。怎么说呢因为没有搞过音乐刚开始这个产品如何使用、使用场景是什么都弄不明白。 图 25 友商产品效果图 我的任务就是将一块SPI的屏驱动起来模仿友商的产品设计界面。编写界面的函数接口其中包括音量调节、音轨选择、鼓机风格选择、音频播放的进度条等前前后后包括调试也差不多弄了两个礼拜。最后也是写了一个综合历程来模拟用户在使用的情况下会出现的界面测试了一下不同情况下界面的显示是否正常会不会出现界面刷新之后还有数据像素点残留、像素点覆盖的情况音频进度条的显示是否正常。 图 26 LCD屏显示音频数据 四月中旬发了三月的工资虽然不多但是第一次挣钱也挺开心。 图 27 人生第一份工资条 但是好景不长我被奇哥约去谈话了。谈话的主要内容是说我现在的水平和能力其实达不到他们的要求所以要我提前结束实习换言之就是被裁了。钱都还没焐热这边就告诉我要办理离职我都还打算问奇哥下礼拜要做什么。谈话结束之后回到工位我脑子是蒙的什么事也做不下去第一次发工资和第一次被裁两件事发生的间隔不到两天我是有点接受不了。下班出地铁骑上学校的共享电动之后我没有直接回宿舍而是骑着电动在学校逛。骑车的时候回想起来这些实在是受不了了在没人的时候也是忍不住掉小珍珠了我觉得除了我没有人会看得这么细。那天晚上也是骑了好久心情平复好了才回宿舍。 图 28 下班回学校的广州塔 因为实习的时候我周二下午要回去上课之前没有一周是全勤的。就最后一周的周二逃了课没回学校那周就是全勤结果是第一次也是最后一次。最后一周的周二下午刚好也是宇哥从长沙来到公司也算有缘分好歹怎么样也见到了一次。 图 29在绿辰第一次一周内全勤 14号我基本上就是在整理之前的工作内容和奇哥进行交接17号上午交接完办好离职我的第一份实习就这样结束了怎么也没有想到这么快就结束了。 图 30 离职收拾开发板和相关设备 整个实习过程结束后我进行了反思其实在这一个半月我也有做的不好的地方。每天下班之后就是看直播、刷抖音以为找到实习就万事大吉了工作的强度也不高没有真正全身心的投入。还有一点就是在招我进来之后我看公司这个岗位的招聘就停止了。但是四月初的时候我感觉有点奇怪为什么公司在招聘网站上又开始招嵌入式的实习生了我以为是要给我找个伴。结果哎人还是要多点忧患意识。走之前最后一餐也是去了公司同事第一次带我中午吃饭的店里吃了一顿煲仔饭这也算是有始有终吧。 图 31 煲仔饭 总的来说还是挺感谢这一个半月的实习经历帮我迈出了第一步。那天下午奇哥也跟我讲了很多给了问我一些忠告数字信号处理、微机原理、操作系统、工程数学这几本书我还记得。有些话在离职的时候没有亲口说出来在这里还是感谢奇哥和宇哥也是祝愿你们以后在自己的领域继续发光发热。 图 32 绿辰大门 四月下旬就是在处理学校的课程设计一个Linux一个DSP。
粤嵌的那个电子相册我是有认真搞后面自己多加了一个音乐播放器。这个和之前做的有所差别用的都是Linux C应用编程知识没有用Qt库。具体的功能要有点击特定的区域实现上一张、下一张、自动播放图片、黑屏退出应用程序、左右滑动切换图片相关功能。其中涉及到的知识点也比较多像文件IO、内存映射、触摸屏、bmp图片格式、进程、线程创建和同步、字符串操作等。 图 33 粤嵌开发板显示图片 具体的可以看我写的一篇博客现在是我阅读量最高的一篇文章里面有演示视频和工程源码有需要的可以参考。
粤嵌Linux GEC6818开发板实现电子相册_linux电子相册-CSDN博客
还有一个就是DSP的课程设计把基本的功能都实现就没做其他的了做的内容和之前的课程设计差不了太多没怎么用心。 图 34 DSP课程设计 五月劳动节放假调整、然后开始牛客刷笔试题备考cvte暑期实习笔试、夯实基础
完成学校的事后也是到五一了五一也是先去了东莞老姐家休息了一天我也没有跟家里人说我被裁的事以后也不会说了。 图 35 五一放假去老姐家 五一短暂修整了过后就开始修改简历、投暑期的实习投的有cvte的暑期实习笔试是安排在5月底差不多有一个月的时间准备。准备的这段时间开始调整作息和运动量之前实习的一个半月基本没怎么运动。我就发现了我要做成什么事首先就是要多锻炼身体变胖了也是侧面的反映出这段时间的状态比较差、没有这么自律。 图 36 开始调整、增加运动量 准备的过程基本上就是刷牛客上嵌入式软件的笔试题包括C、C、Linux基础、C应用开发、操作系统等时不时的也会看别人的面经。 图 37 牛客刷嵌入式软件的题 刷题、复盘、积累这样的日常差不多持续了三个礼拜这段时间内也是补了很多的基础知识和以前忽略的地方。有时候学是那么回事一做题就会暴露出很多的问题还有通过做题来发现以前不知道的知识点。不做题休息的时候就会看看B站爱上半导体这个账号发的视频挺有意思的可以帮助我从不同的角度理解以前所学过的内容。电子专业的低年级学生看这个也会有比较多好处可以更好地理解一些模电、数电、单片机的基础内容一个视频也不长看完就可以了解一个知识点我个人是比较推荐看的。 图 38 刷题过程 图 39 B站爱上半导体账号 很快也是到了笔试的日子笔试前也是吃了顿饺子希望有好运。笔试的题目范围很广C/C基础、Linux、操作系统、总线、C应用编程和一道字符串相关的编程题做的过程还行个人感觉勉勉强能过。过了两天笔试的结果出来了也是顺利通过了好在没有辜负这几个礼拜的付出。 图 40 笔试前吃饺子 图 41 通过笔试 五月也就差不多是这些内容之后就是等面试的通知。
六月参加cvte线上面试的经验总结、C、计算机与网络、刷题
差不多过了十天cvte西安产业园的人跟我打电话安排面试的时间采用的是线上视频面试。这一次面试可谓又是把我打回原型了问的范围和笔试一样很广但我的简历是偏Linux的就问了比较多Linux相关的。有底层驱动、C应用、用户态和内核态之间的通信方式系统调用以及一些常见的术语这些答得还是可以。但是我最薄弱的两部分C和计算机网络被问到问题就基本没有答上来面试结束之后我的感觉不是很好最后的情况也是没有通过面试。 图 42 面试失败 面完之后复盘、整理了一下面试过程没有答上来的问题。然后六月的主要任务就是学C基础和计算机网络补上两块短板。这两个我都是在B站上看视频、然后做笔记C是黑马而计算机网络是王道考研系列。 图 43 C基础学习 图 44 计算机网络学习 六月底的时候我的计划是暑假就不回家了投其他的暑期实习有点太晚了索性就在学校里投秋招的提前批回去的话如果有线下面试之类的就不方便。所以趁着端午节就回去一趟暑假就待在学校冲刺秋招提前批放假前和舍友们出去聚了一下。 图 45 端午回家 图 46 下高铁后随便拍拍 图 47 学期结束和舍友聚餐 七月ESP8266笔试、面试提升强度备战秋招提前批获得芯德科技offer
五六月份基本上都是在做笔试题或者面试开发板摸的比较少。以前一直没有摸过esp8266这个WiFi模块六月底、七月初的时候也是配合stm32体验了一下顺便回顾开发流程。 图 48 stm32和esp8266 在用esp8266模块的时候有配合OneNet云平台一起使用将开发板上的传感器数据通过WiFi模块发送到云平台进行实时监控其中主要的内容就是AT指令和POST、GET报文格式总的来说就是一些简单的物联网应用。做题做的比较烦的时候就会在学校里逛逛换一个食堂吃饭。 图 49 OneNet云平台数据采集 图 50 华农风景 esp8266体验了之后也是继续投简历那段时间差不多每一周都有一次正式的笔试或者面试。这里面印象比较深的是深圳元戎启行的面试面试官看起来比我大两三岁整体的面试体验也是很不错的。开始就是根据你的简历问一些基础的问题答得还行。问完之后就是手撕代码额这部分就勉勉强强整个面试差不多有一个小时面试完之后我个人还是比较有底的。过了两天HR问我考不考虑测试岗怎么说呢可能是投的人比较多软件开发岗学历好的大有人在我的学校和情况在竞争者中可能就是符合他们厂测试的水平的软件开发可能还是不够的。后边也是拒绝HR说的测试岗但是HR没有直接给我直接发感谢信我就觉得这次面试就算成功了加上一些电话面试面的多了整个人在后面的面试也是更有经验和信心了。 图 51 元戎启行岗位更换 后面也是继续在招聘网站和公司官网投了一些公司芯德的hr跟我打电话问我有没有时间去线下笔试、面试我也是答应了岗位的方向是Linux网络。芯德的HR跟我打电话的时候我都没有反应过来我都忘记了什么时候投过这个公司。后面去官网了解了一下是做ONU、OLT的厂商在国内的二线的厂商是属于头部位置的。到公司之后是先做了一个小时的笔试、做完之后就是技术面、技术面完之后就是老总面。笔试、面试的强度在面过的厂商里算中等的面试的过程也是比较顺利、氛围也挺好的。面过几家之后发现问的问题方向都大差不差可能有些点就会更细一些。第二天晚上也是收到了offer薪资和方向都还可以就签了后面也没有继续投其他公司了我的秋招就结束了。 图 52 VSOL offer 图 53 科学城创意大厦外景 图 54 秋招提前批投递汇总 八月芯德中试培训、学习
签了offer之后也是马不停蹄开始了在芯德的实习研发部门的同事都是要在测试这边干一个月然后再回到对应的产品线。干测试一个月的主要目的是熟悉公司的产品因为ONU、OLT这些产品学生一般是没有什么场合去使用到的路由器用的还多一点。在测试房有学习网络相关的协议、OLT/ONU的使用、打流仪的使用、批量测试组网等如果没有学习的话就直接写代码或者该bug会力不从心的用都用不好就不可能会开发。 图 55 OLT组网 图 56 批量打流测试 在中试测试的这一个月内遇到过一个比较奇怪的问题就是在打二层裸流和组播流的时候收到的包会比发出来的包多。一开始也是先排查了OLT这边有没有开PON口镜像如果开了镜像的话会把其一个的包转到其他配置镜像的口上这样包就会变多但是OLT这边没有开镜像。排查到后面也是发现一台ONU没有开IGMP Snooping导致把其他组播组成员的数据包也给转了一份。最后也是自己拿了两台ONU进行组网验实验的现象和所想是一致的。 图 57 组播问题排查 八月底也是开了生日会每个月都有我刚好是八月的也收到了一份公司的生日礼物。刚来公司没一个月就拿了运气真好很开心。 图 58 8月生日会 一个月过得很快在中试这边学习了一个月之后就要回产线了其实就隔了一栋楼。在中试的一个月收获挺多每天就好像在学校里做实验一样自己接线组网来验证问题遇到不会的中试同事也会跟我讲解。中试的同事基本上都是95-00年、加上一些老员工有很多话题聊得来每天中午都会约到一起去吃饭。在中试的每一天都很开心之前的实习就没有这种感觉。 图 59 回产线前在中试的最后一张图 在中试的每一天都会写日报记录当天的工作内容和学习情况这些我在回产线之前也是进行了汇总以便日后遇到什么问题可以快速查阅。 图 60 中试学习汇总 九月回产线熟悉代码和基本工具的使用、流氓ONU的移植
软件部门当中又分了两个产品线一个产品线是做ONU的、另一个产品线是做OLT的我被分到做OLT的产线。回到产线之后部门给我安排的师傅是我的校友姓黄他是21年也毕业的在公司也工作两年多了他PON芯片相关的开发比较多。刚回产线就是先熟悉工具的使用、编码的规范、整体的开发流程、svn、项目管理系统的使用。 图 61 回产线后的工位 熟悉了一个礼拜之后给我分配的第一个任务是OLT中流氓ONURogue ONU功能。这里先简单介绍一下OLT和ONU之间的交互方式。上行方向OLT-ONU是通过广播的方式将数据包转到每个ONUONU再根据GEM PORTID来识别是不是发给自己的包是就接收。下行方向ONU-OLT采用TDMA时分多址访问也就是OLT会给每个ONU分配一定的时隙时间片与其交互。每台ONU只能在指定的时隙内和OLT进行交互。 图 62 GPON下行数据 图 63 GPON上行数据 出现流氓ONU的现象就是在一台OLT的一个PON口批量注册多台ONU发现有一台或者几台ONU可以正常注册但是其他的ONU无法注册上OLT。流氓ONU就是在上行方向上占满了整个时隙导致其他ONU无法和OLT进行交互最后导致ONU掉注册。 图 64 Rogue ONU功能Web界面 九月份也是我回产线的第一个月主要是在熟悉开发环境Linux开始Rogue ONU功能的开发。 图 65 下班在公司简单吃点 十月HTML、CSS的学习、ONU Common Service的移植和测试、解bug
产品提供给用户的管理方式有CLI、Web、Telnet其中内嵌了Web服务器就避免不了要学习一些基本的网页界面设计。国庆的时候也是抽时间学了html、css、js因为我们的产品提供一些表、按钮进行业务的配置和回显没有像专业前端那边用框架。大框架其实已经搭建好了学了些基础标签的使用和css语法格式就好了在实操中遇到问题就再解决。 图 66 html学习 图 67 浏览器显示html文件 月初国庆回老家正好赶上高中的学校100年校庆回学校参加了活动见到了三年没见到高中的老师。 图 68 高中学校100年校庆 我负责的Rogue ONU模块提供Web、CLI两种方式供客户进行配置整体的难点就在交换芯片和PON芯片之间的交互。交换芯片是将配置下发到PON芯片这边开启Rogue ONU检测PON芯片要将检测到的Rogue ONU信息回传给交换芯片。产品的一期功能完成后就进入测试了测试过程中试的同事会报上出现的bug。我也被安排去解一些简单的bugbug也是不断积累慢慢有自己的一个bug库了。这样以后遇到类似的bug就可以更快解决可能这就是所谓的经验吧。 图 69 积累的bug库 Rogue ONU功能差不多半个月之后就差不多结束了后面的就是给测试的同事进行测试。后半个月就是在移植一个功能到当前项目上ONU Common Service这是一个介于配置单台ONU和模板的功能。此模块主要是在配置单台 ONU 的 Tcont、GemPort、Service、Service Port、PortVLAN 基础上移植的。移植过程中遇到的困难主要是多层循环遍历针对多种情况都要进行考虑。类似于 ONU 是否绑定 Line 模板、一些配置项的从属关系比如GemPort 存在时对应的 Tcont 就不能先删除Service、Service Port存在就不能先删除GemPort、不同情况下的错误处理、告警弹窗灵活处理等。这个功能难倒是不难主要是是比较繁琐有很多情况需要考虑这个功能就只提供了Web进行配置和回显。 图 70 ONU Common Service功能Web界面 月底的时候公司也是组织研发团队出去旅游我实习也带上我了。周末两天去了清远的欧家梯田和湖南的莽山市中心呆久了出去外面亲近亲近大自然山里的空气也更好十月就这样结束了。 图 71 清远欧家梯田 图 72 莽山山顶 十一月V1600XG02项目阶段性总结复盘、PON技术学习、eNSP组网学习
回产线差不多两个月了也是对这两个月的学习和项目进行了阶段性的总结。这两个月的工作基本上都是在应用层忽视了一些基本理论知识的学习也是重新重视起来。后来也是找了课学习GPON、XG(S)-PON的基础知识。 图 73 GPON、XG(S)-PON的基础知识 用eNSP软件进行组网加深理解一些之前学的网络基础知识和协议像VLAN、路由协议、NAT、组播等。有需要的可以参考下发方的链接里面也有工程的源文件。
eNSP实验-CSDN博客 图 74 eNSP组网 图 75 eNSP实验 动物园产线团建逛完之后就去了吃海鲜自助。 图 76 产线动物园团建 图 77 海鲜自助 周日下午也是到食堂一起看S13的总决赛也是大学最后一次这样大家一起坐下来看比赛氛围挺棒的小虎真的是燃烧了自己十月份和十一月份干的累但是也玩的多。 图 78 西园三楼S13总决赛 十二月客户定制模块流程、年终汇总
十二月份主要弄了客户定制模块。这个功能就是将客户的定制需求先写入到文件中然后通过shell脚本读取数据。将客户的数据文件通过mkfs.ubifs、ubinize工具编译成一个分区最终生成 custo.ubi 可 FLASH 直接烧写文件在启动的时候通过启动脚本手动mount挂载到/mnt节点下。代码中就通过系统调用来读取文件中客户的要求和属性来配置描述客户的结构体其他地方就根据结构体中的属性值来进行添加或者删除相关功能。这一套流程下来主要是更了解项目的编译过程、整个OLT的启动流程和各个分区挂载的顺序。自己也是在顶层的Makefile中添加了新的目标编译项和shell脚本。12月份产品也是通过了测试正式在公司官网上线了这也是在市面上第一个产品里有我写的代码也是刚好12月1日有客户下了单。 图 79 产品在官网上线 年底的时候也是进行了年终总结第一次制作PPT在产线同事面前汇报工作 图 80 年终汇报 总结和展望
通过今年的努力也是成功地实现了去年定的目标然后也是加把劲明年能够顺利转正在Linux网络这个领域站稳脚跟。 图 81 2022年定下的目标 校园生活过一天少一天公司的同事也是叫我珍惜最后半年的大学生活没事就去旅旅游看看祖国的大好河山以后就没这么好的机会了。对于我来说毕业以后的生活有点憧憬、又有点害怕。没了学生这个身份不管是生活还是职场都要担起更多的责任但这也是每个人的必经之路。新的一年的首要任务就是完成毕业设计顺利毕业给大学生活划上一个句号交上一份满意的答卷。最后也是祝CSDN的小伙伴和我自己在新的一年能够好好吃饭、好好睡觉、身体健康、平平安安、天天开心。