打印

指针函数在GD32中出现硬件错误,求帮助

[复制链接]
659|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
************************定义*************************
void LineCalc(LINE_STRUCT *p);

#define LINE_STRTUCT_DEFALUTS       \
{                                   \
    (void (*)(void *))LineCalc      \
}

typedef struct
{
    void (*calc)(void *);     // Pointer to calculation functon
    int16 mode;              
    int32 x1;
    int32 y1;                 // (x1,y1)
    int32 x2;
    int32 y2;                 // (x2,y2)
    int32 x;                  
    int32 y;                 
} LINE_STRUCT;
*************************子程序*********************
void function(void)
{
     LINE_STRUCT aoLine = LINE_STRTUCT_DEFALUTS;

     aoLine.calc(&aoLine);
}

void LineCalc(LINE_STRUCT *p)
{
}
****************************************************
现在的问题是,子程序function()中加上aoLine.calc(&aoLine)语句就会跳入HardFault_Handler,删掉aoLine.calc(&aoLine)程序就可以正常跑,这个函数这种写法有问题吗?以前用ST的stm32f030,现要移植到gd32e230。如何解决这个问题?

使用特权

评论回复
沙发
ayb_ice| | 2021-4-1 11:24 | 只看该作者
应该是你的LineCalc函数内部的问题

使用特权

评论回复
板凳
ayb_ice| | 2021-4-1 11:27 | 只看该作者
我在真实的板子上试了,没有问题

使用特权

评论回复
地板
scfor123456|  楼主 | 2021-4-1 11:37 | 只看该作者
ayb_ice 发表于 2021-4-1 11:27
我在真实的板子上试了,没有问题

编译优化设置为1,出现这个问题,设置为2,就没问题了。不知道你设置的多少?关键是这个问题点有两处,另一处还是解决不了,一直跳硬件错误

使用特权

评论回复
5
ayb_ice| | 2021-4-1 11:43 | 只看该作者
scfor123456 发表于 2021-4-1 11:37
编译优化设置为1,出现这个问题,设置为2,就没问题了。不知道你设置的多少?关键是这个问题点有两处,另 ...

这与优化没有关系的,出现问题可以 调试,看是哪一步出了问题

使用特权

评论回复
6
scfor123456|  楼主 | 2021-4-1 11:52 | 只看该作者
ayb_ice 发表于 2021-4-1 11:43
这与优化没有关系的,出现问题可以 调试,看是哪一步出了问题

单步走没问题,加断点后进去几次后就跑飞了

使用特权

评论回复
7
ayb_ice| | 2021-4-1 13:04 | 只看该作者
scfor123456 发表于 2021-4-1 11:52
单步走没问题,加断点后进去几次后就跑飞了

把LineCalc函数写成空函数再试

使用特权

评论回复
8
scfor123456|  楼主 | 2021-4-1 14:38 | 只看该作者
ayb_ice 发表于 2021-4-1 13:04
把LineCalc函数写成空函数再试

GD的技术支持测试了,空函数也会

使用特权

评论回复
9
ayb_ice| | 2021-4-1 16:43 | 只看该作者
scfor123456 发表于 2021-4-1 14:38
GD的技术支持测试了,空函数也会

循环里只调用这个相关代码呢,不要调用其它代码

使用特权

评论回复
10
ayb_ice| | 2021-4-1 16:51 | 只看该作者
scfor123456 发表于 2021-4-1 14:38
GD的技术支持测试了,空函数也会

我在我的实际硬件上跑,循环这么次也没有任何问题

QQ图片20210401164921.png (24.89 KB )

QQ图片20210401164921.png

使用特权

评论回复
11
持续关注这个帖子,感觉不错的。

使用特权

评论回复
12
ayb_ice| | 2021-4-1 16:54 | 只看该作者
本帖最后由 ayb_ice 于 2021-4-1 17:06 编辑
scfor123456 发表于 2021-4-1 14:38
GD的技术支持测试了,空函数也会

是什么内核,什么环境呢,看下反汇编就知道了,是什么内核,编译环境,

使用特权

评论回复
13
scfor123456|  楼主 | 2021-4-1 17:24 | 只看该作者
ayb_ice 发表于 2021-4-1 16:54
是什么内核,什么环境呢,看下反汇编就知道了,是什么内核,编译环境,
...

gd32e230, m23内核,kEIL5.26

使用特权

评论回复
14
scfor123456|  楼主 | 2021-4-1 17:28 | 只看该作者
ayb_ice 发表于 2021-4-1 16:54
是什么内核,什么环境呢,看下反汇编就知道了,是什么内核,编译环境,
...

现在找不出问题,试着不用编译优化,但提示
.\output\Project.axf: Error: L6407E: Sections of aggregate size 0x44c0 bytes could not fit into .ANY selector(s).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
Finished: 2 information, 0 warning and 239 error messages.
好像是内存空间超出了,把函数和变量先整理整理再编译

使用特权

评论回复
15
ayb_ice| | 2021-4-1 17:31 | 只看该作者
scfor123456 发表于 2021-4-1 17:24
gd32e230, m23内核,kEIL5.26

ARM内核的话,还是怀疑自己的程序吧。另建个工程测试

使用特权

评论回复
16
scfor123456|  楼主 | 2021-4-1 17:34 | 只看该作者
ayb_ice 发表于 2021-4-1 11:43
这与优化没有关系的,出现问题可以 调试,看是哪一步出了问题

代码如果写的有问题,优化容易出现问题,关键这个跑ST的可以啊,难道主频高了点?

使用特权

评论回复
17
勇敢的大白菜| | 2021-4-1 17:54 | 只看该作者
持续关注中,希望楼主很快的解决掉这个问题的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

42

帖子

0

粉丝