EDN首页   博客首页

7

关于投票
一个程序员的忠告--转贴
诸位,咱当电子工程师也是十余年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强!

[1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手! 
  

[2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!   

[3]不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,美国日本,一律如此!   

[4]多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!

[5]知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!! 

[6]抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!   

[7]逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,脸皮太薄,心不够黑,教条式思维。。。这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好--尽管你可能技术不错!   

[8]工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!   

[9]要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...   

[10]该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!
系统分类: 嵌入式
用户分类: vxworks学习心得
标签: 一个程序员的忠告
来源: 转贴
发表评论 阅读全文(1051) | 回复(3)

5

关于投票
学习到了瓶颈--有谁能给指明方向

        好久没有写什么东西了,感觉以前也写了一些,但多数是经验性的,或是学习后对知识的总结。自己还没有从一个较高的高度去看嵌入式的东西,不论是硬件还是软件。现在觉得有时候工程中多数是经验技巧,这样其实就不会有什么突破性的东西。就像现在开始做一些嵌入式的软件,总的感觉就是一直在缝缝补补,要把一个软件左右的漏洞都找到,然后让它去避免这些问题。

      现在学习就到了一个瓶颈的地方,很难有什么进步,每天写程序,调程序感觉快变成一种不经过大脑的条件反射。现在很希望能在理论方面多看点东西,但总是没有一个确定的方向。迷茫......

      希望哪位大虾有什么好的建议给我说一下!谢谢

系统分类: 嵌入式
用户分类: vxworks学习心得
标签: 学习到了瓶颈
来源: 原创
发表评论 阅读全文(2359) | 回复(8)

9

关于投票
vxworks与构件化

现在看一些文章中,构件化的思想在嵌入式中的应用很广泛。不过提到构件化这三个字就让人有种望而却步的感觉。这段时间调老板给的那一大堆程序,就发现原来这里面用的也是构件化思想。

uc/gui能把这个东西移植到Vxworks上吗?答案是OK。其实uc/gui与硬件有关的,与操作系统有关的函数接口很少,就把那几个函数用Vxworks的函数替换一下就OK了。而与硬件有关的函数最重要的就是一个贴图函数,所谓贴图函数就是将一块内存中的图像直接写入图像显示的显存地址,这样就将图像显示在显示器上了。当然这一切的基础还是要将你的WindML配置好,然后初始化图形设备。

nucleus中的文件系统也可以移植到Vxworks上只要在Vxworks上开一块内存,然后再适配一些函数就可以在上面使用nucleus的Ramdisk的文件系统了。

我个人理解这些都得益于,构件化思想,所有的模块都作为一个构件,需要的外部接口尽量的少,而对外提供的服务则用统一的标准。这样再设计一个系统,所要做的工作就是像搭积木一样将所有的构件,搭在一起来实现一个复杂的功能。

大家对构件有什么理解欢迎来讨论!

系统分类: 嵌入式
用户分类: vxworks学习心得
标签: vxworks与构件化
来源: 无分类
发表评论 阅读全文(1026) | 回复(1)

10

关于投票
vxworks关于库的一些问题

在vxworks中将自己的程序全都做成库即.a文件非常便于管理,但是关于做库和库的使用也经常出现问题。

1 在做库的时候,尽量使库文件只对外提供服务,减少库文件之间的函数调用,因为那样经常会造成,符号不能解析的错误

2 在自己的库文件里面的内容改变较大的时候,尽量将以前的.a文件删除,并且重新dependence一下再编译,有时候应用程序的错误就是因为自己的库文件的问题。

3 注意自己在编译器选项里面的选择,不要忘记将自己头文件文件夹包含进去

4 在调用库的时候,默认下即使你只使用库里的一个函数,编译器也会将你库里的其他所有函数编译进去,所以当你发现,虽然只调了一个库里简单的程序,自己的Vxworks映像就变得特别大不用惊讶,这不是你的错。编译器设置应该可以更改,不过还不知道?

 

系统分类: 嵌入式
用户分类: vxworks学习心得
标签: vxworks关于库的一些问题
来源: 无分类
发表评论 阅读全文(1207) | 回复(0)

18

关于投票
我给本科生做的vxworks课件
看看我做怎么样?希望大家提点意见,好及时改正。将学校的模版改了,可能有些地方格式有点乱。主要是内容。rar
系统分类: 嵌入式
用户分类: vxworks学习心得
标签: vxworks课件
来源: 无分类
发表评论 阅读全文(1656) | 回复(4)

15

关于投票
vxworks加入静态库引起的麻烦

前段时间,老板给了一大堆程序要移植到vxworks上,做好适配后将程序都作成了.a文件。但是把所有的库加进去,build没什么问题。但是在下载到目标板以后start at 308000就死了。而把库去掉就没问题了。困扰啊!忙了几天。先后试了去掉MMU,cache,有时候有点作用但是还是很不稳定。

感觉应该是内存方面的问题,于是跟到内核一点点地打印,前面发了通过串口打印的程序。最后发现在内核初始化前,打印内存大小时出现问题。于是又仔细的看了一下,初始化内存的资料。我用的工控板,X86支持自动计算内存大小,现在我还是不知道它是怎么计算的内存,但是感觉应该是这个地方的问题。于是我将自动计算内存关掉,自己设置一个固定值。OK啦!再用MMU和cache都没什么问题了。

仔细想想应该是函数memtop这个函数出现了问题。

系统分类: 嵌入式
用户分类: vxworks学习心得
标签: vxworks加入静态库引起的麻烦
来源: 无分类
发表评论 阅读全文(1148) | 回复(5)

36

关于投票
vxworks一个串口的易理解的测试程序

#nclude "vxWorks.h"
#include "config.h"
#include "tffs/flsocket.h"
#include "tffs/pcic.h"
#include

#define COM1_PORT   0x3F8
#define inportb sysInByte
#define outportb sysOutByte

void com_send_string(unsigned char *str);
void  com_send_data(unsigned char sdata);
int com1_send_data_ready(void);
int com1_recv_data_ready(void);
unsigned char com1_recv_data(void);
void com1_init(void);

 

void maintask(void)
{
 unsigned char str[]="send success!";
 char i;
 /*com1_init();/*初始化串口*/
 while(1)
 {
              if(com1_recv_data_ready())
  {
                 i="com1"_recv_data();
         com_send_data(i);
  com_send_string(str);
                break;
                 }
 
 }
 
}
/***************************************/

/*发送一个字符串*/
void com_send_string(unsigned char *str)
{
 int i;
 i="0";
 while(str[i] != '\0')
 {
  com_send_data(str[i]);
  i++;
 }
}

/*发送一个字符*/
void  com_send_data(unsigned char sdata)
{
  while(1)
  {
    if(com1_send_data_ready())   /* send data to com1 ready: 1, else 0*/
     {
        outportb(COM1_PORT,sdata);    /* send data to com1( 查询方式?)*/
        break;
     }
  }
}


/*发送数据是否就绪*/
int com1_send_data_ready(void)   /* send data to com1 ready: 1, else 0*/
{
 if(((unsigned char )inportb(COM1_PORT+5) & 0x20)!= 0)
  return 1;
 else return 0;
}
/*接收数据是否就绪*/
int com1_recv_data_ready(void)
{
 if(((unsigned char )inportb(COM1_PORT+5) & 0x01)!= 0)
  return 1;
 else return 0;
}

/*接收数据*/
unsigned char com1_recv_data(void)
{
 return inportb(COM1_PORT);
}


/*初始化串口*/
void com1_init(void)
 {
   outportb(COM1_PORT+3,0x80);   /* DLAB="1", set baud*/
 outportb(COM1_PORT,0x0c);     /* 波特率 0x30:2400 0x18:4800 0x0c:9600*/
 outportb(COM1_PORT+1,0x00);
 outportb(COM1_PORT+3,0x03);   /* data length: 8 , stop bits: 1*/
 outportb(COM1_PORT+4,0x0b);
 outportb(COM1_PORT+1,0x01);   /* receive interrupt enable*/
 inportb(COM1_PORT);
 }

系统分类: 嵌入式
用户分类: vxworks学习心得
标签: vxworks一个串口的易理解的测试程序
来源: 无分类
发表评论 阅读全文(1104) | 回复(2)

35

关于投票
vxworks一个任务和信号量的测试程序

这个程序有利于自己对信号量的理解

#include "semLib.h" 
#include "taskLib.h"
#include "osdrv.H"
/*测试适配的任务和信号量的函数*/
void taskSub1();
void taskSub2();

XHANDLE semm;

void taskMain() /*主任务:在shell下输入sp taskMain*/
{
    XHANDLE subId1,subId2;
    semm="SimOs"_CreateSemaphore(1, "no name");/*生成信号量*/
    printf("semm OK\n");
    subId1=SimOs_CreatThread(taskSub1, 0, 0, XTASK_PRIORITY_ABOVE_NORMAL,XW_DEFAULT, 2000, 0, "taskSub");/*生成子任务,优先级比主任务的100要高*/
    printf("taskSub1 spawned\n");

    subId2=SimOs_CreatThread(taskSub2, 0, 0, XTASK_PRIORITY_ABOVE_NORMAL,XW_DEFAULT, 2000, 0, "taskSub");/*生成子任务,优先级比主任务的100要高*/
    printf("taskSub2 spawned\n");
    taskSuspend(0);
    if(taskDelete(subId1)!=OK)
      printf("delete taskSub error:%d\n",errno);
    else
      printf("taskSub deleteed.OK\n"); 

    if(taskDelete(subId2)!=OK)
      printf("delete taskSub error:%d\n",errno);
    else
      printf("taskSub deleteed.OK\n");       
      
}

void taskSub1()
{
     SimOs_ObtainSemaphore(semm, XW_INFINITE);/*获取信号量*/
     taskSuspend(0);
     printf("taskSub:resumed and release mutex1a\n");
     SimOs_ReleaseSemaphore(semm);/*释放信号量*/
     printf("taskSub:resumed and release mutex1b\n");
 
}

void taskSub2()
{    printf("come into the taskSub2\n");
     SimOs_ObtainSemaphore(semm, XW_INFINITE);/*获取信号量*/
     printf("taskSub:resumed and release mutex2a\n");
     SimOs_ReleaseSemaphore(semm);/*释放信号量*/
     printf("taskSub:resumed and release mutex2b\n");
 
}

系统分类: 嵌入式
用户分类: vxworks学习心得
标签: vxworks一个任务和信号量的测试程序
来源: 无分类
发表评论 阅读全文(979) | 回复(1)

35

关于投票
vxworks中断管理
vxworks提供intLib,intArchLib,excLib,excArchLib作为中断的上层管理。函数有intConnect,intLock,intUnlock
intLockLevelSet和intLockLevelGet函数操作中断闭锁的级别。
intConnect(VOIDFUNCPTR *vector,VOIDFUNCPTR routine,int parameter)
vector为相关中断向量表中的编译地址,routine为C函数指针,parameter为C函数的传入参数。
ivColdfire.h中的定义的宏
/*将中断向量转化为中断号*/
#define IVEC_TO_INUM(intvec)  ((int)(intvec)>>2)
/*将中断号转化成中断向量*/
#define INUM_TO_IVEC(intNum) ((VOIDFUNCPTR*)((intNum)<<2))
/*将trap号转化成中断向量*/
#define TRAPNUM_TO_IVEC(trapNum) INUM_TO_IVEC (32+trapNum)
系统分类: 嵌入式
用户分类: vxworks学习心得
标签: vxworks中断管理
来源: 无分类
发表评论 阅读全文(1269) | 回复(0)

36

关于投票
vxworks编程注意事项


1 在注释时要用/*  */,如果用// 有可能报错。
 解决方法:在编译规则里去掉 -ansi 开关
 问题:可能极少ansi c的扩展不能用。
 引用:“One way to do this is by removing the -ansi switch. However, you may wish to keep

your source base ANSI compliant. I do use builtin alloca() and other functions occasionally;

but I prefer the code to compile anywhere. Passing the "-Wp,-lang-c" argument should only

enable CPP comments. Here is the comment from the pre-processor docs”。
2 定义变量要在程序其它语句前,否则会报错。
3 应用程序第一行有汉语注释,编译的时候会报错.
4 在取文件名时尽量不要用大写字母开头,容易报错.

系统分类: 嵌入式
用户分类: vxworks学习心得
标签: vxworks编程注意事项
来源: 无分类
发表评论 阅读全文(996) | 回复(0)
2下一页总共 , 当前 /