求问如何使几个无限循环程序可以互相打断?

2019-07-21 01:35发布

本帖最后由 Ane 于 2019-4-19 18:50 编辑

新人第一次发帖,学STM32没多久,原子的教程里很多实验还没看。

现在想编一个程序能够实现:有3种模式,每个都是一个无限循环程序,想让这3种模式可以互相打断。
求问有没有可能做到以及怎样可以做到?
(几个模式就当是通过按键来选择吧)
中断和UCOS都是有优先级的,不能做到互相打断吧。

提前感谢各位的指导!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
Ane
1楼-- · 2019-07-22 02:06
nashui_sx 发表于 2019-4-19 19:26
假如能容忍执行完这当前循环再切换,这样最简单
volatile u8 zhuangtai=0;
void 中断函数(void)

您的程序给了我很大启发,但是有些地方不明白:1、“容忍执行完这当前循环”是什么意思?循环是无限循环,永远也执行不完吧。2、另外不太明白程序中 中断函数里的zhuangtai=x, 这是把x赋给zhaugntai吗?

我按2中理解将按键中断实验的一个按键中断服务程序修改成如下://外部中断4服务程序
void EXTI4_IRQHandler(void)
{
        u8 mode;
        delay_ms(10);        //消抖
        if(KEY0==0)         
        {                                 
                mode=1;
                EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位
        }                           
}



其他按键的中断服务程序类似,主函数如下:
int main(void)
{
        u8 mode;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);    //初始化延时函数
        uart_init(115200);         //串口初始化
        LED_Init();                                  //初始化LED端口  
        EXTIX_Init();       //初始化外部中断输入
        LED0=0;                                            //先点亮红灯
        LED1=0;
       
        while(1)
        {
//          printf("OK ");        //打印OK提示程序运行
//                delay_ms(1000);          //每隔1s打印一次
               
                while(mode==1)
                {
                        MOVEFORWARD();
                }
                while(mode==2)
                {
                        TURNLEFT();
                }
                while(mode==3)
                {
                        TURNRIGHT();
                }
                while(mode==4)
                {
                        STOP();
                }
        }
}



然后按键并没有反应。。。

好晕,这样怎么实现几个无限循环相互打断呢
nashui_sx
2楼-- · 2019-07-22 06:26
 精彩回答 2  元偷偷看……
jinx
3楼-- · 2019-07-22 09:19
直接在while循环里边嵌套switch语句就可以了。如果满足就每次都循环执行case里的语句,不满足我就执行其他模式。
candylife9
4楼-- · 2019-07-22 12:04
Ane 发表于 2019-4-19 18:46
不太明白呀
我的3个任务都是无限循环,比如先让任务1运行了,然后要调出任务2,于是任务2执行了 ...

优先级设一样不就行了。。。还有。只有中断才能打断用户进程,ucos的那个是任务自动放弃CPU,叫做任务切换。
Ane
5楼-- · 2019-07-22 12:47
 精彩回答 2  元偷偷看……
Ane
6楼-- · 2019-07-22 14:39
用条件判断如if(……)+break可以跳出while循环(一种模式),再经过switch选择到其它模式。

(做的不是小车,要让电机正转反转循环,所以while不可避免)

一周热门 更多>