解释代码void beep_task(void *pdata) { while(1){ PBeep=0; delay_ms(1000); PBeep=1; delay_ms(1000); } }
时间: 2024-03-26 17:36:31 浏览: 75
这段代码通过控制 PBeep 引脚的高低电平来控制蜂鸣器的鸣叫状态。在任务中,通过 while(1) 语句实现循环执行,即不断重复以下操作:
1. 将 PBeep 引脚设置为低电平,让蜂鸣器响起来;
2. 延时 1000 毫秒;
3. 将 PBeep 引脚设置为高电平,让蜂鸣器停止响声;
4. 延时 1000 毫秒。
这样就能够实现间隔 1 秒钟的蜂鸣器鸣叫和停止鸣叫的效果。
相关问题
解释代码void start_task(void *pdata) { OS_CPU_SR cpu_sr=0; pdata = pdata; OS_ENTER_CRITICAL(); //½øÈëÁÙ½çÇø(ÎÞ·¨±»Öжϴò¶Ï) OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO); OSTaskCreate(beep_task,(void *)0,(OS_STK*)&BEEP_TASK_STK[BEEP_STK_SIZE-1],BEEP_TASK_PRIO); OSTaskCreate(lcd_task,(void *)0,(OS_STK*)&LCD_TASK_STK[LCD_STK_SIZE-1],LCD_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO); //¹ÒÆðÆðʼÈÎÎñ. OS_EXIT_CRITICAL(); //Í˳öÁÙ½çÇø(¿ÉÒÔ±»Öжϴò¶Ï) }
这段代码定义了一个名为 `start_task` 的函数,返回值为 `void`,接受一个 `void*` 类型的参数 `pdata`。在函数内部,首先将 `pdata` 赋值给自身,但没有使用。然后,使用 `OS_ENTER_CRITICAL()` 函数进入临界区,即禁止中断的代码区域。在临界区内,函数调用了 `OSTaskCreate()` 函数三次,分别创建了三个任务:`led_task`、`beep_task` 和 `lcd_task`,并给它们分配了不同的优先级。最后,调用 `OSTaskSuspend()` 函数将当前任务 `start_task` 挂起,等待其他任务的执行。最后使用 `OS_EXIT_CRITICAL()` 函数退出临界区。
#include "beep.h" /** * @brief 初始化蜂鸣器引脚 */ void Beep_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = BEEP_GPIO_PIN; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStruct); } /** * @brief 蜂鸣器报警 */ void Beep_Alert(void) { u8 i = 0; while (i < 10) { GPIO_SetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN); Delay_ms(500); GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN); Delay_ms(500); i++; } } /** * @brief 停止蜂鸣器报警 */ void Beep_Stop(void) { GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN); }程序中的函数怎么调用,()里要不要加viod
调用该函数时,需要在函数名后加上括号,括号中填写该函数需要的参数(如果有的话),如果不需要参数,则不需要在括号中填写任何内容。例如:
- 调用 Beep_Init 函数时,应该写成 Beep_Init();
- 调用 Beep_Alert 函数时,应该写成 Beep_Alert();
- 调用 Beep_Stop 函数时,应该写成 Beep_Stop();
在括号中不需要加上 void,因为 void 表示没有实参,而不是函数不需要实参。
阅读全文