初级会员
- 积分
- 162
- 金钱
- 162
- 注册时间
- 2015-11-16
- 在线时间
- 31 小时
|
楼主 |
发表于 2016-5-11 10:27:52
|
显示全部楼层
有时候是能运行6个。在原程序基础上只改了主程序,最后创建的任务不运行,,搞几天都搞不定有劳版主帮忙看看是怎么回事,多谢了!#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lwip_comm.h"
#include "LAN8720.h"
#include "usmart.h"
#include "timer.h"
#include "lcd.h"
#include "sram.h"
#include "malloc.h"
#include "lwip_comm.h"
#include "includes.h"
#include "lwipopts.h"
//ALIENTEK 探索者STM32F407开发板
//LWIP LWIP+UCOS操作系统移植实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
//在LCD上显示地址信息任务
//任务优先级
#define DISPLAY_TASK_PRIO 8
//任务堆栈大小
#define DISPLAY_STK_SIZE 128
//任务堆栈
OS_STK DISPLAY_TASK_STK[DISPLAY_STK_SIZE];
//任务函数
void display_task(void *pdata);
//在LCD上显示地址信息任务1
//任务优先级
#define DISPLAY1_TASK_PRIO 9
//任务堆栈大小
#define DISPLAY1_STK_SIZE 128
//任务堆栈
OS_STK DISPLAY1_TASK_STK[DISPLAY1_STK_SIZE];
//任务函数
void display1_task(void *pdata);
//在LCD上显示地址信息任务2
//任务优先级
#define DISPLAY2_TASK_PRIO 10
//任务堆栈大小
#define DISPLAY2_STK_SIZE 128
//任务堆栈
OS_STK DISPLAY2_TASK_STK[DISPLAY2_STK_SIZE];
//任务函数
void display2_task(void *pdata);
//在LCD上显示地址信息任务3
//任务优先级
#define DISPLAY3_TASK_PRIO 11
//任务堆栈大小
#define DISPLAY3_STK_SIZE 128
//任务堆栈
OS_STK DISPLAY3_TASK_STK[DISPLAY3_STK_SIZE];
//任务函数
void display3_task(void *pdata);
//在LCD上显示地址信息任务4
//任务优先级
#define DISPLAY4_TASK_PRIO 12
//任务堆栈大小
#define DISPLAY4_STK_SIZE 128
//任务堆栈
OS_STK DISPLAY4_TASK_STK[DISPLAY4_STK_SIZE];
//任务函数
void display4_task(void *pdata);
//在LCD上显示地址信息任务5
//任务优先级
#define DISPLAY5_TASK_PRIO 13
//任务堆栈大小
#define DISPLAY5_STK_SIZE 128
//任务堆栈
OS_STK DISPLAY5_TASK_STK[DISPLAY5_STK_SIZE];
//任务函数
void display5_task(void *pdata);
//LED任务
//任务优先级
#define LED_TASK_PRIO 14
//任务堆栈大小
#define LED_STK_SIZE 64
//任务堆栈
OS_STK LED_TASK_STK[LED_STK_SIZE];
//任务函数
void led_task(void *pdata);
//START任务
//任务优先级
#define START_TASK_PRIO 15
//任务堆栈大小
#define START_STK_SIZE 128
//任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);
//在LCD上显示地址信息
//mode:1 显示DHCP获取到的地址
// 其他 显示静态地址
void show_address(u8 mode)
{
u8 buf[30];
if(mode==2)
{
sprintf((char*)buf,"DHCP IP :%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]); //打印动态IP地址
LCD_ShowString(30,130,210,16,16,buf);
sprintf((char*)buf,"DHCP GW :%d.%d.%d.%d",lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]); //打印网关地址
LCD_ShowString(30,150,210,16,16,buf);
sprintf((char*)buf,"NET MASK:%d.%d.%d.%d",lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]); //打印子网掩码地址
LCD_ShowString(30,170,210,16,16,buf);
}
else
{
sprintf((char*)buf,"Static IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]); //打印动态IP地址
LCD_ShowString(30,130,210,16,16,buf);
sprintf((char*)buf,"Static GW:%d.%d.%d.%d",lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]); //打印网关地址
LCD_ShowString(30,150,210,16,16,buf);
sprintf((char*)buf,"NET MASK :%d.%d.%d.%d",lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]); //打印子网掩码地址
LCD_ShowString(30,170,210,16,16,buf);
}
}
int main(void)
{
delay_init(168); //延时初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组配置
uart_init(115200); //串口波特率设置
usmart_dev.init(84); //初始化USMART
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
LCD_Init(); //LCD初始化
FSMC_SRAM_Init(); //SRAM初始化
mymem_init(SRAMIN); //初始化内部内存池
mymem_init(SRAMEX); //初始化外部内存池
mymem_init(SRAMCCM); //初始化CCM内存池
POINT_COLOR = RED; //红色字体
LCD_ShowString(30,30,200,20,16,"Explorer STM32F4");
LCD_ShowString(30,50,200,20,16,"LWIP+UCOS Test");
LCD_ShowString(30,70,200,20,16,"ATOM@ALIENTEK");
LCD_ShowString(30,90,200,20,16,"2014/9/1");
OSInit(); //UCOS初始化
while(lwip_comm_init()) //lwip初始化
{
LCD_ShowString(30,110,200,20,16,"Lwip Init failed!"); //lwip初始化失败
delay_ms(500);
LCD_Fill(30,110,230,150,WHITE);
delay_ms(500);
}
LCD_ShowString(30,110,200,20,16,"Lwip Init Success!"); //lwip初始化成功
OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);
OSStart(); //开启UCOS
}
//start任务
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr;
pdata = pdata ;
OSStatInit(); //初始化统计任务
OS_ENTER_CRITICAL(); //关中断
#if LWIP_DHCP
lwip_comm_dhcp_creat(); //创建DHCP任务
#endif
OSTaskCreate(display_task,(void*)0,(OS_STK*)&DISPLAY_TASK_STK[DISPLAY_STK_SIZE-1],DISPLAY_TASK_PRIO); //显示任务
OSTaskCreate(display1_task,(void*)0,(OS_STK*)&DISPLAY1_TASK_STK[DISPLAY1_STK_SIZE-1],DISPLAY1_TASK_PRIO); //显示任务1
OSTaskCreate(display2_task,(void*)0,(OS_STK*)&DISPLAY2_TASK_STK[DISPLAY2_STK_SIZE-1],DISPLAY2_TASK_PRIO); //显示任务2
OSTaskCreate(display3_task,(void*)0,(OS_STK*)&DISPLAY3_TASK_STK[DISPLAY3_STK_SIZE-1],DISPLAY3_TASK_PRIO); //显示任务3
OSTaskCreate(display4_task,(void*)0,(OS_STK*)&DISPLAY4_TASK_STK[DISPLAY4_STK_SIZE-1],DISPLAY4_TASK_PRIO); //显示任务4
OSTaskCreate(led_task,(void*)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO);//创建LED任务
OSTaskCreate(display5_task,(void*)0,(OS_STK*)&DISPLAY5_TASK_STK[DISPLAY5_STK_SIZE-1],DISPLAY5_TASK_PRIO); //显示任务5
OSTaskSuspend(OS_PRIO_SELF); //挂起start_task任务
OS_EXIT_CRITICAL(); //开中断
}
//显示地址等信息
void display_task(void *pdata)
{
while(1)
{
#if LWIP_DHCP //当开启DHCP的时候
if(lwipdev.dhcpstatus != 0) //开启DHCP
{
show_address(lwipdev.dhcpstatus ); //显示地址信息
OSTaskSuspend(OS_PRIO_SELF); //显示完地址信息后挂起自身任务
}
#else
show_address(0); //显示静态地址
OSTaskSuspend(OS_PRIO_SELF); //显示完地址信息后挂起自身任务
#endif //LWIP_DHCP
OSTimeDlyHMSM(0,0,0,500);
}
}
//led任务
void led_task(void *pdata)
{
while(1)
{
LED0 = !LED0;
OSTimeDlyHMSM(0,0,0,500); //延时500ms
}
}
//显示信息1
void display1_task(void *pdata)
{
while(1)
{
LCD_ShowString(30,190,200,20,16,"1");
OSTimeDlyHMSM(0,0,0,500);
}
}
//显示信息2
void display2_task(void *pdata)
{
while(1)
{
LCD_ShowString(30,210,200,20,16,"2");
OSTimeDlyHMSM(0,0,0,500);
}
}
//显示信息3
void display3_task(void *pdata)
{
while(1)
{
LCD_ShowString(30,230,200,20,16,"3");
OSTimeDlyHMSM(0,0,0,500);
}
}
//显示信息4
void display4_task(void *pdata)
{
while(1)
{
LCD_ShowString(30,250,200,20,16,"4");
OSTimeDlyHMSM(0,0,0,500);
}
}
//显示信息5
void display5_task(void *pdata)
{
while(1)
{
LCD_ShowString(30,270,200,20,16,"5");
OSTimeDlyHMSM(0,0,0,500);
}
}
|
|