单片机源程序如下:- #include "includes.h" /* 底层硬件驱动 */
- #include "usart.h"
- /*
- **********************************************************************************************************
- 函数声明
- **********************************************************************************************************
- */
- static void AppTaskCreate (void);
- __task void AppTaskLED(void);
- __task void AppTaskStart(void);
- /*
- 安 富 莱 电 子
- **********************************************************************************************************
- 变量
- **********************************************************************************************************
- os_sem_init
- os_sem_send
- isr_sem_send
- os_sem_wait
- */
- static uint64_t AppTaskLEDStk[256/8]; /* 任务栈 */
- static uint64_t AppTaskStartStk[512/8]; /* 任务栈 */
- /* 任务句柄 */
- OS_TID HandleTaskLED = NULL;
- /* 任务句柄 */
- OS_TID HandleTaskLED1 = NULL;
- static uint64_t AppTaskLED1Stk[256/8]; /* 任务栈 */
- /* 任务句柄 */
- OS_TID HandleTaskLED2 = NULL;
- static uint64_t AppTaskLED2Stk[256/8];
- OS_TID HandleTaskLED3 = NULL;
- static uint64_t AppTaskLED3Stk[256/8];
- OS_TID HandleTaskLED4 = NULL;
- static uint64_t AppTaskLED4Stk[256/8];
- OS_TID HandleTaskLED5 = NULL;
- static uint64_t AppTaskLED5Stk[256/8];
- OS_TID HandleTaskLED6 = NULL;
- static uint64_t AppTaskLED6Stk[256/8];
- OS_TID HandleTaskLED7 = NULL;
- static uint64_t AppTaskLED7Stk[256/8];
- OS_SEM semaphore;
- /*
- *********************************************************************************************************
- * 函 数 名: main
- * 功能说明: 标准 c 程序入口。
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- int main (void)
- {
- /* 初始化外设 */
- delay_init(); //延时函数初始化
- LED_Init(); //初始化与LED连接的硬件接口
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
- uart_init(9600); //串口初始化为9600
- /* 创建启动任务 */
- os_sys_init_user (AppTaskStart, /* 任务函数 */
- 1, /* 任务优先级 */
- &AppTaskStartStk, /* 任务栈 */
- sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */
- while(1);
- }
- /*
- *********************************************************************************************************
- * 函 数 名: AppTaskLED
- * 功能说明: LED 闪烁
- * 形 参: 无
- * 返 回 值: 无
- * 优 先 级: 1 (数值越小优先级越低,这个跟 uCOS 相反)
- *********************************************************************************************************
- */
- __task void AppTaskLED(void)
- {
- /* 创建信号量计数值是0, 用于任务同步 */
- os_sem_init (&semaphore, 0);
- while(1)
- {
- os_dly_wait(50);
- os_sem_send(&semaphore);
- LED0=~LED0;
- os_dly_wait(10);
-
- }
- }
- /*
- *********************************************************************************************************
- * 函 数 名: AppTaskLED
- * 功能说明: LED 闪烁
- * 形 参: 无
- * 返 回 值: 无
- * 优 先 级: 1 (数值越小优先级越低,这个跟 uCOS 相反)
- *********************************************************************************************************
- */
- __task void AppTaskLED1(void)//LED1
- {
- OS_RESULT xResult;
- while(1)
- {
- xResult= os_sem_wait(&semaphore, 20);
- switch(xResult)
- {
- /*无需等待接受到信号量同步信号 */
- case OS_R_OK:
- //printf("无需等待接受到信号量同步信号\r\n");
- LED1=~LED1;
- os_dly_wait(10);
- break;
- /*信号量不可用,usMaxBlockTime等待时间内收到信号量同步信号 */
- case OS_R_SEM:
- //printf("信号量不可用,usMaxBlockTime等待时间内收到信号量同步信号\r\n");
- LED2=~LED2;
- os_dly_wait(20);
- break;
- /*超时 */
- case OS_R_TMO:
- //bsp_LedToggle(1);
- //bsp_LedToggle(4);
- LED3=~LED3;
- os_dly_wait(30);
- break;
- /*其他值不处理 */
- default:
- //os_dly_wait(100);
- break;
- }
- //os_dly_wait(100);
- }
- }
- /*
- *********************************************************************************************************
- * 函 数 名: AppTaskLED
- * 功能说明: LED 闪烁
- * 形 参: 无
- * 返 回 值: 无
- * 优 先 级: 1 (数值越小优先级越低,这个跟 uCOS 相反)
- *********************************************************************************************************
- */
- __task void AppTaskLED2(void)
- {
- u8 t;
- u8 len;
- u16 times=0;
- while(1)
- {
- //read_stm32_id();
-
- printf("\r\n您发送的消息为:\r\n");
- /*
- if(USART_RX_STA&0x8000)
- {
- len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
- printf("\r\n您发送的消息为:\r\n");
- for(t=0;t<len;t++)
- {
- USART1->DR=USART_RX_BUF[t];
- while((USART1->SR&0X40)==0);//等待发送结束
- }
- printf("\r\n\r\n");//插入换行
- USART_RX_STA=0;
- }else
- {
- times++;
- if(times%5000==0)
- {
- printf("\r\nALIENTEK MiniSTM32开发板 串口实验\r\n");
- printf("正点原子@ALIENTEK\r\n\r\n\r\n");
- }
- if(times%200==0)printf("请输入数据,以回车键结束\r\n");
- if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
- delay_ms(10);
- }*/
- os_dly_wait(500);
- }
- }
- __task void AppTaskLED3(void)
- {
- while(1)
- {
- //LED3=~LED3;
- os_dly_wait(30);
- }
- }
- __task void AppTaskLED4(void)
- {
- while(1)
- {
- LED4=~LED4;
- os_dly_wait(40);
- }
- }
- __task void AppTaskLED5(void)
- {
- while(1)
- {
- LED5=~LED5;
- os_dly_wait(50);
- }
- }
- __task void AppTaskLED6(void)
- {
- while(1)
- {
- LED6=~LED6;
- os_dly_wait(60);
- }
- }
- __task void AppTaskLED7(void)
- {
- while(1)
- {
- LED7=~LED7;
- os_dly_wait(70);
- }
- }
- /*
- *********************************************************************************************************
- * 函 数 名: AppTaskStart
- * 功能说明: 启动任务,也就是最高优先级任务。
- * 形 参: 无
- * 返 回 值: 无
- * 优 先 级: 2
- *********************************************************************************************************
- 安 富 莱
- */
- __task void AppTaskStart(void)
- {
- AppTaskCreate();
- while(1)
- {
- LED8=~LED8;
- os_dly_wait(800);
- }
- }
- /*
- *********************************************************************************************************
- * 函 数 名: AppTaskCreate
- * 功能说明: 创建应用任务
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void AppTaskCreate (void)
- {
- HandleTaskLED = os_tsk_create_user(AppTaskLED, /* 任务函数 */
- 8, /* 任务优先级 *///数字越小,优先级越低和UCOS相反
- &AppTaskLEDStk, /* 任务栈 */
- sizeof(AppTaskLEDStk)); /* 任务栈大小,单位字节数 */
- HandleTaskLED1 = os_tsk_create_user(AppTaskLED1, /* 任务函数 */
- 2, /* 任务优先级 *///数字越小,优先级越低和UCOS相反
- &AppTaskLED1Stk, /* 任务栈 */
- sizeof(AppTaskLED1Stk)); /* 任务栈大小,单位字节数 */
-
- HandleTaskLED2 = os_tsk_create_user(AppTaskLED2,
- 3,
- &AppTaskLED2Stk,
- sizeof(AppTaskLED2Stk));
-
-
- HandleTaskLED3 = os_tsk_create_user(AppTaskLED3,
- 4,
- &AppTaskLED3Stk,
- sizeof(AppTaskLED3Stk));
- HandleTaskLED4 = os_tsk_create_user(AppTaskLED4,
- 5,
- &AppTaskLED4Stk,
- sizeof(AppTaskLED4Stk));
- HandleTaskLED5 = os_tsk_create_user(AppTaskLED5,
- 6,
- &AppTaskLED5Stk,
- sizeof(AppTaskLED5Stk));
- HandleTaskLED6 = os_tsk_create_user(AppTaskLED6,
- 7,
- &AppTaskLED6Stk,
- sizeof(AppTaskLED6Stk));
- HandleTaskLED7 = os_tsk_create_user(AppTaskLED7,
- 9,
- &AppTaskLED7Stk,
- sizeof(AppTaskLED7Stk));
- }
复制代码
仿真和程序:
STM32F103_rtx_LED2 (1).7z
(1.04 MB, 下载次数: 19)
|