Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
萌新求助:在 application_init 调用硬件初始化_出现死机
发布于 2018-10-26 10:20:58 浏览:1602
订阅该版
裁剪了 3.1的内核留了一个 Usart1 做finsh shell 的输入输出硬件,small heap 的动态内存管理,其他组件都关了,由此想 模仿类似 UCOS一样 初始化 硬件,不管在 board_init 还是在 application_init 里初始化GPIO 都初始化失败,单步调试 连第一步 R0=systeminit;启动文件都进不去,但是如果只定义一个每500ms usart1 打印一段字符的线程 就没有问题 (定义初始化IO 翻转 LED灯 就出现上述状况) 平台:STM32407VE+MDK5+CMSIS DAP 上图: 卡死在175行, 代码先关代码段: ```/* * 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](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
#include
#ifdef RT_USING_LWIP #include
#include
#include
#include "stm32f4xx_eth.h" #endif #ifdef RT_USING_FINSH #include
#include
#endif #ifdef RT_USING_GDB #include
#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
"); break; case (KEY2) : rt_kprintf("key 2 pressed
"); break; case (KEY0) : rt_kprintf("keyUP pressed
"); 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
"); /* GDB STUB */ #ifdef RT_USING_GDB gdb_set_device("uart6"); gdb_start(); #endif } void task_test(void* arg) { while(1) { rt_kprintf("task runing
"); 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
"); 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
"); 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
"); rt_thread_startup(test); } return 0; }``` 我最近在自己做一个小玩意,想搞成自己的毕设,由于一开始没有接触到RTT ,就模仿 正点原子 的风格 写了一些裸机驱动代码,(初始化,数据处理等),接触到RTT 感觉到他的强大,像现在就先适应RTT ,以后找工作了可以快速对接,但是又不是很想用RTT 的提供的组件, 所以想裁剪RTT 做到类似于UCOS 一样。我也具体的不是很清楚为么会卡死在连启动函数的systeminit都进不去,感觉上像是RTT 自己有定义启动文件?但是我没看见啊,就看见了一个 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); (board.c line 45),但是这个是 systeminit结束之后才会执行的,而我对比 自己的裸机程序,代码里好像没有看到(依稀记得之前有见过(IAP 里头一定有)),但是实在没有搞懂,后面的代码怎么能影响前面的 systeminit 都进不去,恳请大神大牛指教!!!!
查看更多
5
个回答
默认排序
按发布时间排序
kimalittlestar
2018-10-26
这家伙很懒,什么也没写!
BUG已解决 ,函数中有调用 printf 但是 并未实现 printf 中的 fout 的实现,所以出错 解决办法: 在 #include “stdio.h” 处修改 如果支持 RTTreated #include “rtthread.h” #define printf(ftm,...) rt_kprintf((ftm),##__VA_ARGS__) 解决问题。 总结:平常能进去DEBUG ,改了一句语句,立马 启动文件都不跑了大概率 里面你调用了 一些错误的 库函数 典型:malloc() ; printf();
来一颗糖
2018-10-27
这家伙很懒,什么也没写!
rtt 的优势 不仅仅在稳定的内核,还在于驱动框架和组件。对接得好的话,代码就是一次编写多处使用。
armink
2018-10-27
这家伙很懒,什么也没写!
开启 libc 功能后,malloc,printf 这类 libc 函数就都支持了
kimalittlestar
2018-10-28
这家伙很懒,什么也没写!
>rtt 的优势 不仅仅在稳定的内核,还在于驱动框架和组件。对接得好的话,代码就是一次编写多处使用。 ... --- 恩恩,谢谢指点。
kimalittlestar
2018-10-28
这家伙很懒,什么也没写!
>开启 libc 功能后,malloc,printf 这类 libc 函数就都支持了 --- 是这样的,因为 我自定义写的那些文件里头并没有include rtthread.h 文件进去,不过 开启libc功能支持 malloc 这些 我还真不知道。不过还是谢谢啦,我现在去试试看。那我就不用宏定义转换了。。:lol
撰写答案
登录
注册新账号
关注者
0
被浏览
1.6k
关于作者
kimalittlestar
这家伙很懒,什么也没写!
提问
1
回答
5
被采纳
0
关注TA
发私信
相关问题
1
请教cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
2
RT-Thread中的time溢出问题,时间戳溢出,解决方法
3
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
4
SystemView线程名字不显示
5
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
xiaorui
3
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部