|
发表于 2015-4-18 21:28:53
|
显示全部楼层
高人,方便的话,能帮我看一下代码吗?
- static U64 Task_start_stk[400/8]; /* 400-byte stack */
- static U64 led1_task_stk[400/8]; /* 400-byte stack */
- static U64 led2_task_stk[400/8]; /* 400-byte stack */
- static U64 touch_task_stk[1200/8]; /* 400-byte stack */
- static U64 adcshow_task_stk[1200/8]; /* 400-byte stack */
- __task void Task_start (void); //rtx任务声明
- __task void led1_task (void); //rtx任务声明
- __task void led2_task (void); //rtx任务声明
- __task void touch_task (void); //rtx任务声明
- __task void adcshow_task (void); //rtx任务声明
- OS_TID id1, id2, id3, id4;
- void task_create (void); //普通的任务的声明
- void ucos_load_main_ui(void) ; //普通的任务的声明
- int main(void)
- {
- delay_init();
- NVIC_Configuration();
- uart_init(9600);
- LED_Init();
- LCD_Init();
- Adc_Init(); //ADC初始化
- BEEP_Init(); //蜂鸣器初始化
- KEY_Init(); //按键初始化
- TPAD_Init(72); //初始化TPAD
- FSMC_SRAM_Init(); //初始化外部SRAM
- mem_init(SRAMIN); //初始化内部内存池
- mem_init(SRAMEX); //初始化外部内存池
- tp_dev.init();
- ucos_load_main_ui();
-
- os_sys_init_user(Task_start, 10, &Task_start_stk, sizeof(Task_start_stk)); //初始化RTX
- while(1) ;
- }
- __task void Task_start(void) //优先级10
- {
- task_create();
- os_tsk_delete_self ();
- }
- //开始任务
- void task_create(void)
- {
- id1=os_tsk_create_user (led1_task, 2, &led1_task_stk, sizeof(led1_task_stk));
- id2=os_tsk_create_user (led2_task, 3, &led2_task_stk, sizeof(led2_task_stk));
- id3=os_tsk_create_user (adcshow_task,7, &adcshow_task_stk,sizeof(adcshow_task_stk));
- id4=os_tsk_create_user (touch_task,8, &touch_task_stk,sizeof(touch_task_stk));
- }
- void ucos_load_main_ui(void)
- {
- LCD_Clear(WHITE); //清屏
- POINT_COLOR=RED; //设置字体为红色
- LCD_ShowString(10,10,200,16,16,"Pan Meilong");
- LCD_ShowString(10,30,200,16,16,"UCOSII TEST3");
- LCD_ShowString(10,50,200,16,16,"2011059040010");
- LCD_ShowString(10,75,240,16,16,"TPAD:TMR2 SW KEY_UP:ADJUST");
- LCD_ShowString(10,95,240,16,16,"KEY0:DS0 KEY1:Q SW KEY2:CLR");
- LCD_DrawLine(0,70,lcddev.width,70);
- LCD_DrawLine(120,0,120,70);
- LCD_DrawLine(0,120,lcddev.width,120);
- LCD_DrawLine(0,220,lcddev.width,220);
- LCD_DrawLine(120,120,120,lcddev.height);
- LCD_ShowString(5+120,125,240,16,16,"FLAGS");//信号量集
- LCD_ShowString(5,225,240,16,16,"TOUCH"); //触摸屏
- LCD_ShowString(5+120,225,240,16,16,"TMR2"); //队列消息
- POINT_COLOR=BLUE;//设置字体为蓝色
- LCD_ShowString(5,125,240,16,16,"ADC_CH0_VAL:");
- LCD_ShowString(5,175,240,16,16,"ADC_CH0_VOL:");
- LCD_ShowString(5,200,240,16,16,"0.000V");
- LCD_ShowString(150,10,200,16,16,"CPU: %");
- delay_ms(300);
- }
-
- //触摸屏任务 //优先级8
- __task void touch_task(void)
- {
- while(1)
- {
- tp_dev.scan(0);
- if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下
- {
- if(tp_dev.x<120&&tp_dev.y<lcddev.height&&tp_dev.y>220) //判断是否在Touch Area之内
- {
- u16 color_draw=RED;
- TP_Draw_Big_Point(tp_dev.x,tp_dev.y,color_draw); //画图
- os_dly_wait(2); //我要是减少这个数值会不会连贯
- }
- }else os_dly_wait(2); //没有按键按下的时候
- }
- }
- __task void adcshow_task(void) //优先级7
- {
- u16 adcx;
- float temp;
- POINT_COLOR=BLUE;
- LCD_ShowString(5,125,240,16,16,"ADC_CH0_VAL:");
- LCD_ShowString(5,175,240,16,16,"ADC_CH0_VOL:");
- LCD_ShowString(5,200,240,16,16,"0. V");
- while(1)
- {
- adcx=Get_Adc_Average(ADC_Channel_3,10);
- LCD_ShowxNum(5,150,adcx,4,16,0);//显示ADC的值
- temp=(float)adcx*(3.3/4096);
- adcx=temp;
- LCD_ShowxNum(5,200,adcx,1,16,0);//显示电压值
- temp-=adcx;
- temp*=1000;
- LCD_ShowxNum(21,200,temp,3,16,0X80);
- LED0=!LED0;
- os_dly_wait(25);
- }
- }
- __task void led2_task(void) //优先级2
- {
- while(1)
- {
- LED1=0;
- delay_ms(300);
- LED1=1;
- os_dly_wait(30);
- }
- }
- __task void led1_task (void) //优先级1
- {
- while(1)
- {
- LED0=1;
- delay_ms(300);
- LED0=0;
- os_dly_wait(30); //最后死在这里J-LINK结果是进入os_idle_demon出不来了
- }
- }
复制代码
|
|