[应用相关] 多任务操作的实现问题

[复制链接]
2612|20
 楼主| sdyaojingwen 发表于 2015-4-23 15:34 | 显示全部楼层 |阅读模式
本帖最后由 sdyaojingwen 于 2015-4-23 15:44 编辑

现在想做一个程序,为了提高效率,这个程序有两个任务 就是 两个while(1)大循环,通过按键中断来切换人任务,请问如何处理?void  main()
{
   task1:  
   while(1)
   {
   }
   task2:
   while(1)
   {
   }
}
搞IT的 发表于 2015-4-23 16:02 | 显示全部楼层
可以选用SWITCH函数
whydo 发表于 2015-4-23 16:34 | 显示全部楼层
while(1)里判断跳出啊
 楼主| sdyaojingwen 发表于 2015-4-23 17:29 | 显示全部楼层
本帖最后由 sdyaojingwen 于 2015-4-23 17:33 编辑
搞IT的 发表于 2015-4-23 16:02
可以选用SWITCH函数

我只是打个比方!用switch 的话  加入 任务1 还没有执行完成 按下中断的话,是不会跳到任务2去的!我需要立刻进入任务2
有点像操作系统的任务切换
 楼主| sdyaojingwen 发表于 2015-4-23 17:30 | 显示全部楼层
本帖最后由 sdyaojingwen 于 2015-4-23 17:33 编辑
whydo 发表于 2015-4-23 16:34
while(1)里判断跳出啊

打个比方  说 我在执行任务1的时候,按键中断, 这时候中断处理完成后立马跳到任务2  ,而不是继续执行完任务1之后在去任务2
有点像操作系统的任务切换
 楼主| sdyaojingwen 发表于 2015-4-23 17:32 | 显示全部楼层
搞IT的 发表于 2015-4-23 16:02
可以选用SWITCH函数

有点像操作系统的任务切换
littleming1028 发表于 2015-4-23 18:23 | 显示全部楼层
中断了加个标志,任务里加个判断不可以吗?
Leeone 发表于 2015-4-23 18:44 来自手机 | 显示全部楼层
中断里设标志位,while里查标志break切换任务
夕照 发表于 2015-4-23 19:57 | 显示全部楼层
中断跳出或者用UCOS-ii吧
charrijon 发表于 2015-4-23 20:09 | 显示全部楼层
相当于自己做个操作系统啊,要千万注意堆栈。处理好了堆栈就是一个操作系统了
彭--博 发表于 2015-4-23 20:14 | 显示全部楼层
switch case 状态切换
 楼主| sdyaojingwen 发表于 2015-4-23 22:35 | 显示全部楼层
littleming1028 发表于 2015-4-23 18:23
中断了加个标志,任务里加个判断不可以吗?

可以在中断里使用goto么?
 楼主| sdyaojingwen 发表于 2015-4-23 22:36 | 显示全部楼层
littleming1028 发表于 2015-4-23 18:23
中断了加个标志,任务里加个判断不可以吗?

这样会有个延迟!我想要中断之后立马切换任务
 楼主| sdyaojingwen 发表于 2015-4-23 22:41 | 显示全部楼层
charrijon 发表于 2015-4-23 20:09
相当于自己做个操作系统啊,要千万注意堆栈。处理好了堆栈就是一个操作系统了 ...

大神有没有个stm8堆栈操作的资料啊
mintspring 发表于 2015-4-23 23:37 | 显示全部楼层
void  main()
{
   task1:  
   while(1)
   {
   }
   task2:
   while(1)
   {
   }
}




  
有意思吗
littleming1028 发表于 2015-4-24 07:23 | 显示全部楼层
sdyaojingwen 发表于 2015-4-23 22:36
这样会有个延迟!我想要中断之后立马切换任务

任何系统都会延迟,你的立马是多少?1ns?1us?1ms?还是?
a837627852 发表于 2015-4-24 16:10 | 显示全部楼层
学习学习
tkyl01 发表于 2015-4-24 16:12 | 显示全部楼层
直接修改堆栈指针(SP)就可以了,先把两个任务的 地址保存起来,用按键来切换SP等于任务的地址,就可以切换任务了
 楼主| sdyaojingwen 发表于 2015-4-24 19:59 | 显示全部楼层
tkyl01 发表于 2015-4-24 16:12
直接修改堆栈指针(SP)就可以了,先把两个任务的 地址保存起来,用按键来切换SP等于任务的地址,就可以切换任 ...

请问有没有stm8内核的资料
aliu_us 发表于 2015-4-26 21:13 来自手机 | 显示全部楼层
sdyaojingwen 发表于 2015-4-23 17:29
我只是打个比方!用switch 的话  加入 任务1 还没有执行完成 按下中断的话,是不会跳到任务2去的!我需要 ...

这是可抢占的任务调度。
仼务少而简单的话就直接在中断里实现,要求全就上rtos.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部