`
Q:网友技术牛人小渣子:关于技术人员创业这个问题宋老师怎么看呢?我在一个公司做工程师也好多年了,一直给别人打工,最近有创业的念头。
A:kinst(宋老师):我已经自己做了几年,发表几点看法。要想考虑创业,需要至少3个积累。
1、是资金积累,跳槽穷1年,改行穷三年,这话一点都不假,创业也至少按照3年准备,即使是创业赚钱,但是由于是初期,所以必须边赚钱边投入,做好三年没钱花的准备。
2、技术积累。我们作为技术人员,靠的是吃技术饭,技术水平如果没积累好,那出来靠什么吃饭呢?尤其是创业初期,必须技术很全面过硬,因为初期阶段,技术越全面,机会越多,技术低的话,机会就少。
3、眼光积累。出来除非你有合适的项目,有正常的赚钱渠道了,否则你必须得考虑好了你出来做什么,你能做什么,3年后做什么,10年内做到什么规模,大概起码有个认识。
这几点考虑好了,就可以放开大胆的干,可能刚出来有很多不适应,很多困难,但是都是可以慢慢解决掉的,没有困难,没有风险,就不会有大的成功。
Q:网友kevinvind:现在谷歌有googleglass 售价1500美元,NIKE+ fuelbandSE售价149美元,小米手环售价69元,这个功能不同,售价相差也太大了。对于市场来说,像小米这样的智能手环用什么MCU呢? A:kinst(宋老师):一个产品的成本,不仅仅在于他的器件上,而是有很多其他运营成本。苹果手机占世界的10%的份额,却抢走了手机市场上的70%的利润,所以苹果是大赢家,人家赢在哪里,理念,时尚,软件等等。
Q:网友一眼万年Mike:ARM7内核的CPU是否还有发展前景呢?用的是ADS编译器,相当不好用,怎么破?
A:kinst(宋老师):ARM7的内核已经没有前景了,可以放弃了
A:zzq宁静致远(朱兆琪):ARM7的时代已经远去
Q:网友那年我十七:C语言的最大特点不在于量大,还是追求MCU产品的精细划分和极高性能,或者说您有其他看法呢?
A:xymbmcu(刘老师):其实C语言的提高是一个长期的过程,基本的语法、结构好掌握,但是如何提高,首先,肯定得多写。当然不是无为的重复。其次是借鉴一些优秀的代码,那么什么样的代码值得借鉴,例如ST的库、FatFs文件系统、uCOS-III这样的代码,绝对堪称经典。 Q:二霸:因为工作的需要,要在单片机上实现开根号的操作。据我所知目前工程师开平方的方法大部分是用牛顿迭代法,有没有更好更快捷的方式呢? A:zzq宁静致远(朱兆琪): 1.牛顿迭代算法
- /* 精度控制 */
- #define precision 0.0000001
- float InvSqrt1(float x)
- {
- float fDa =1;
- float fPre =x;
- if(x == 0){
- return 0;
- }else if(x< 0){
- printf("Error
- ");
- return-1.0;
- }
- /* 求平方根过程 */
- while(fabs(fPre- fDa) > precision){ /*精度控制*/
- fPre = fDa;
- fDa = (fDa+x / fDa)/(2);
- }
- /* 返回求平方根之后的数据 */
- returnfDa;
- }
复制代码
牛顿迭代算法求平方根的过程也是一个递归过程。 2.卡马克快速平方根算法 卡马克来源的说法:在3D图形编程中,经常要求平方根或平方根的倒数,例如:求向量的长度或将向量归一化。C数学函数库中的sqrt具有理想的精度,但对于3D游戏程式来说速度太慢。我们希望能够在保证足够的精度的同时,进一步提高速度。Carmack在QUAKE3(雷神之锤III )中使用的卡马克快速平方根算法,它第一次在公众场合出现的时候,几乎震住了所有的人。据说该算法其实并不是Carmack发明的,它真正的作者是Nvidia的Gary Tarolli。
- float InvSqrt2(float x)
- {
- float xhalf =0.5f*x;
- /* get bitsfor floating VALUE */
- inti = *(int*)&x;
- /* givesinitial guess y0 */
- i= 0x5f375a86 - (i >> 1);
- /* convertbits BACK to float */
- x= *(float*)&i;
- /* Newtonstep, repeating increases accuracy */
- x= x*(1.5f - xhalf*x*x);
-
- return1 / x;
- }
复制代码
据说这个算法多年来没人破解,特别是这行代码:i = 0x5f375a86 -(i>> 1)。 对比下牛顿迭代算法、卡马克快速平方根算法和库函数平方根:
- int main(int argc, char *argv[])
- {
- float fa= 101;
- structtimeval tv;
- while(scanf("%f",&fa)){
- /*①,第一次获取时间 */
- gettimeofday(&tv,NULL);
- printf("time %u:%u
- ", tv.tv_sec, tv.tv_usec);
-
- printf("牛顿迭代 %f
- ", InvSqrt1(fa));
-
- /*②,第二次获取时间 */
- gettimeofday(&tv,NULL);
- printf("time %u:%u
- ", tv.tv_sec, tv.tv_usec);
- printf("卡马克快速平方根 %f
- ", InvSqrt2(fa));
-
- /*③,第三次获取时间 */
- gettimeofday(&tv,NULL);
- printf("time %u:%u
- ", tv.tv_sec, tv.tv_usec);
- printf("标准库 %f
- ", sqrt(fa));
-
- /*④,第四次获取时间*/
- gettimeofday(&tv,NULL);
- printf("time %u:%u
- ", tv.tv_sec, tv.tv_usec);
- }
- return0;
- }
复制代码
②-①得到的时间为牛顿迭代算法使用的时间,③-②得到的时间为卡马克快速平方根使用的时间,④-③得到的时间为标准库使用的时间。我们采用两组数据进行测试: 第一组:输入36。 zzq@ubuntu:~/Cprimer/sqrt$ ./sqrt 36 time 1398343935:571032……① 牛顿迭代 6.000000……42 time 1398343935:571074……② 卡马克快速平方根 6.006858……5 time 1398343935:571079……③ 标准库 6.000000……5 time 1398343935:571084……④ 从这组数据,时间:卡马克快速平方根 = 标准库 < 牛顿迭代;精确度:牛顿迭代 = 标准库 > 卡马克快速平方根。 第二组:输入123456789.987654321 zzq@ubuntu:~/Cprimer/sqrt$ ./sqrt 123456789.987654321 time 1398344737:769933……① 牛顿迭代 11111.111328……1719 time 1398344737:771652……② 卡马克快速平方根 11122.324219……854 time 1398344737:772506……③ 标准库 11111.111196……629 time 1398344737:773135……④ 笔者加: 微软科学计算器结果:11111.111104999999998874999999381 从这组数据,时间:标准库 < 卡马克快速平方根 < 牛顿迭代;精确度:标准库 > 牛顿迭代 > 卡马克快速平方根;
Q:网友jackhui:现在产品都要求可靠性,那么对于单片机系统,我们如何测试单片机系统的可靠性
A:kinst(宋老师):其实产品的可靠性,并非主要在单片机身上,主要在产品本身硬件稳定性和软件的严谨性上。
对于单片机本身的可靠性,没法一下测试出来,还是得在应用中积累
Q:网友哼小曲:工控类MCU的最大特点不在于量大,还是追求MCU产品的精细划分和极高性能,或者说您有其他看法呢?
A:xymbmcu(刘老师):是的,行业不同,对MCU的要求不同,在工控这类行业,肯定是对性能要求高,一台设备,上百万,不可能为了节省几毛钱去用性能不好的MCU。相反,例如在消费类行业,肯定是价格由于性能了,当初我做过一个项目,价格要求就是不能超过2元,所以,8位的MCU就是最好的选择了。
Q:网友小麦地:C语言和汇编语言在开发单片机时各有哪些优缺点?
A:kinst(宋老师):大多情况下,个人写的汇编代码效率高于C语言的代码,占的程序空间低于C语言的代码,每一句代码都是有固定的执行时间,这就是汇编的优势。至于C,那就是无法比较的优势,逻辑性强,可维护性强等等。除非是非常小的程序,对于单片机资源要求高的地方,用到汇编,否则C是毫无疑问的主流
Q:网友A670521546:两位能分享下,你们如何在coding时减少bug呢? A:zzq宁静致远(朱兆琪): 1.bug是肯定会出现的。 2.写程序前,其实框架已经在脑海,只需要填充代码,就如高楼已经搭好框架,只需填充砖。 1、逻辑复杂就要先画流程图,从源头减少bug出现的可能性。
2、程序编写规范,不要按照自己的风格做事,最好能够走正规军的路线,和主流工程师一样的风格。
3、调试代码的时候,多考虑可能发生的可能性。
4、测试的时候,严格一些。
Q:网友番茄番茄:你们好,问女生是否适合单片机编程这个行业,工作一段时间后发现很多行业大牛几乎都是男性,对未来的职业规划有些迷茫,希望各位老师可以帮忙解答一下!
A:xymbmcu(刘老师):至于这个,就看你能否吃下这个苦,我曾看过一个报道,美国船舶公司,有一项技术,只有一个65的老太婆能搞定,所以与性别无关,但是出于女孩爱美的天性,说什么电脑有辐射、对身体不好,等等,就慢慢转行做管理、销售等了。 kinst(宋老师):实话实说,女生从事技术,两个方向,一个是逻辑思维比较好,技术确实也可以做很好,女生一点也不弱于男生。如果逻辑思维一般,这个必须得承认,大多数女生的逻辑思维能力弱于男生,在技术领域,从事外围的比如当老师,或者研究所做测试等,做研发,有女生很牛的,但是数量很少,自己先评估自己的情况。
往期回顾 ——————————————————————————————————————————————————————— `
|