2.尝试新建ucos任务(LED闪烁)
来源:互联网 发布:江苏知源律师事务所。 编辑:程序博客网 时间:2024/05/06 20:27
app.c文件修改为如下
#include <includes.h>static void App_TaskStart(void *);static void App_TaskCreate(void);static void Task_Led1(void* p_arg);static void Task_Led2(void* p_arg);static OS_STK App_TaskStartStk[APP_TASK_START_STK_SIZE];static OS_STK Task_Led1Stk[Task_Led1_STK_SIZE];static OS_STK Task_Led2Stk[Task_Led2_STK_SIZE];#define LED_LED1_ON() GPIO_SetBits(GPIOB, GPIO_Pin_5 ); //LED1 ÁÁ#define LED_LED1_OFF() GPIO_ResetBits(GPIOB, GPIO_Pin_5 ); //LED1 Ãð#define LED_LED2_ON() GPIO_SetBits(GPIOD, GPIO_Pin_6 ); //LED2 ÁÁ#define LED_LED2_OFF() GPIO_ResetBits(GPIOD, GPIO_Pin_6 ); //LED2 ÃðINT32U milsec1,milsec2;int main(){CPU_IntDis();OSInit();BSP_Init();milsec1=100;milsec2=200;OSTaskCreate((void(*)(void *))App_TaskStart,(void *)0,(OS_STK *)&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],(INT8U)APP_TASK_START_PRIO);OSTimeSet(0);OSStart();return 0;}static void App_TaskStart(void * p_arg){(void)p_arg;OS_CPU_SysTickInit();App_TaskCreate();while(1){OSTimeDlyHMSM(0,0,1,0);}}static void App_TaskCreate(void){OSTaskCreateExt(Task_Led1,(void *)0,(OS_STK *)&Task_Led1Stk[Task_Led1_STK_SIZE-1],Task_Led1_PRIO,Task_Led1_PRIO,(OS_STK *)&Task_Led1Stk[0],Task_Led1_STK_SIZE,(void *)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);OSTaskCreateExt(Task_Led2,(void *)0,(OS_STK *)&Task_Led2Stk[Task_Led2_STK_SIZE-1],Task_Led2_PRIO,Task_Led2_PRIO,(OS_STK *)&Task_Led2Stk[0],Task_Led2_STK_SIZE,(void *)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);}static void Task_Led1(void* p_arg){ (void) p_arg; while (1) { LED_LED1_ON(); OSTimeDlyHMSM(0, 0, 0, milsec1); LED_LED1_OFF(); OSTimeDlyHMSM(0, 0, 0, milsec1); }}static void Task_Led2(void* p_arg){(void) p_arg; while(1){ LED_LED2_ON(); OSTimeDlyHMSM(0, 0, 0, milsec2); LED_LED2_OFF(); OSTimeDlyHMSM(0, 0, 0, milsec2); }}
BSP.c文件增加如下方法:
void RCC_Configuration(void){ SystemInit(); }void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3; //LED2, LED3 GPIO_Init(GPIOD, &GPIO_InitStructure);}void BSP_Init(void){ /* System Clocks Configuration --72M*/ RCC_Configuration(); GPIO_Configuration(); }
#define APP_TASK_START_PRIO 3#define Task_Led1_PRIO 7#define Task_Led2_PRIO 8#define APP_TASK_START_STK_SIZE 128#define Task_Led1_STK_SIZE 128#define Task_Led2_STK_SIZE 128
此时编译会发现,LED灯不闪烁,需要做如下修改:
1.startup_stm32f10x_hd.s文件中,处理PendSV_Handler名称与os_cpu_a.asm文件中OS_CPU_PendSVHandler名称不匹配,需要把PendSV_Handler全部替换为OS_CPU_PendSVHandler
2.复制Keil安装目录C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Driver\templates下的stm32f10x_it.c和stm32f10x_it.h文件到APP目录下,去掉其只读属性,并添加到工程中,然后添加头文件:
#include <includes.h>
再修改SysTick_Handler函数如下:
void SysTick_Handler(void){OS_CPU_SR cpu_sr;OS_ENTER_CRITICAL(); //保存全局中断标志,关总中断/* Tell uC/OS-II that we are starting an ISR*/OSIntNesting++; //OSSemPost(NMEA_MBOX); OS_EXIT_CRITICAL(); //恢复全局中断标志OSTimeTick(); /* Call uC/OS-II's OSTimeTick(),在os_core.c文件里定义,主要判断延时的任务是否计时到*/OSIntExit(); //在os_core.c文件里定义,如果有更高优先级的任务就绪了,则执行一次任务切换 }
本工程在奋斗V5开发板上调试通过
0 0
- 2.尝试新建ucos任务(LED闪烁)
- UCOS试验一 LED灯切换闪烁
- stm32 ucos LED灯延时闪烁+按键闪烁+串口输出
- 2.led灯闪烁
- ucos-ii示例1:新建任务
- LED闪烁
- LED闪烁
- led闪烁
- LED闪烁
- 【STM32F429开发日志】+hello led(闪烁led灯)
- LED走马灯闪烁
- LED闪烁电路
- 闪烁的 LED
- Tiny210-----LED依次闪烁
- 定时器 LED 闪烁功能
- 1.LED闪烁实验
- LED 流水灯闪烁
- FPGA 闪烁LED
- Dom方式解析XML详解
- HashMap和Hashtable区别
- 关于chkconfig
- Error: unrecognized flag -version
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题 .
- 2.尝试新建ucos任务(LED闪烁)
- webservice的原理及概念
- Locally linear embedding (LLE)算法简介
- SQL中on条件与where条件的区别
- 聊聊高并发(三)锁的一些基本概念
- 机房收费系统——技术总结
- 网络基本功(四):细说路由(上)
- CSS课程
- memcached源码分析(五):数据保存及内存管理