EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2006/12/31 15:56:40

7

关于投票

一个程序员的忠告--转贴

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

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

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

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

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

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

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

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

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

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

[10]该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: 一个程序员的忠告  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(1218) | 回复(3)

发表于 2006/12/12 17:35:02

5

关于投票

学习到了瓶颈--有谁能给指明方向

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

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

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

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: 学习到了瓶颈  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(2748) | 回复(7)

发表于 2006/11/21 23:17:20

9

关于投票

vxworks与构件化

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

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

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

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

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

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: vxworks与构件化  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1325) | 回复(1)

发表于 2006/11/21 22:03:13

10

关于投票

vxworks关于库的一些问题

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

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

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

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

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

 

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: vxworks关于库的一些问题  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1718) | 回复(0)

发表于 2006/11/14 23:49:49

18

关于投票

我给本科生做的vxworks课件

看看我做怎么样?希望大家提点意见,好及时改正。将学校的模版改了,可能有些地方格式有点乱。主要是内容。rar

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: vxworks课件  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(2302) | 回复(4)

发表于 2006/11/14 12:32:23

15

关于投票

vxworks加入静态库引起的麻烦

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

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

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

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: vxworks加入静态库引起的麻烦  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1634) | 回复(5)

发表于 2006/11/6 23:34:59

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一个串口的易理解的测试程序  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1506) | 回复(2)

发表于 2006/11/6 23:32:52

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一个任务和信号量的测试程序  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1425) | 回复(1)

发表于 2006/11/6 23:27:32

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中断管理  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1880) | 回复(0)

发表于 2006/11/6 23:24:14

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编程注意事项  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1268) | 回复(0)

发表于 2006/11/2 23:23:25

33

关于投票

vxworks启动bootrom

以前用的工控板在CF卡启动时先启动dos6.22然后根据config.sys引导程序vxload.com(纯dos程序),vxload加载bootrom。这个过程很土,也很慢。今天看资料,觉得这样做不错可以直接加载bootrom。

在bin文件夹下有vxsys.exe文件,用它可以在CF卡的第一个扇区写一个加载程序,是机器码。做的方法是,用软驱启动进入dos6.22,将CF卡格式化,然后运行vxsys程序,即OK。然后就是将你做好的bootrom拷到CF卡上。bootrom文件一定要连续阿。

如果是用dos引导vxload,再加载bootrom,bootrom不连续也行(我是这样认为的)。

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: vxworks启动bootrom  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1986) | 回复(2)

发表于 2006/11/2 23:11:44

31

关于投票

vxworks路径名问题

编译时cpp.exe出错
  这个问题和环境变量"TEMP"的设置有关,要设置不带空格的路径名,因为Tornado不能正确的读取带空格的路径,如“C:\ Program Files”,注意Tornado的安装目录,即WIND_BASE

取名字的时候最好按规范起,这样不容易出错。还有WindML里的关于jpeg的函数有好多根uc/gui的函数名字相同,不知道是不是互相借鉴?

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: vxworks路径名  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(993) | 回复(0)

发表于 2006/11/2 23:08:45

31

关于投票

vxworks库连接顺序问题

库连接顺序问题,在一个库中的函数调用另一个库的函数时候,可能出现未解析的符号错误。从根本上说这种做法时不合理的。库最好自包含,对外提供服务。解决方法:
 1 可以使用GNU工具ar,将liba.a和libb.b链成一个大库
 2 将liba.a和libb.b连接入VxWorks中
 3 包含库时,重复写入库名,如“liba.a libb.b liba.a”,可以重复多次,使符号可以完全解析(这种方法比较土)
 4 使用“--start-group liba.a libb.a --end-group”,让GNU连接器重复解析符号

上个帖子出现的问题可能就是这个引起的。不能像vc那样将静态库调来调去,郁闷阿!

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: vxworks  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1329) | 回复(0)

发表于 2006/10/30 23:48:55

34

关于投票

跟我一样的vxworks论坛

刚在网上看见一个跟我志向相同的朋友,他建了一个vxworks的资料,然后又做了vxworks的论坛。我想大家都这样多多的交流,我们会做的越来越好的!留下网址他的网址希望大家看看http://jdvxworks.com/bbs/index.asp

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: 跟我一样的vxworks论坛  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(5918) | 回复(1)

发表于 2006/10/23 23:22:35

41

关于投票

vxworks组件配置

