1、翻出来“文物”
翻出来两张文物,两张光盘,一张是AVR光盘,一张是DSP光盘;想当年AVR的火热程度不亚于如今的STM32,10年前最火的单片机是ATMEL MEGA16,结果今天基本消声匿迹,最火的变成了STM32。当年视频教程最常见的就是郭天祥10天学会51单片机,以及姊妹篇10天学会AVR单片机。51单片机倒是认认真真看了,写了几个简单的小程序,AVR和PIC就丢一边,没有坚持下来。都是满满的回忆,最后悔的是DSP这张光盘没有认真的学习。舍不得花100多块钱买个开发板,当然没有项目落地的情况下,我相信即使当时买了,我也只是止步于跑个Demo。只有我的毕设是软件方向,才有可能有机会在当时实现一次转身。
AVR的一个闪烁LED灯的程序,没有工程概念,一个文件里边写所有程序,差评。
/*********************************************
Demo_5_2.c
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
#include <mega16.h> // 包括器件配置定义的头文件,不能缺少
#ifndef __SLEEP_DEFINED__
#define __SLEEP_DEFINED__
.EQU __se_bit=0x40
.EQU __sm_mask=0xB0
.EQU __sm_powerdown=0x20
.EQU __sm_powersave=0x30
.EQU __sm_standby=0xA0
.EQU __sm_ext_standby=0xB0
.EQU __sm_adc_noise_red=0x10
.SET power_ctrl_reg=mcucr
#endif
#include <delay.h> // 包括延时函数定义的头文件,使用延时函数时不能缺少
void main(void)
{
// 定义PortC口的工作方式
PORTC=0x01; // PC口的第0位输出"1",LED不亮
DDRC=0x01; // 定义PC口的第0位为输出方式
// 主循环
while (1)
{
delay_ms(1000); // 调用CVAVR提供的毫秒延时函数,延时1s
PORTC.0 = ~PORTC.0; // PC口第0位输出取反
};
}
TMS0F2812 DSP的LED跑马灯程序如下,没有工程概念,一个文件里边写所有程序,差评。
//###########################################################################
//
// FILE: hardware.c
//
// TITLE: DSP28 GPIO - Port B7..B0 :, software delay
//
//
//###########################################################################
#include "DSP281x_Device.h"
// Prototype statements for functions found within this file.
void delay_loop(long);
void Gpio_select(void);
void InitSystem(void);
void main(void)
{
unsigned int i;
unsigned int LED[8]= {0x0001,0x0002,0x0004,0x0008,
0x0010,0x0020,0x0040,0x0080};
InitSystem(); // Initialize the DSP's core Registers
// Speed_up the silicon A Revision.
// No need to call this function for Rev. C later silicon versions
Gpio_select(); // Setup the GPIO Multiplex Registers
while(1)
{
for(i=0;i<14;i++){
if(i<7) GpioDataRegs.GPBDAT.all = LED[i];
else GpioDataRegs.GPBDAT.all = LED[14-i];
delay_loop(1000000);
}
}
}
void delay_loop(long end)
{
long i;
for (i = 0; i < end; i++);
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
SysCtrlRegs.WDKEY = 0xAA;
EDIS;
}
void Gpio_select(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all = 0x0; // all GPIO port Pin's to I/O
GpioMuxRegs.GPBMUX.all = 0x0;
GpioMuxRegs.GPDMUX.all = 0x0;
GpioMuxRegs.GPFMUX.all = 0x0;
GpioMuxRegs.GPEMUX.all = 0x0;
GpioMuxRegs.GPGMUX.all = 0x0;
GpioMuxRegs.GPADIR.all = 0x0; // GPIO PORT as input
GpioMuxRegs.GPBDIR.all = 0x00FF; // GPIO Port B15-B8 input , B7-B0 output
GpioMuxRegs.GPDDIR.all = 0x0; // GPIO PORT as input
GpioMuxRegs.GPEDIR.all = 0x0; // GPIO PORT as input
GpioMuxRegs.GPFDIR.all = 0x0; // GPIO PORT as input
GpioMuxRegs.GPGDIR.all = 0x0; // GPIO PORT as input
GpioMuxRegs.GPAQUAL.all = 0x0; // Set GPIO input qualifier values to zero
GpioMuxRegs.GPBQUAL.all = 0x0;
GpioMuxRegs.GPDQUAL.all = 0x0;
GpioMuxRegs.GPEQUAL.all = 0x0;
EDIS;
}
void InitSystem(void)
{
EALLOW;
SysCtrlRegs.WDCR= 0x00AF; // Setup the watchdog
// 0x00E8 to disable the Watchdog , Prescaler = 1
// 0x00AF to NOT disable the Watchdog, Prescaler = 64
SysCtrlRegs.SCSR = 0; // Watchdog generates a RESET
SysCtrlRegs.PLLCR.bit.DIV = 10; // Setup the Clock PLL to multiply by 5
SysCtrlRegs.HISPCP.all = 0x1; // Setup Highspeed Clock Prescaler to divide by 2
SysCtrlRegs.LOSPCP.all = 0x2; // Setup Lowspeed CLock Prescaler to divide by 4
// Peripheral clock enables set for the selected peripherals.
SysCtrlRegs.PCLKCR.bit.EVAENCLK=0;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;
SysCtrlRegs.PCLKCR.bit.SCIAENCLK=0;
SysCtrlRegs.PCLKCR.bit.SCIBENCLK=0;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=0;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=0;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=0;
EDIS;
}
//===========================================================================
// End of SourceCode.
//===========================================================================
2、生活感悟
吐槽归吐槽,回想这些年走过的路,也是不容易,大学四年过得浑浑噩噩,没有在嵌入式软件上花太多的功夫,却花了很多时间考了两个作用不太大的计算机四级证书。当时也听说过计算机软考这么一个东西,但是道听途说非计算机专业要过很难,另外一方面是由于学校位于一个小城市,而这些大型考试只有在省会级城市才有。所以氛围不强,周边的人没有听说有考过的。然后就没提起这个念想了。直至毕业后第一家公司遇到华科毕业的同事才发现他有考这个证,而且他们几乎人手一本。
回想起来大学那几年几乎都是自己一个人埋头走路,却不抬头看路,成绩中下游,70-80多分每门,然后就没有信心去考研,专心考证,而且还是考的鸡肋的计算机四级。后来大四上学期找到了工作,然后进入老师实验室做毕设。搞的没卵用的MATLAB仿真,当然不是指这个软件没用,而是作为一个本科生以后的工作还轮不到你来用这个软件来做研究,所以是一些无用的时间投入。研究了一些电路图。后来进入公司后分配的硬件岗,如果没有实验室研究电路图的经历可能分配的是测试岗,另外一个更加坑的方向,也不算一个最差的结局。
之后做产品维护,项目开发,从硬件工程师做到项目经理,然后2020年跳槽到大厂继续做硬件工程师。前几年做项目经理发现自己的视野非常窄,对软件几乎是一无所知,我甚至分不清485,串口和Modbus的区别。导致在一些项目上掉了链子,当然项目最后还是很成功的,得到了领导的肯定。在2020年初疫情期间,我痛定思痛开始学习软件,学习正点原子的STM32等等一直持续到今,原本想着能不能转行到软件,后来发现还是自己太天真了,几乎不可能,不存在这种公司。即使有你也无法接受,这个年龄段承受不起的转行成本。现在想法也慢慢改变了,我可以往系统工程师发展,我可以补充自己的软件知识,作为自己能力的互补,或者说当成一个爱好,以后去陶冶我的下一代,让我的下一代不要走这么多弯路。
另外前几年政府出了一个政策,世界500强的高校毕业的全日制硕士(本科学校完全可以的),可以和政府申请15W的人才补贴,我的是在职的,没有拿到,心痛。应该走考研的道路,走上软件研发的人生规划,那样子选择会更多。
学历真的很重要,特别是全日制的,搞科研尽量读研。