生活:翻出来两张“文物”

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的人才补贴,我的是在职的,没有拿到,心痛。应该走考研的道路,走上软件研发的人生规划,那样子选择会更多。
学历真的很重要,特别是全日制的,搞科研尽量读研。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值