在vxworks刚入手的时候经常 是因为自己的组件配置不对而编译不通,往往浪费大量时间,还不知道哪里冲突了,以下是工控板正确配置通过的所有组件,也许用在别的地方不一定通过,不过可以参考一下,看看自己哪里有可能不对:

c++ components
  run static initializers
 
WindML components

 -WindML devices
   -WindML input device
     PS2 keyboard
    
-application components
 application initialization
 
-development tool components
 timex
 -Compiler support routines
  GNU....
 -WDB agent components
   -WDB agent services
     VIO driver
     WDB agent
     WDB banner
     WDB breakpoints
     WDB call function
     WDB callouts
     WDB events
     WDB exception notification
     WDB gopher
     WDB hardware fpp support
     WDB memory access
     WDB register access
     WDB system agent hardware fpp support
     WDB target server file system
     WDB task breakpoint
     WDB task creation
     WDB task exit notification
     WDB task hardware fpp support
     WDB tasks
     WDB user event
     WDB virtual I/O library
    -select WDB connection
       WDB END driver connection
     -select WDB mode
       WDB system debugging
       WDb task debugging
    -Windview compoents
     windview class intrumentation
     windview library
     -select timestamping
      sequential timestamping
     -upload path(s)
       TCP/IP socket upload path initialization
       TSFS upload path initialization
       file uploadpath initialization
     -windview buffer managerment library
       rBudder library
   
    - show routines
       exception show routines
       message queue show routine
       task show routine
     -symbol table components
       symbol table
      
      
 -hardware
   -memory
     BSP Memory configuration
     cache support
     enable caches
     -MMU
       MMU Mode
         basic MMU support
   
    -peripherals
      floppy driver (NEC 765)
     
     -clocks
      system clock
     
     -floating point libraries
      hardware fpp support
     -hard disks
       ATA hard driver
     -serial
      SIO
 
-network compnents
 -basic network initialization compnents
   basic network support
   network buffer initialization
   network mux initialiazition
  -bootline processing components
   network device name selection
   network device netmask setup
   -dhcp device address initialization
    DHCP client timestamp removal
   -network initialization
    intialize network at boot time
   -network devices
     configure the network boot device
     END attach interface
     END interface support
    
    -BSD Ethernet drivers
     loopback driver
 
  -network protocols
   -core TCP/IP compnents
     ARP Table for Ethnet
     BSD SOCKET
     ICMPv4
     IGMPv4
     IPv4
     interface index library
     TCPv4
     UDPv4
     network library support
   -TCP/IP configuration compnents
     API to ARP tables
     HOST TBL
    
    -network filesystems
      FTP client
      TFTP client
      -Network Remote I/O support
       remote command shell
       network host setup
       network remote I/O access
      
      
      
-operation system compnents
 -ANSI C compnents(libs)
  ANSI assert
  ANSI ctypr
  ANSI locale
  ANSI math
  ANSI stdio
  ANSI stdio extensions
  ANSI stdilb
  ANSI string
  ANSI time
  -IO system compnents
   DOS filesystem backward-compatibility
   IO system
   formatted IO
   fpp formatting for printf
   install select task delete hook
   message logging
   pipes
   select
   stdio
   terminal driver
   -dosFs File System Compnents (dosFs2)
    CBIO (Cached Block I/O)Support,cbioLib
    CBIO Disk Cache Handler
    CBIO Disk Partition Hander
    DOS File System Consistency Checker
    DOS File System FAT12/16/32 Handler
    DOS File System Volume Formatter Module
    dosfs File System Main Module(dosFs2)
    -DOS File System Directory Handlers
     DOS File System Old Drictory Format Handlers
     DOS File System VFAT Dirctory Handler
   -POSIX compnents
    POSIX clocks
   -kernel compnents
    BSP hardware initialization
    VxWorks envents
    binary semaphores
    counting semaphores
    environment variables
    exception handling
    exception task
    full teatured memory allocator
    kernel
    message queues
    minimal memory allocator
    mutex semaphores
    read the bootline
    signals
    system syartup code
    task hooks
    task variables
    watchdog timers
   -utility compnents
     buffer manager
     doubly linked lists
     hash library
     linked list library
     ring buffers
    

系统分类: 嵌入式  |  用户分类: vxworks学习心得  |  标签: vxworks 组件 配置  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(2616) | 回复(4)

2Next >Total , Page /