完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
试玩了下uCOS-II ,但是不晓得是什么原因,每次都只进行一次任务调度就跑死了,希望指点一下~~~~~~~~~~
#include "includes.h" //设置任务堆栈大小 #define LED_STK_SIZE 64 #define KEY_STK_SIZE 64 #define START_STK_SIZE 128 //设置任务优先级 #define LED_TASK_Prio 6 #define KEY_TASK_Prio 5 #define START_TASK_Prio 14 //任务堆栈 OS_STK TASK_KEY_STK[KEY_STK_SIZE]; OS_STK TASK_LED_STK[LED_STK_SIZE]; OS_STK TASK_START_STK[START_STK_SIZE]; OS_EVENT *Sem;//定义信号量指针 //任务申明 void TaskStart(void *pdata); void TaskLed(void *pdata); void TaskKEY(void *pdata); //系统时钟配置函数 void Systick_Configuration(void); int main(void) { OSInit(); OSTaskCreate( TaskStart, //task pointer (void *)0, //parameter (OS_STK *)&TASK_START_STK[START_STK_SIZE-1], //task stack top pointer START_TASK_Prio ); //task priority OSStart(); return 0; } //开始任务 void TaskStart(void * pdata) { pdata = pdata; STM32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600); //串口初始化为9600 LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); LED0=1; LED1=1; SysTick_Configuration(); OS_ENTER_CRITICAL(); //关中断 OSStatInit(); OSTaskCreate(TaskKEY, (void * )0, (OS_STK *)&TASK_KEY_STK[KEY_STK_SIZE-1], KEY_TASK_Prio); OSTaskSuspend(OS_PRIO_SELF); //挂起任务本身 //OSTaskDel(OS_PRIO_SELF); //删除任务本身 OS_EXIT_CRITICAL(); //开中断 } //控制DS0的亮灭. void TaskLed(void *pdata) { // INT8U err; pdata = pdata; // while(1) //{ OSSchedLock(); //禁止任务调度 //OSSemPend(Sem,0,&err); //等待信号量 LED0=0; // OSTimeDly(100); OSTaskDel(OS_PRIO_SELF); //删除任务本身 // OSTimeDlyResume(KEY_TASK_Prio);//取消任务延时 OSSchedUnlock(); //开锁 //} } //按键任务. void TaskKEY(void *pdata) { INT8U key; pdata = pdata; while(1) { OSSchedLock(); //禁止任务调度 key=KEY_Scan(); LED0=1; if(key==1) { key=0; OSTaskCreate(TaskLed, (void * )0, (OS_STK *)&TASK_LED_STK[LED_STK_SIZE-1], LED_TASK_Prio); // Sem=OSSemCreate(0);//创建信号量 // OSSemPost(Sem);//发送信号量 // OSTimeDly(100); } LED1=!LED1; OSTimeDly(100); // OSTimeDlyHMSM(0,0,0,100); OSSchedUnlock(); //开锁 } } //系统时钟中断服务函数 void SysTick_Handler(void) { OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR */ OSIntNesting++; OS_EXIT_CRITICAL(); OSTimeTick(); /* Call uC/OS-II's OSTimeTick() */ OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */ } //系统时钟配置,设计1ms产生一次中断 void SysTick_Configuration(void) { SysTick->CTRL&=~(1<<2);//SYSTICK使用外部时钟源 SysTick->CTRL|=1<<1; //开启SYSTICK中断 SysTick->LOAD=9000; //产生1ms中断 //bit2清空,选择外部时钟 HCLK/8 MY_NVIC_Init(3,3,SystemHandler_SysTick,2);//组2,最低优先级 SysTick->CTRL|=1<<0; //开启SYSTICK } |
|
相关推荐
4个回答
|
|
时钟配置应该放到OS初始化之前吧.
|
|
|
|
呵呵,貌似也没啥反应,看来uCOS-II的路还肯蛮漫长的啊
|
|
|
|
呵呵,直接用我们的模板吧.
|
|
|
|
呵呵,原子哥,有改良版的模板不,分享下下啊
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1926浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
711浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
560浏览 3评论
584浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 02:19 , Processed in 0.920860 second(s), Total 81, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号