在深入程序这么久之后,早已习惯了系统软件底蕴是那么的薄弱,可面对系统的认知深度弱点,不的不说,在编译方面的欠缺是继续深入了解系统的一个非常大的障碍。从国内编译书籍方面就知道那是多么的肤浅(特别是缺少文学修养的自认为技术高手的),即使自认为是牛比的,他也该看看世界的另外一端早已是练就了乾坤大挪移。即使你自宫,
虽然我的文学修养不高,但是表达上,更注重实用
风格:只说问题,代码注重问题的说明,而不是是否它能被成功编译
现象:常规程序中的变量如果被中断这样销帐的怪物给利用,需要给这个变量加上最大装饰volatile。
例子: int t;
init()
{
t=10;
}
timer_1second_isr()
{
t--;
}
main()
{
init();
while(t)
{
//printf(" why printf happend here %d \n",t);
}
printf("after one second come here !\n");
}
如果运行程序,是看不到after one second come here 输出的,但是如果代码中的//去掉,你会发现after one second come here 会打印在你的终端上。达不到你要的效果的。
而while(t)用 t的目的是当t=0的时候可以跳出循环,但是这个程序中的t的值,是放到缓存中的,就想cpu中的1级缓存类似,所以当t=0的时候,是内存中的t的值为0,而缓存中的还是不变。
阅读(1926) | 评论(0) | 转发(0) |