/* ********************************************************************************************************* * 函 数 名: main * 功能说明: c程序入口 * 形 参:无 * 返 回 值: 错误代码(无需处理) ********************************************************************************************************* */ #include "main.h" #define INIT_STK_SIZE 64 #define LED0_STK_SIZE 64 #define LED1_STK_SIZE 64 CPU_STK init_task_stk[INIT_STK_SIZE]; CPU_STK LED0_TASK_STK[LED0_STK_SIZE]; CPU_STK LED1_TASK_STK[LED1_STK_SIZE]; #define INIT_TASK_PRIO 10 #define LED0_RX_PRIO 7 #define LED1_RX_PRIO 6 void Delay(uint32_t count) { for (; count != 0; count--) ; } int main(void) { #if 0 /* 打开GOIOI 端口时钟 */ *(unsigned int *)(0x40023800 + 0x30) |= (1 << 8); /* PI10 为输出 */ *(unsigned int *)(0x40022000 + 0x00) &= ~((0x03) << (2 * 10)); *(unsigned int *)(0x40022000 + 0x00) |= (1 << (2 * 10)); /* PI10 输出高电平 */ *(unsigned int *)(0x40022000 + 0x14) |= (1 << 10); /* PI10 输出低电平 */ *(unsigned int *)(0x40022000 + 0x14) &= ~(1 << 10); #elif 0 bsp_init(); while (1) { GPIO_ResetBits(GPIOI, GPIO_Pin_10); Delay(0xFFFFFFFF); // GPIO_SetBits(GPIOI, GPIO_Pin_10); // Delay(0xFFFFFFFF); GPIO_ResetBits(GPIOF, GPIO_Pin_7); Delay(0xFFFFFF); // GPIO_SetBits(GPIOF, GPIO_Pin_7); // Delay(0xFFFFFF); GPIO_ResetBits(GPIOF, GPIO_Pin_8); Delay(0xFFFFFF); // GPIO_SetBits(GPIOF, GPIO_Pin_8); // Delay(0xFFFFFF); GPIO_ResetBits(GPIOC, GPIO_Pin_2); Delay(0xFFFFFF); // GPIO_SetBits(GPIOC, GPIO_Pin_2); // Delay(0xFFFFFF); }; #elif 1 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); OSInit(); bsp_init(); /* init task */ /* 创建一个启动任务(也就是主任务)。启动任务会创建所有的应用程序任务 */ OSTaskCreateExt(init_task, /* 启动任务函数指针 */ (void *)0, /* 传递给任务的参数 */ (OS_STK *)&init_task_stk[INIT_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */ INIT_TASK_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */ INIT_TASK_PRIO, /* 任务ID,一般和任务优先级相同 */ (OS_STK *)&init_task_stk[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */ INIT_STK_SIZE, /* 任务栈大小 */ (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能 (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */ OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */ OSStart(); #endif } /*! \brief init task \param[in] pvParameters not used \param[out] none \retval none */ void init_task(void *pvParameters) { SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC); /* configure the systick handler priority */ NVIC_SetPriority(SysTick_IRQn, 0x00U); OSTaskCreateExt(led0_task, /* 启动任务函数指针 */ (void *)0, /* 传递给任务的参数 */ (OS_STK *)&LED0_TASK_STK[LED0_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */ LED0_RX_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */ LED0_RX_PRIO, /* 任务ID,一般和任务优先级相同 */ (OS_STK *)&LED0_TASK_STK[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */ LED0_STK_SIZE, /* 任务栈大小 */ (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能 (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */ OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */ OSTaskCreateExt(led1_task, /* 启动任务函数指针 */ (void *)0, /* 传递给任务的参数 */ (OS_STK *)&LED1_TASK_STK[LED1_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */ LED1_RX_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */ LED1_RX_PRIO, /* 任务ID,一般和任务优先级相同 */ (OS_STK *)&LED1_TASK_STK[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */ LED1_STK_SIZE, /* 任务栈大小 */ (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能 (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */ OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */ } void led0_task(void *pdata) { pdata = pdata; while (1) { GPIO_SetBits(GPIOI, GPIO_Pin_10); OSTimeDly(100); GPIO_ResetBits(GPIOI, GPIO_Pin_10); OSTimeDly(400); } } void led1_task(void *pdata) { pdata = pdata; while (1) { GPIO_SetBits(GPIOC, GPIO_Pin_2); OSTimeDly(500); GPIO_ResetBits(GPIOC, GPIO_Pin_2); OSTimeDly(200); } }