勾选Use MicroLIB进入硬件错误中断

2019-07-20 11:40发布

移植UcosIII与EMWIN之后程序运行正常!但是由于在移植其他程序过程中必须勾选Use MicroLIB。结果程序就不能正确进行了!每当调用GUI的语句的时候GUI_Delay(500)的时候运行完后就进入硬件错误中断函数中!过程中尝试过:1:将.s文件中的Stack_Size 改大!
2:选或者不选浮点PFH
3:修改os_cpu_c.c与os_cpu_a.asm
4: 程序跟正常运行时候一样,唯一却别就是有没有勾选Use MicroLIB
5:主函数中将任务堆栈改大
但是仍然不行,还是会进入硬件错误中断,只有把Use MicroLIB不勾选才能正确运行!但是我要移植的其他程序是必须打上勾的!
请问各位朋友们,我勾选Use MicroLIB对UcosIII与EMWIN的移植到底可能造成了什么影响,以至于出现如此错误!请大家多给意见!谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
zdfwyh
1楼-- · 2019-07-20 14:24
我也爱莫能助了,你单步看看发生硬件中断时的调用堆栈吧,看看那个地方出错的,基本都是访问了非法地址造成的. 1.PNG
FantaSy_
2楼-- · 2019-07-20 20:24
 精彩回答 2  元偷偷看……
蒙子
3楼-- · 2019-07-20 21:05
FantaSy_ 发表于 2016-5-13 10:20
帮顶!

谢谢!这个问题好像很少人问!还请大家伙多顶一下!
李振
4楼-- · 2019-07-21 02:29
原子哥的所有程序都是没有勾选Use MicroLIB的,你注意一下usart1的源文件就好了,就是下面的代码,如果你勾选Use MicroLIB,下面的代码就要注释一部分,记得是一部分,int fputc(int ch, FILE *f)函数不要注释掉。。。。
//如果使用ucos,则包括下面的头文件即可.
#if SYSTEM_SUPPORT_OS
#include "includes.h"                                        //ucos 使用          
#endif
//PA9->RX,  PA10->TX
//串口1初始化          
//加入以下代码,支持printf函数,而不需要选择use MicroLIB          
#if 1
#pragma import(__use_no_semihosting)            
//标准库需要的支持函数                 
struct __FILE
{
        int handle;
        /* Whatever you require here. If the only file you are using is */
        /* standard output using printf() for debugging, no file handling */
        /* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
_sys_exit(int x)
{
        x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{      
        while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
        USART1->DR = (u8) ch;      
        return ch;
}
#endif
蒙子
5楼-- · 2019-07-21 04:39
 精彩回答 2  元偷偷看……
蒙子
6楼-- · 2019-07-21 08:17
有没有人遇到过类似问题的

一周热门 更多>