初级会员
- 积分
- 60
- 金钱
- 60
- 注册时间
- 2018-8-7
- 在线时间
- 8 小时
|
10金钱
根据rtt官网上的教程一步步来,建立了一个 工程 模板,但是里面很多组件都不大会用,然后自己也写了一些相关驱动(PWM IIC SDIO )然后我就想能不能裁剪 rtt内核 变成 类于 UCOS 的样子 外围的东西就用我自己的代码来。然后系统配置里 ,留下了Usart1 做finsh 的输出,一个 小型动态内存管理,其他的都裁剪掉了 什么都不加,编译成功,烧写成功,正常运行,添加一个没有IO的线程,每500ms打印到串口1 。编译成功,烧写成功,正常运行。添加一个 每500ms 亮灭LED 的线程进去,编译成功,烧写成功,debug单步调试,卡死在R0=systeminit; systeminit都进不去。不知道什么原因,求大神指教!多谢多谢!
下面是代码:
[mw_shl_code=c,true]/*
* File : application.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
*
* Change Logs:
* Date Author Notes
* 2009-01-05 Bernard the first version
* 2014-04-27 Bernard make code cleanup.
*/
#include <board.h>
#include <rtthread.h>
#ifdef RT_USING_LWIP
#include <lwip/sys.h>
#include <lwip/api.h>
#include <netif/ethernetif.h>
#include "stm32f4xx_eth.h"
#endif
#ifdef RT_USING_FINSH
#include <shell.h>
#include <finsh.h>
#endif
#ifdef RT_USING_GDB
#include <gdb_stub.h>
#endif
//-------------------------//
#include "AllHeadFile.h"
//-------------------------//
//-----------------------------------------//
void rt_thread_LED_entry(void* arg)
{
Kim_GPIO_init_out(GPIOA,GPIO_Pin_6,1);//PA6 初始化 输出 默认为 高
while(1)
{
LED1 = ~LED1;
rt_thread_delay(70);
}
}
void rt_thread_KEY_entry(void* arg)
{
u8 keyvalue =0 ;
Key_init();
while(1)
{
keyvalue = Key_Scan(KEY_SCAN_ONCE);
switch(keyvalue)
{
case (KEY1) : rt_kprintf("key 1 pressed \n"); break;
case (KEY2) : rt_kprintf("key 2 pressed \n"); break;
case (KEY0) : rt_kprintf("keyUP pressed \n"); break;
default: break;
}
rt_thread_delay(2);
}
}
//-----------------------------------//
void rt_init_thread_entry(void* parameter)
{
/* initialization RT-Thread Components */
rt_components_init();
rt_kprintf("init thread entry\n");
/* GDB STUB */
#ifdef RT_USING_GDB
gdb_set_device("uart6");
gdb_start();
#endif
}
void task_test(void* arg)
{
while(1)
{
rt_kprintf("task runing\n");
rt_thread_delay(55);
}
}
int rt_application_init()
{
rt_thread_t tid;
rt_thread_t led;
rt_thread_t test;
tid = rt_thread_create("init",
rt_init_thread_entry, RT_NULL,
2048, RT_THREAD_PRIORITY_MAX/3, 20);
if (tid != RT_NULL)
{
rt_kprintf("startup rt init thread \n");
rt_thread_startup(tid);
}
led = rt_thread_create("led",rt_thread_LED_entry,RT_NULL,256,RT_THREAD_PRIORITY_MAX/3+2,10);
if (led != RT_NULL)
{
rt_kprintf("led thread up\n");
rt_thread_startup(led);
}
test = rt_thread_create("led",task_test,RT_NULL,256,RT_THREAD_PRIORITY_MAX/3+1,10);
if (test != RT_NULL)
{
rt_kprintf("led thread up\n");
rt_thread_startup(test);
}
return 0;
}[/mw_shl_code] |
-
最佳答案
查看完整内容[请看2#楼]
问题解决了 因为 在自己定义的 函数 Kim_GPIO_init_out 中 出现了printf 函数的调用,但是因为我线程输出打印的 串口就是 Usart1 于是就取消了 fout 这个函数的实现,进不去systeminit的原因:库函数引用错误导致,
破案;
DEBUG过程:既然创建普通进程可以那么创建进程就OK 那么就是我涉及到初始化硬件的地方有问题,那么我就把我初始化的句子先全部注释,不写函数,直接到application 里面初始化(GPIO_initTypeDef ) ...
|