多线程任务编程

在主函数中实现
同时实现以下任务
任务1:每隔2秒打印-Hello
任务2:每个5秒打印-Hi

主函数全局变量

//任务标志
int Task1_Sign=0;
int Task2_Sign=0;
//任务计时
u32 count1=0;
u32 count2=0;

 主函数中while

//变量Tick为定时器1秒计时中断
	while(1)
	{
		//Task1
		if(Task1_Sign==0)
		{
			if(Tick-count1>=2)//2秒计时
			{
				Task1_Sign=1;
			}
		}
		else if(Task1_Sign==1)
		{
			printf("Hello\n");//2秒后打印
			Task1_Sign=0;//复位-继续使用
			count1=Tick;//更新计数变量
		}

		//Task2
		if(Task2_Sign==0)
		{
			if(Tick-count2>=5)//5秒计时
			{
				Task2_Sign=1;
			}
		}
		else if(Task2_Sign==1)
		{
			printf("Hi\n");//5秒打印
			Task2_Sign=0;
			count2=Tick;
		}
	}

以下为定时器1秒中断函数内容:

//Timer2 1s 中断  Timer2 84MHz // APB1 42MHz x 2  
void Timer2_Init()
{
	RCC->APB1ENR |= 1<<0;	
	TIM2->PSC=8400-1;  	//预分频器	 
	//Timer2的参考频率   84Mhz / 8400 = 10000Hz
	TIM2->ARR=10000-1;  	//设定计数器自动重装值 
	//   1秒产生一次中断
	TIM2->DIER |= 1<<0;   //允许更新中断	
	TIM2->CR1 |= 1<<0;		//启动定时器
	MY_NVIC_InitG2(0,1,TIM2_IRQn);//使能中断向量 配置优先级
}
//Timer2的中断回调函数
void TIM2_IRQHandler(void)
{
	//了解是否进入了溢出中断
	int r = TIM2->SR & 0x0001;
	if(r!=0)  //sr 第0位 为1
	{
		TIM2->SR &= ~(1<<0);//清中断
		Tick++;
	}
}
//s延时的秒数
void My_Delay_S( u32 s )
{
	u32 tmp = Tick;
	while(1)
	{
		if( Tick - tmp >= s )
		{
			return;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值