近一年来博客小结

有朋友留言,问这个博客是不是停止更新了。确实,加入新公司这一年多来只更新了12篇文章,原创文章10篇。

所以做个小结,给自己一个交代。俗话说,勿忘初心,方能始终。想想我开博的初衷是什么呢?

09年开博客,有两个原因。第一个原因就是爱折腾,喜欢技术,而且高中还学过静态网页设计,就是那时候不知道怎么建网站。另外一个重要原因是出于个人知识管理的需求,那时候还没有这个概念。但其实个人知识管理的行动在大学的时候就有。那会收集了电脑使用的各种文档,各种问题解决方法。毕业后很多时候在工作中学到的东西希望记录下来,总结下来,最好的方式就是如今的各种云笔记。可是那时候网盘都还很少。所以一开始我是放在百度空间的。后来因为偶然建了网站,用了PJBlog,然后切换到WP。网盘虽然能将工作电脑和家里的电脑同步,但不方便分享。我不仅希望自己积累,还希望分享给他人^_^。所以博客是必然的选择。而且看到各路大牛的博客,也有无尽的动力。后来就接触到EverNote和为知笔记。两个工具都很不错,我更喜欢为知笔记。在旧东家那会,一直使用为知笔记,同时也会把整理好的文章发布到博客,为知笔记能直接发布文章到博客,非常喜欢。来到新东家这里,为知笔记不能用。这里都用Google的办公组件。从此我就切换到EverNote,现在一直用EverNote的另一个原因是拿他来记晨间笔记,这样偶尔在公司想看也可以。

哦,为什么到新东家博客就没有更新了呢?在EverNote中与工作相关的笔记大概三十篇,但是基本都不适合发布到博客,因为涉及到公司的代码或者具体实现细节。而放在Google Driver上的notes也有二三十篇。知识积累和知识分享的初心仍然未变,只是现在的表达形式有些不一样了。现在我也会记录各种notes,有些放在EverNote,有些放在Google Driver,有些放在项目目录里。我仍然坚持着积累、总结、分享。现在我给团队创建了一个托管在GoogleSite上的知识分享网站,同时还在推动团队定期举行知识分享的Seminar。

当然,这并不意味着这个博客会停止更新,以后我会继续在我的博客分享两方面的内容。一方面是个人成长感悟、读书笔记;另一方面是技术总结,通用的技术,或不涉及公司产品具体细节。我会继续坚持积累、总结、分享。

非常好用的PDF阅读器 pdf xchange viewer 注册码

使用这个工具已经好几年了,推荐给大家。下面是注册码,百度有很多地方可以下载。

PDF-XChange Viewer Pro注册码请在安装本软件的时候到最后会提示,请输入即可下一步。默认安装是英文,内置中文语言包,在属性设置中设置即可。

User Name    : Team EAT
Organization : EATiSO
Email address: teameat@no_email.com
Key code     : PXP40-8HFT3-QTWZ1-QK2DN-MEUOP-VXG20

Reference

 

 

HEX文件格式详解[转]

Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行拆分来分析其中的内容:

例如 “:1000080080318B1E0828092820280B1D0C280D2854”可以被看作“0x10 0x00 0x08 0x00 0x80 0x31 0x8B 0x1E 0x08 0x28 0x09 0x28 0x20 0x28 0x0B 0x1D 0x0C 0x28 0x0D 0x28 0x54”

第一个字节 0x10表示本行数据的长度;

第二、三字节 0x00 0x08表示本行数据的起始地址;

第四字节 0x00表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。 继续阅读 »

决策力并非与生俱来[转]

决策力并非与生俱来 – 评论 – FT中文网

有效管理的精髓全在于优秀的决策机制。但不幸的是,决策力被看做是一种类似于勇气的性格特质。有些人就是能够果断扣动扳机——例如出色的经理人;而另一些人则做不到这一点——这帮犹豫不决的家伙们对于被迫接受自己行为的后果感到胆战心惊。

然而,一些社会学家通过深入研究影响人们决策的心理和社会因素,正在颠覆上述看法。通过研究更好的决策机制,他们希望使决策不再像巫术那样神秘,而是像木匠活那样可被学习掌握。

斯坦福大学(Stanford)商学院教授奇普•希思(Chip Heath)和杜克大学(Duke University)社会企业发展研究中心研究员丹•希思(Dan Heath)俩兄弟合著了两本出色的通俗社科书籍《让创意更有粘性》(Made to Stick)以及《瞬变》(Switch)。他们的最新著作《决策:如何在生活和工作中更好抉择》(Decisions: How to Make Better Choices in Life and Work)深入探讨了决策领域的最新研究成果。 继续阅读 »

