[问题] 让两颗LED用不同的频率闪烁

楼主: zzss2003 (brotherD)   2017-08-04 11:33:24
开发平台(Platform):C language in embedded system
问题(Question):想让两颗LED用不同的频率闪烁
程式码(Code):
void task1(void)
{
J11: LED1 ON
J12: Delay 1s
J13: LED1 OFF
J14: Delay 1s
}
void task2(void)
{
J21: LED2 ON
J22: Delay 2s
J23: LED2 OFF
J24: Delay 2s
}
补充说明(Supplement):目前的想法是想用中断达到此功能,先执行J11,中断触发执行
J21,中断执行完毕再回去执行J12,中断又触发在执行J22....以此类推。看似很简单的功
能,但要写程式时却不知道如何下手。
问题1: 第一个中断触发后,要怎么样让中断副程式进入task2这个function?
问题2: 进入task2这个function后,如何让中断副程式"只"做一行后就结束?
问题3: 第二个中断触发后,如何让第二个中断从第一个中断结束的地方继续做?
问题4: 如3,第二个中断结束后,要如何返回J12,而不是重新从J11开始执行?
问题5: 这些功能是不是可以只靠"中断+if else"就达到?最多再多一个timer
问题6: 我该如何思考问题?虽然我现在有办法把问题列出来(并不完全),但最重要的是,
我要如何"思考"这些问题?
谢谢各位前辈的指点与指教,小弟感激不尽。
作者: Killercat (杀人猫™)   2017-08-04 11:38:00
我虽然不知道你是拿啥语言实作这个,不过组语的做法是存现在位置进reg, 跳过去,然后读现在位置+1跳回来可以参考C的setjmp()跟longjmp() 分别对应我刚说的功能抱歉 不是存位置近reg 是存进heap XD没heap就进reg 缺点就是少了一个reg 很不方便 (?不过setjmp本身不知道做得到做不到存reg
作者: MOONY135 (谈无欲)   2017-08-04 12:26:00
两个timer不就好了吗
作者: JFLung9536 (立月小蛇)   2017-08-04 12:47:00
是在mcu上写吗
作者: james732 (好人超)   2017-08-04 12:58:00
http://ideone.com/MqC0z5 大概是这种感觉如果不能加counter的话就要想一下
作者: descent (“雄辩是银,沉默是金”)   2017-08-04 13:05:00
while(1){task1();task2()} 不就有你要的效果了。
作者: james732 (好人超)   2017-08-04 13:38:00
为什么一定要做成两个task?
作者: MOONY135 (谈无欲)   2017-08-04 14:25:00
一个TIMER控一个灯阿
作者: kwpn (ITSST)   2017-08-04 21:13:00
用coroutine
作者: Lipraxde (Lipraxde)   2017-08-04 21:39:00
你看看有没有PWM周边阿,有的话就用PWM做啊~
作者: cs8425 (cs)   2017-08-07 20:54:00
自推一下很久之前的RGB LED函式库:https://goo.gl/9fUhMj

Links booklink

Contact Us: admin [ a t ] ucptt.com