-
其实我觉得楼主对目前的形势看的很清楚,个人很支持楼主的看法。
ARM低功耗Cotex系列各种芯片强大易用是51,AVR,PIC没法比的,现在价格上也极具竞争力,学习起来真的不比51之类的难,甚至更简单。。现在51什么的已经被打击的缓缓消亡了。举个例子可能不是很恰当但是道理上相似的,想当年单机片编程汇编语言被C语言渐渐取代的时候,还是有很多人高喊从汇编学起,强调汇编对硬件的接近性,执行效率的高效性,对硬件的高控性等等等等。。这里不是说汇编是无用的可以抛弃的,现在我们用C编写程序还偶尔用到汇编,我要说汇编是以另外一种生命形式呈现于世的。我想问现在大家学习芯片编程还有从汇编一步步学起的么?恐怕都是用C开始学习芯片编程,当学习到一定程度掌握了整个框架系统可能当需要深入底层的时候以已有的C基础在很短的时间内掌握汇编的吧。类比可能不是很恰当:51之类的好比汇编,ARM好比C,当然高端的ARM可能好比C++,C#...,你说编程从汇编开始学起有必要么?那么芯片从51开始学起有必要么?
不要一说ARM就喊OS,ARM9,ARM11什么的神秘高深的样子,说什么裸奔浪费什么的。用什么东西是看需要来着的,M0系列的ARM芯片就是拿来替代传统8位16位芯片的,对于一些应用使用M0之类的芯片跑OS反而是脱了裤子放屁的行为。科技发展是永不停息的,十几年之前是51的天下,这个是那时的趋势,现在是ARM的天下,这个是现在的趋势,顺势者昌,逆势者亡。
-
你可以看数组旁边Memory位置在哪里,然后查看Memory,这样也很方便。
-
必然不要这样做啊。。。中断要保持尽量的短和简洁,Timer中断设置flag,把ADC Read放到主函数里面吧。
-
很感兴趣,邮箱 creafyumi@gmail.com, 感谢楼主。
-
在LPCXpresso 上写代码测试了,没有warning,一切正常。结果也正确。 想不明白了,能把出warning的代码贴出来么。 等找到问题了版主分享下。
[ 本帖最后由 creafyumi 于 2012-6-29 09:54 编辑 ]
-
我猜zhaojun版主用的是LPCXpresso。
-
虽然逻辑左移与算术左移是相同的(和右移不同,逻辑右移与算术右移是不同的,算术右移会保留符号位),但是如果是有符号数,左移31位已经发生溢出了,会报warning吧。
-
定义的数据类型是什么?是unsigned 么。
-
谢谢
-
感谢
-
学习了。
-
拜读。
-
学习了。
-
学习一下
-
什么错误,说清楚一些啊,你是说编译错误还是运行错误啊,晕。
-
楼主真是锲而不舍啊,IAR你想debug的时候显示C语言的调试界面,你可能要把Optimization关掉。
-
无限供电...永动机...我的第一反应竟然联想到这个。。。
无线供电啊,期待详细后续。
-
你把core_cm0.c 和 core_cm0.h删掉~~你可以试下
其实是把例程自带的CMSI Support删掉。用IAR自带的CMSIS。
你可以看到core_cm0.c里面有定义如下之类的
/**
* @brief Return the Process Stack Pointer
*
* @param none
* @return uint32_t ProcessStackPointer
*
* Return the actual process stack pointer
*/
__ASM uint32_t __get_PSP(void)
{
mrs r0, psp
bx lr
}
和IAR自带的冲突,要用IAR自带的support。
我没有装IAR,所以没办法给你test,但是错误的原因应该就是这里了,你可以排查一下。
PS:为什么不用LPCXpresso,免费的,虽然有很多不足。
-
有一点注意的是system tick 是24位的counter, 就是最高到0xFFFFFF, 所以tick的时间间隔是有限制的. 比如不可能实现10秒一个tick(指interrupt的间隔).
其实简单的任务可以直接在tick handler里面做,比如简单地设置GPIO,复杂的在while loop里面做,也就是时间分片的方式了。
LED闪烁的例子再稍微进一步,比如10s闪一次,就需要增加额外的flag和计时counter了。
Reload value计算:
SysTick->LOAD = ((SystemCoreClock / (1/(time scale in second))) & 0xFFFFFF) - 1;
-
好的~