个人介绍
我是程序员客栈的卡比兽有点污,一名后端/嵌入式-C++工程师。
我毕业与于西北农林科技大学;在三星(中国)半导体有限公司担任Device Driver。平常负责车载软件中关于Display,GPU,DPU相关客户需求的代码实现,各类测试和问题修复。
技术栈包括C++,Python,MATLAB,LaTeX论文排版。
设计类技术栈包括:前端网页设计,客户端UI设计+客户端开发。
工作经历
2022-07-11 -至今三星(中国)半导体有限公司Device Driver
在三星(中国)半导体有限公司担任Device Driver。平常负责车载软件中关于Display,GPU,DPU相关客户需求的代码实现,各类测试和问题修复。
教育经历
2018-09-15 - 2022-06-30西北农林科技大学计算机科学与技术本科
西北农林科技大学 计算机科学与技术 本科 信息工程学院 2018年09月 - 2022年06月 GPA:3.36/4.0(专业前20%)
技能
旅行商问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。 1.随机生成带权无向图; 2.设计算法依据题目要求寻找最短回路。 采用随机生成或键盘输入的方式生成各个城市在图中的点坐标,城市距离利用欧氏距离得出。 然后基于蚁群算法来寻找一条最优路线,通过信息素浓度,启发函数为参数。经过多次迭代,每一次迭代过程中又通过一个蚁群。从而随着路径中信息素浓度的不断增大,用轮盘赌算法得出最优解,然后以无相连通图的方式对该路线进行描述并完成GUI绘制。 最后,我们会在小组内对这两种算法的收敛速度和最优解路径总长度进行比较,比较两种算法的优缺点,。
象棋比赛计时表设计 1.设计总任务 利用实验箱中8253定时器,设计二个数字屏显电子表,对象棋比赛中红白两方比赛用时进行自动计时。 2.设计调试基本要求 2.1定时器要求采用实验板上的8253定时器实现。 2.2在屏幕上用显示二个数字屏显电子表(画图),表中各2位显示“时:分:秒” ,分别显示比赛红黑双方比赛实际用时并同时显示屏幕显示比赛双方个人情况介绍。 以上为红黑双方比赛倒计时及位置简单说明的示意图,因为没有拍照,所以用示意图说明。 2.3比赛双方各设置一个计时按钮,一方走棋结束按按钮一次 开始计时,同时对方表停止计时。 2.4快棋比赛可设定比赛时间。一方用时结束,喇叭响铃提示,同时显示屏显示双方比赛用时和比赛胜负判断结果。 总的象棋计时表可以分为以下几个模块。 数码管与键盘控制模块:这一块是最基础也是最重要的模块,虽然最终大多数信息是在液晶屏上显示的。但是因为这一部分在控制数码管的同时也要去控制键盘的响应。所以我选择从这个模块开始编写,一方面,因为之前的一些设计性试验中接触到数码管会多于其他模块。另一方面这一模块写好了,逻辑理顺了,也更有助于之后其他模块与键盘的互动。这一块儿参考了实例代码中电子钟的代码,模仿着用8253来控制倒计时。也由于功能不太一样,中断的代码要大改,这一模块的入手使我进一步熟悉了8259中断控制器的工作方式。 休赛与语音控制模块:总的来说这一块儿还是一个比较实用的模块,试想,象棋的对弈有的时候下个个把小时也实属正常,所以这个功能就在第一个模块设计完之后来改些。通过按键的响应来控制双方的倒计时同时暂停。此外还有语音模块的播放,期初我用的是PLAYE端口,但是电平控制不容易控制音乐播放的随停随开。后来想了很多,发现用电平其实可以。 结束阶段与响应模块:这一块也会涉及到很多字模数组的显示,但是由于是偶数个数字,所以总的来说这一块儿的设计还算比较顺利。最后因为到能控制蜂鸣器响铃后用到的芯片还不太多,就又加上了直流电机的三个小白灯。 再来一次循环控制模块:很多同学因为时间来不及,设计的游戏或是软件没有来得及写再来一次的功能。但因为我这边用到的外设本身比较多,所以其实写到最后,很多端口该怎么控制已经挺熟悉的了。这一块儿开始也有不少bug,但耐心调试后,把各个端口卸载纸上去思考逻辑后,很快就改好了这些部分。 1.接口芯片选择与电路设计 首先因为计时表必然要用到计时功能,所以需要一片8253,另外由于时间的倒计时需要一直计数,这里用的是方式二。 计数器T0设置在模式2状态,HEX计数,二进制,计数器0先低后高。选用的控制字为00110100 几乎是和8253一同完成了程序的计时中断任务,该软件中也用到了8259芯片。 另外由于众多外设的需要,8255也发挥了很大的作用。这里A口,B口和C口都起到了不同的作用。其中PA连接数码管控制段选(即数码管显示的具体值09(数码管有更广的显示范围,但这里控制的是自然时间,只用到了09)),PB分贝控制按键连接线和数码管片选(即究竟是哪一个“8”点亮)。C口则控制KL0和KL1来接受键盘的值。高位中PC7连接语音模块的PC7,PC6连接直流电机的三个小白灯,PC5连接蜂鸣器的Ctrl。 2.外设选择与电路设计 外设用到的主要有七段数码管(8片),液晶屏,直流电机的三个小白灯,语音模块以及蜂鸣器。具体的电路图已经在三 总体设计的硬件电路设计中画出,在此不再赘述。只对一些连线的细节说明。 因为用到的液晶屏模块也需要一根线来连接#CS片选信号。这里为了防止其余8255冲突,改用了#CS5。此外实验指导书中关于12864M液晶显示屏的连线,基于汇编的ASM代码与基于C的C代码给出的连线图不一样。经过测试后发现。其实都用该用汇编语言代码下对应的连线图。 此外需注意直流电机是低电平亮,而蜂鸣器是高电平响,语音模块又不太一样,是需要一个脉冲(下降沿),理论上来讲PLAYE和PLAYL都可以控制。但是PLAYE电平控制不易实现即开即停。 3.软件设计 程序的核心为Time0Int和AddCount函数。 Time0Int的逻辑为先判断是谁的回合,round为0表示在红方棋手的回合;反之为黑方选手的回合。然后判断红方选手的分钟数是否为0,如果为0,则检查秒数是否为0,如果都为0且未走够步数则调用函数显示胜负结果并给C口高位送值让蜂鸣器响,让灯亮。如果走够了步数,则重新设置步数限制和红黑双方的倒计时时间。其余情况正常减少一秒的时间。有时需处理进位。 AddCount函数用来调用函数在液晶屏和数码管上显示对应的值。并且会有按键检测。具体的逻已经在图表3 软件使用与逻辑示意图中说明,在此不再赘述。