高级会员

- 积分
- 964
- 金钱
- 964
- 注册时间
- 2014-11-18
- 在线时间
- 160 小时
|
20金钱
本帖最后由 aiyeba 于 2016-8-19 09:58 编辑
[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
void Sys_Init(void);
void vLED1Task( void *pvParameters );
void vLED2Task( void *pvParameters );
void vLCDTask(void *pvParameters );
void PrvSetUpHardware(void);
int main(void)
{
//Ñóê±oˉêy3õê¼»ˉ
Sys_Init();
PrvSetUpHardware();
printf("I Come in\r\n");
xTaskCreate( vLED1Task, "LED1", 128, NULL, 2, NULL );
xTaskCreate( vLED2Task, "LED2", 128, NULL, 2, NULL );
xTaskCreate( vLCDTask, "LCD", 200, NULL, 3, NULL );
vTaskStartScheduler();
return 0;
}
void Sys_Init(void)
{
delay_init();
}
//ó2¼t3õê¼»ˉè«2¿·ÅÔúÕaàï
void PrvSetUpHardware(void)
{
LED_Init(); //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
LCD_Init();
uart_init(115200);
}
//μÆμÄèÎÎñ
void vLED1Task( void *pvParameters )
{
for( ;; )
{
printf("1\r\n");
LED0=0;
vTaskDelay(1000);
LED0=1;
vTaskDelay(1000);
}
}
void vLED2Task( void *pvParameters )
{
for( ;; )
{
printf("2\r\n");
LED1=0;
vTaskDelay(500);
LED1=1;
vTaskDelay(500);
}
}
void vLCDTask(void *pvParameters )
{
unsigned char buff[]="I Love You STM32";
for(;;)
{
printf("3\r\n");
LCD_ShowString(0,0,210,24,24,buff);
vTaskDelay(30);
}
}[/mw_shl_code]
上次做了一个FreeRTOS的移植实验,移植本身不难。几分钟就搞定了。简单的测试了一下流水灯。
在不使用定时器的时候下,实现了2盏灯的不同频率的闪烁。(其他办法也行,但是加入第三个任务的时候,严重的拖延时间)。
我直接说现象。 我设置三个任务 TaskLED0 TaskLED1 TaskLCD
最后下载进去 perfect
可是 问题来了。 断电后,重启的时候。什么都没有,也就是系统都起不来了。 那是不是复位问题呢?
按下复位键也不行。 然后我再次下载进去 能用。这一次我先不断电,而是按下复位键,发现系统又挂了。
期间,我考虑过栈大小问题,任务优先级问题等等。 我最后怀疑的是原子哥的LCD是不是存在系统级的设置?
这里我说的调试 是系统能跑,我放得打印信息都可以,但是按下复位键了 ,什么打印信息都没有了,我就不知道怎么找问题了。(我都是通过串口打印找问题的)
|
最佳答案
查看完整内容[请看2#楼]
uart_init(115200)放到LCD_Init()的前面看看,好像LCD_Init()里面用到了串口。
你的标题,我居然看成了新手请进
|