做为一个有十多年工作经验而且工作内容与你相近的人说说自己的看法。
既然你自己都认为自己硬件方面的基础不够,说明你在以往的工作中主要是侧重于软件,嵌入式底层如果想做好,没有良好的硬件基础希望不太大,这里我说的硬件基础不是单指看数据手册,而是要明白硬件的工作原理,举个简单的例子,UART和USB同为串行传输方式,为什么USB可以实现高达480M的速率而UART做不到?不需要你达到自己可以设计出来的水平,但能理解其实现方法是必要的,不然你怎么可能快速解决所遇到的各种问题,你怎么可以让手上的硬件更好的发挥其效能。
看你有抱怨设计一个系统零部件成本计算的繁琐,是不是你之前并没有主导设计一个完整的产品,如果你觉得成本的计算过于麻烦,说明你还不知道系统成本预估的方法,主要器件的价格确实只能逐个算,电阻、电容、PCB和生产成本是只要知道板的大小就能预估出大致数目,至于前期开发、包装、市场费用都可套用经验参考值,用不着一条条的去细算。细算出来的结果也没有用,今天你算出来的数字是分毫不差,明天就有可能是大相径庭,因为市场是变动的,成本预估只要知道个大概以用给管理层做参考。
工作了十年,除非非常喜欢那种在自己技术空间里自由翱翔的感觉,不应该继续将自己当做技术螺丝钉,应该把自己从某一技术点面提升到系统开发,这会让你从另外一个角度看技术。可能你对于你目前的工作岗位是得心应手,不过从你的表述中给我的感觉是你的知识面并不太宽,好象局限在你工作的一个小圈子之中。
不少朋友已经给你指出了一条可以继续提升自己的路,写书,当然不一定必须走写书的途径,如果你真是自己认为已经积累了一定的技术经验,你可以对以往技术经验做一些回顾和反思,通过这一过程你会发现自己在技术上的诸多不足。你觉得你工作完全是重复劳动,技术上也没有提升的空间,这就是你将自己局限在自己的工作岗位之中表现。如果你多了解相关技术,你不会认为技术上没有了提升的空间,反而是会让你觉得恐惧,为什么会有更多不懂的东西出现在你面前。
我自认为在嵌入式方面C程序能力还算得上马马虎虎,前段时间有个项目从别的组转过来,项目需要对ARM代码进行解释执行,拿到源代码吓我一大跳,因为当时移交的人谈不上是经验丰富,可源代码体现的水平远超过我。(后来证实这是个误会,代码是另外的厉害角色参考网上代码修改而得)
//ADD(1) -- Page A7-5 | Rd = Rn + immed3 | Syntax -- ADD <Rd>, <Rn>, #<immed_3>
static _short inst_ADD_1(_ushort inst)
{
_ushort immed_3;
_ushort d,n;
_long64 Rn;
_long64 Result;
d = inst & 0x0007;
n = (inst >> 3) & 0x0007;
immed_3 = (inst >> 6) & 0x0007;
Rn = toe_r[n];
Result = Rn + immed_3;
set_NZ_flag( (_long)Result );
set_C_flag_add( Result, toe_r[n], immed_3 );
set_V_flag_add( (_long)Result, toe_r[n], immed_3);
toe_r[d] = (_long)Result;
#ifdef PRINT_TRACE_DETAIL
PRINT_ADDR_MNEMONICS;
//fprintf(stream,"ADD R%d, R%d, #%d\n", d, n, immed_3);
_S("ADD R"); _D(d); _S(", R"); _D(n); _S(", #"); _D(immed_3);
_S("\n");
PRINT_REGS;
#endif
return 0;
}
上面例子是对ARM的一种加法进行解释,因为只是一个子函数,不能完全体现代码质量,不过你可以假定一下如果是你,你会怎么写?如果你看不到差距,一种情况是你的程序水平确实相当的高,另一种是你对自己的程序能力认识过高,再有一种情况就是我的程序水平太差。
既然你自己都认为自己硬件方面的基础不够,说明你在以往的工作中主要是侧重于软件,嵌入式底层如果想做好,没有良好的硬件基础希望不太大,这里我说的硬件基础不是单指看数据手册,而是要明白硬件的工作原理,举个简单的例子,UART和USB同为串行传输方式,为什么USB可以实现高达480M的速率而UART做不到?不需要你达到自己可以设计出来的水平,但能理解其实现方法是必要的,不然你怎么可能快速解决所遇到的各种问题,你怎么可以让手上的硬件更好的发挥其效能。
看你有抱怨设计一个系统零部件成本计算的繁琐,是不是你之前并没有主导设计一个完整的产品,如果你觉得成本的计算过于麻烦,说明你还不知道系统成本预估的方法,主要器件的价格确实只能逐个算,电阻、电容、PCB和生产成本是只要知道板的大小就能预估出大致数目,至于前期开发、包装、市场费用都可套用经验参考值,用不着一条条的去细算。细算出来的结果也没有用,今天你算出来的数字是分毫不差,明天就有可能是大相径庭,因为市场是变动的,成本预估只要知道个大概以用给管理层做参考。
工作了十年,除非非常喜欢那种在自己技术空间里自由翱翔的感觉,不应该继续将自己当做技术螺丝钉,应该把自己从某一技术点面提升到系统开发,这会让你从另外一个角度看技术。可能你对于你目前的工作岗位是得心应手,不过从你的表述中给我的感觉是你的知识面并不太宽,好象局限在你工作的一个小圈子之中。
不少朋友已经给你指出了一条可以继续提升自己的路,写书,当然不一定必须走写书的途径,如果你真是自己认为已经积累了一定的技术经验,你可以对以往技术经验做一些回顾和反思,通过这一过程你会发现自己在技术上的诸多不足。你觉得你工作完全是重复劳动,技术上也没有提升的空间,这就是你将自己局限在自己的工作岗位之中表现。如果你多了解相关技术,你不会认为技术上没有了提升的空间,反而是会让你觉得恐惧,为什么会有更多不懂的东西出现在你面前。
我自认为在嵌入式方面C程序能力还算得上马马虎虎,前段时间有个项目从别的组转过来,项目需要对ARM代码进行解释执行,拿到源代码吓我一大跳,因为当时移交的人谈不上是经验丰富,可源代码体现的水平远超过我。(后来证实这是个误会,代码是另外的厉害角色参考网上代码修改而得)
//ADD(1) -- Page A7-5 | Rd = Rn + immed3 | Syntax -- ADD <Rd>, <Rn>, #<immed_3>
static _short inst_ADD_1(_ushort inst)
{
_ushort immed_3;
_ushort d,n;
_long64 Rn;
_long64 Result;
d = inst & 0x0007;
n = (inst >> 3) & 0x0007;
immed_3 = (inst >> 6) & 0x0007;
Rn = toe_r[n];
Result = Rn + immed_3;
set_NZ_flag( (_long)Result );
set_C_flag_add( Result, toe_r[n], immed_3 );
set_V_flag_add( (_long)Result, toe_r[n], immed_3);
toe_r[d] = (_long)Result;
#ifdef PRINT_TRACE_DETAIL
PRINT_ADDR_MNEMONICS;
//fprintf(stream,"ADD R%d, R%d, #%d\n", d, n, immed_3);
_S("ADD R"); _D(d); _S(", R"); _D(n); _S(", #"); _D(immed_3);
_S("\n");
PRINT_REGS;
#endif
return 0;
}
上面例子是对ARM的一种加法进行解释,因为只是一个子函数,不能完全体现代码质量,不过你可以假定一下如果是你,你会怎么写?如果你看不到差距,一种情况是你的程序水平确实相当的高,另一种是你对自己的程序能力认识过高,再有一种情况就是我的程序水平太差。

被折叠的 条评论
为什么被折叠?



