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

2019-07-21 01:35发布

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

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

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

提前感谢各位的指导!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
Ane
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();
                }
        }
}



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

好晕,这样怎么实现几个无限循环相互打断呢

一周热门 更多>