完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
OS_EVENT *GO_MBOX;
OS_EVENT *COME_MBOX; #define START_TASK_PRIO 18 #define START_STK_SIZE 128 OS_STK START_TASK_STK[START_STK_SIZE]; void start_task(void *pdata); //èÎÎñoˉêy #define LED_TASK_PRIO 13 #define LED_STK_SIZE 64 OS_STK LED_TASK_STK[LED_STK_SIZE]; void led_task(void *pdata); #define NINE_TASK_PRIO 11 #define NINE_TASK_STK_SIZE 256 OS_STK NINE_TASK_STK[NINE_TASK_STK_SIZE]; void nine_task(void *pdata); #define UDP_SENT_PRIO 10 #define UDP_SENT_STK_SIZE 500 OS_STK UDP_SENT_TASK_STK[UDP_SENT_STK_SIZE]; void udp_send_task(void *arg); #define UDP_RECV_PRIO 9 #define UDP_RECV_STK_SIZE 400 OS_STK UDP_RECV_TASK_STK[UDP_RECV_STK_SIZE]; void udp_recv_task(void *arg); #define MOTOR_CONTR_TASK_PRIO 8 #define MOTOR_CONTR_TASK_STK_SIZE 128 OS_STK MOTOR_CONTR_TASK_STK[MOTOR_CONTR_TASK_STK_SIZE]; void motor_contr_task(void *pdata); /************************************************************** main **************************************************************/ int main(void) { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); usmart_dev.init(72); my_mem_init(SRAMIN); printf("ENC28J60+STM32rn"); printf("UDP NETCONN Testrn"); printf("ATOM@ALIENTEKrn"); printf("2016/11/30rn"); OSInit(); while(lwip_comm_init()) { printf("Lwip Init failed!rn"); delay_ms(500); } printf("Lwip Init Success!rn"); OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO); OSStart(); } void start_task(void *pdata) { OS_CPU_SR cpu_sr; pdata = pdata ; OSStatinit(); OS_ENTER_CRITICAL(); OSTaskCreate(nine_task, (void*)0, (OS_STK*)&NINE_TASK_STK[NINE_TASK_STK_SIZE - 1], NINE_TASK_PRIO); OSTaskCreate(led_task, (void*)0, (OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1], LED_TASK_PRIO); OSTaskCreate(motor_contr_task, (void*)0, (OS_STK*)&MOTOR_CONTR_TASK_STK[MOTOR_CONTR_TASK_STK_SIZE-1], MOTOR_CONTR_TASK_PRIO); OSTaskCreate(udp_send_task, (void*)0, (OS_STK*)&UDP_SENT_TASK_STK[UDP_SENT_STK_SIZE-1], UDP_SENT_PRIO); OSTaskCreate(udp_recv_task, (void*)0, (OS_STK*)&UDP_RECV_TASK_STK[UDP_RECV_STK_SIZE-1], UDP_RECV_PRIO); OSTaskSuspend(OS_PRIO_SELF); OS_EXIT_CRITICAL(); } //电机控制任务 void motor_contr_task(void *pdata) { INT8U OS_err; char *msg; uint8_t Mo_flag = 0; Motor_contr_Init(); TIM3_PWM_Init(35999,1); OSTimeDlyHMSM(0,0,0,100); for(;;) { msg = (char *)OSMboxPend(COME_MBOX,50,&OS_err); if(OS_err == OS_ERR_NONE) { if (*msg == 'M' && *(msg+1) == 'C') { Mo_flag = 1; if (Mo_flag && *(msg+2) == 'l' && *(msg+3) == 'f') { puls_left(35999,5000,0); } else if (Mo_flag &&(*msg+4) == 'l' && *(msg+5) == 'g') { puls_ligt(35999,5000,1); } Mo_flag = 0; } } else { OSTimeDlyHMSM(0,0,0,10); } OSTimeDlyHMSM(0,0,0,50); } } //电机转动固定方向固定脉冲 void Motor_contr_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3 |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOE,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD; GPIO_Init(GPIOC,&GPIO_InitStructure); } void puls_left(u16 f,u16 count,u8 direction) { unsigned char flag=1; u16 number,temp=count; GPIO_ResetBits(GPIOE,GPIO_Pin_2); GPIO_ResetBits(GPIOE,GPIO_Pin_1); TIM3_PWM_Init(f,1); TIM_SetCompare3(TIM3,f/2); if(GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_1) == direction) { LED1=0; } else { LED1=1; } do{ number=TIM3->CNT ; if(flag&&number>=f/2) { temp=temp-1; flag=0; } if(number>=1&&number flag=1; } } while(temp>0); GPIO_SetBits(GPIOE,GPIO_Pin_2); LED1=1; if(!temp) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE); } void puls_ligt(u16 f,u16 count,u8 direction) { unsigned char flag=1; u16 number,temp=count; GPIO_ResetBits(GPIOE,GPIO_Pin_2); GPIO_SetBits(GPIOE,GPIO_Pin_1); TIM3_PWM_Init(f,1); TIM_SetCompare3(TIM3,f/2); if(GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_1) == direction) { LED0=0; } else { LED0=1; } do{ number=TIM3->CNT ; if(flag&&number>=f/2) { temp=temp-1; flag=0; } if(number>=1&&number flag=1; } } while(temp>0); GPIO_SetBits(GPIOE,GPIO_Pin_2); LED0=1; if(!temp) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE); } |
|
相关推荐
2个回答
|
|
自己仿真跟踪,分析下逻辑吧。。。你这提问问题都没写完。。。
|
|
|
|
谢谢原子哥。问题已经解决,是我两个任务中邮箱等待时间的问题,又用mallco开辟了接发的数据内存的问题,第一次发帖,没找到能上传文本格式的方法,以后都来请教和分享
|
|
|
|
只有小组成员才能发言,加入小组>>
722 浏览 0 评论
1123 浏览 1 评论
2502 浏览 5 评论
2840 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2683 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
664浏览 9评论
679浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
794浏览 6评论
641浏览 5评论
682浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 23:48 , Processed in 1.055887 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号