晨间日记的奇迹 — 书摘

发生的事件内容,和当下自己的感受,对日记来说,如同车子的双轮一般,缺一不可,所以我建议大家可以尽量将自己的情绪书写出来。
不是运气好的人抓住了机会,而是不懂得经常把梦想放在心上的人,让大好机会逃走了。
梦想绝对不会背叛我们,只有我们会舍弃梦想而已。
因为夜晚很安静,所以深夜不睡觉,爬起来念书而取得证照,即使真的取得了证照,也把身体的平衡机制破坏,就算不好容易拿到了证照,也无法换回已经被自己破坏的健康。最后,自己会开始怀疑自己,为什么要拿健康来换证照呢?
到了晚上就睡觉吧!然后,跟着太阳一起起床,让体内的生理时钟可以重新设定,也让交感神经和副交感神经可以即时地做交替工作吧!因为这是生存于陆地上的生物,最自然的体内循环。
为了自己的身体健康着想,请渐渐地把自己的身体由夜猫子的”夜晚型”,调回正常生活作息的”晨间型”吧!
再提一下,人类有一种”动力荷尔蒙”,在早上七点的时候会达到分泌的高峰,即是为了让人类从早上开始活动而设计的。

继续阅读 »

OSEK study notes – 优先级反转与死锁

1.优先级反转
指资源被锁时低优先级任务抢占高优先级任务。
举例:任务A、B、C,优先级从低到高依次为1、2、3,所有任务都是完全抢占式,任务A和C共享资源R。
1.任务A运行,并对资源R加锁;
2.任务C被激活抢占任务A,并尝试对资源R加锁,因此C进入WAITING状态,A从被抢占的地方恢复;
3.任务B被激活并抢占任务A,任务B成功执行;
4.任务A恢复执行并释放资源R,任务A执行完成;
5.任务C恢复并对资源R加锁并完成执行。
我们观察到任务B优先级低于任务C却实际上抢占了任务C,这就是优先级反转。在实时要求较高的系统中这种高优先级的任务被意外延迟是难以接受的。更严重的是由于优先级反转,任务C的延迟时间是无法确定的,因为任何比任务A优先级高的任务都可以抢占任务A。

2.死锁
对资源加锁造成两个任务的冲突,每个任务都锁住了另一个任务需要的资源,使得每个任务都不能完成。
举例:任务A、B,共享两个资源R1、R2,其他情况与优先级反转中相同。
1.任务A对R1加锁;
2.任务B抢占A,并对R2加锁,之后尝试对R1加锁,由于R1已经被锁,所以任务B进入WAITING状态;
3.任务A恢复执行,尝试对R2加锁,由于R2已经被锁,所以任务A进入WAITING状态;
4.其他任务进入执行状态,而任务A和B永远无法继续执行。
死锁很可能在正常测试中不能被发现,而在交付客户后由于问题难以复现而更难被排查到。

解决优先级反转和死锁的方法很多,在OSEK中利用OS的优先级天花板协议(priority ceiling protocol)是最有效的方法。

去藕电容 开路输出/三态输出

几年前看嵌入式系统入门的笔记

image

继续阅读 »

Look at this long expression of function declaration

Look at this long expression of function declaration

extern FUNC( Std_ReturnType, FEE_CODE ) Fee_Write(
VAR( uint16, AUTOMATIC ) BlockNumber,
P2VAR( uint8, AUTOMATIC, FEE_APPL_DATA ) DataBufferPtr);

There are four macro in this expression: FUNC, VAR, P2VAR, Std_ReturnType, these definition

/*
* @violates @ref Compiler_h_REF_4 In the definition of a function-like macro each instance of a
* parameter shall be enclosed in parentheses
*/
#define FUNC(rettype, memclass) rettype

/*
* @violates @ref Compiler_h_REF_4 In the definition of a function-like macro each instance of a
* parameter shall be enclosed in parentheses
*/
#define VAR(vartype, memclass) vartype

/*
* @violates @ref Compiler_h_REF_4 In the definition of a function-like macro each instance of a
* parameter shall be enclosed in parentheses
*/
#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *

/**
* @brief This type can be used as standard API return type which is shared between the RTE and the
* BSW modules.
* @implements DBASE12002
*/
typedef uint8 Std_ReturnType;

So the long declaration expression should look like this after precompile :

extern uint8 Fee_Write(uint16 BlockNumber, uint8* DataBufferPtr);

It’s simple, So don’t be scared by the long expression.

PS: AUTOSAR <Specification of Compiler Abstraction> defined how to implement the Complier.h file.

 

第 1 页,共 51 页12345...102030...最旧 »