|
附件的embOS用IAR打开,里面有4个任务,一个按键任务扫描3个按键,另有3个LED任务,每个LED以不同的频率闪烁。
- #include "main.h"
- #include "RTOS.h"
- OS_STACKPTR int Stack_KEY[128]; /* 按键任务堆栈 */
- OS_TASK TCB_KEY; /* 按键任务控制块 */
- #define Priority_KEY 100 /* 按键任务优先级 */
- OS_STACKPTR int Stack_LED_1[128]; /* LED1任务堆栈 */
- OS_TASK TCB_LED_1; /* LED1任务控制块 */
- #define Priority_LED_1 95 /* LED1任务优先级 */
- OS_STACKPTR int Stack_LED_2[128]; /* LED2任务堆栈 */
- OS_TASK TCB_LED_2; /* LED2任务控制块 */
- #define Priority_LED_2 90 /* LED1任务优先级 */
- OS_STACKPTR int Stack_LED_3[128]; /* LED3任务堆栈 */
- OS_TASK TCB_LED_3; /* LED3任务控制块 */
- #define Priority_LED_3 80 /* LED1任务优先级 */
- static void Task_KEY(void)
- {
- while (1)
- {
- // #if DEBUG == 1
- // printf("[%s][%s][%u]\r\n", __FILE__, __func__, __LINE__);
- // #endif // DEBUG == 1
- key_scan(KEY_L);
- key_scan(KEY_M);
- key_scan(KEY_R);
- switch (KEY_STATUS[KEY_L]) //左键
- {
- case KeyStatus_Short:
- {
- #if DEBUG == 1
- printf("[%s][%s][%d]左键短按\r\n", __FILE__, __func__, __LINE__);
- #endif // DEBUG == 1
- // led_turn(LED_1);
- break;
- }
- case KeyStatus_Long:
- {
- #if DEBUG == 1
- printf("[%s][%s][%d]左键长按\r\n", __FILE__, __func__, __LINE__);
- #endif // DEBUG == 1
- // led_turn(LED_1);
- break;
- }
- default:
- {
- break;
- }
- }
- KEY_STATUS[KEY_L] = KeyStatus_None;
- switch (KEY_STATUS[KEY_M]) //中键
- {
- case KeyStatus_Short:
- {
- #if DEBUG == 1
- printf("[%s][%s][%d]中键短按\r\n", __FILE__, __func__, __LINE__);
- #endif // DEBUG == 1
- // led_turn(LED_2);
- break;
- }
- case KeyStatus_Long:
- {
- #if DEBUG == 1
- printf("[%s][%s][%d]中键长按\r\n", __FILE__, __func__, __LINE__);
- #endif // DEBUG == 1
- // led_turn(LED_2);
- break;
- }
- default:
- {
- break;
- }
- }
- KEY_STATUS[KEY_M] = KeyStatus_None;
- switch (KEY_STATUS[KEY_R]) //右键
- {
- case KeyStatus_Short:
- {
- #if DEBUG == 1
- printf("[%s][%s][%d]右键短按\r\n", __FILE__, __func__, __LINE__);
- #endif // DEBUG == 1
- // led_turn(LED_3);
- break;
- }
- case KeyStatus_Long:
- {
- #if DEBUG == 1
- printf("[%s][%s][%d]右键长按\r\n", __FILE__, __func__, __LINE__);
- #endif // DEBUG == 1
- // led_turn(LED_3);
- break;
- }
- default:
- {
- break;
- }
- }
- KEY_STATUS[KEY_R] = KeyStatus_None;
- OS_Delay(10);
- }
- }
- static void Task_LED_1(void)
- {
- while (1)
- {
- // #if DEBUG == 1
- // printf("[%s][%s][%u]\r\n", __FILE__, __func__, __LINE__);
- // #endif // DEBUG == 1
- led_turn(LED_1);
- OS_Delay(100);
- }
- }
- static void Task_LED_2(void)
- {
- while (1)
- {
- // #if DEBUG == 1
- // printf("[%s][%s][%u]\r\n", __FILE__, __func__, __LINE__);
- // #endif // DEBUG == 1
- led_turn(LED_2);
- OS_Delay(200);
- }
- }
- static void Task_LED_3(void)
- {
- while (1)
- {
- // #if DEBUG == 1
- // printf("[%s][%s][%u]\r\n", __FILE__, __func__, __LINE__);
- // #endif // DEBUG == 1
- led_turn(LED_3);
- OS_Delay(300);
- }
- }
- #define UartBaudRate 460800
- /*********************************************************************
- *
- * main
- *
- *********************************************************************/
- int main(void)
- {
- OS_IncDI(); /* 关闭所有中断 */
- OS_InitKern(); /* 初始化OS */
- disableInterrupts(); /* 关闭总中断 */
- clk_init(CLK_SOURCE_HSE); /* 时钟初始化 */
- tim3_init( TIM3_PRESCALER_1, OS_TIMER_RELOAD); /* 初始化定时器3,定时1ms */
- uart1_init(UartBaudRate); /* UART1初始化 */
- enableInterrupts(); /* 打开总中断 */
- key_init(KEY_L);
- key_init(KEY_M);
- key_init(KEY_R);
- led_init(LED_1); /* 初始化 LED1 */
- led_init(LED_2); /* 初始化 LED2 */
- led_init(LED_3); /* 初始化 LED3 */
- led_on(LED_1); /* 点亮 LED1 */
- led_on(LED_2); /* 点亮 LED2 */
- led_on(LED_3); /* 点亮 LED3 */
- #if DEBUG == 1
- printf("\r\n\r\n\r\n");
- printf("[%s][%s][%u]STM8S207RB 主频:%luHz\r\n", __FILE__, __func__, __LINE__, CLK_GetClockFreq());
- printf("[%s][%s][%u]STM8S207RB Uart1波特率:%lubps\r\n", __FILE__, __func__, __LINE__, UartBaudRate);
- printf("[%s][%s][%u]STM8S207RB 编译日期:%s\r\n", __FILE__, __func__, __LINE__, __DATE__);
- printf("[%s][%s][%u]STM8S207RB 编译时间:%s\r\n", __FILE__, __func__, __LINE__, __TIME__);
- printf("\r\n\r\n\r\n");
- #endif // DEBUG == 1
- /* You need to create at least one task before calling OS_Start() */
- OS_CREATETASK(&TCB_KEY,
- "Task_KEY",
- Task_KEY,
- Priority_KEY,
- Stack_KEY);
- OS_CREATETASK(&TCB_LED_1,
- "Task_LED_1",
- Task_LED_1,
- Priority_LED_1,
- Stack_LED_1);
- OS_CREATETASK(&TCB_LED_2,
- "Task_LED_2",
- Task_LED_2,
- Priority_LED_2,
- Stack_LED_2);
- OS_CREATETASK(&TCB_LED_3,
- "Task_LED_3",
- Task_LED_3,
- Priority_LED_3,
- Stack_LED_3);
- OS_Start(); /* Start multitasking */
- return 0;
- }
- #ifdef USE_FULL_ASSERT
- /**
- * [url=home.php?mod=space&uid=650075]@brief[/url] Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval : None
- */
- void assert_failed(u8 *file, u32 line)
- {
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* Infinite loop */
- while (1)
- {
- }
- }
- #endif
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|