2744|9

2935

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

关于keil MDK 6和5版编译器的奇怪问题 [复制链接]

我在将使用旧版项目升级到新版后,发现程序不能顺利执行了,通过查找原因竟然是因为使用的MKD 编译器版本不同造成的。旧版使用MDK 5版编译通过,工作正常,新版使用MDK 6版编译通过,但是工作不正常了。旧版使用MDK 6编译也工作不正常。

通过查找问题出在函数指针上面,编写了下面的验证程序段复现问题,

//声明代码
#define inx_1st  0
typedef uint16_t (*fun_cmd)(uint16_t,uint16_t);

const fun_cmd  cmd_list[]={cmd1,cmd2}

//调用代码
fun_cmd  cmd_task = NULL;

cmd_task = cmd_list[inx_1st];//动态的调用,由程序执行决定
result = cmd_task(0,0); //MKD 6 编译无法调用成功


//函数声明
/*  none cmmand */
uint16_t cmd1(uint16_t x,uint16_t y)
{
	g_val = 1; 	
	return 0;
}

/*  none cmmand */
uint16_t cmd2(uint16_t x,uint16_t y)
{
    g_val = 2; 	
	return 0;
}



该段程序无论MKD 5或6 都可以通过,但是6版却不能工作,调试时也无法中断执行,感觉MDK 6版似乎把程序体给优化掉了,只是简单的返回就不执行程序体里的内容了,因为都能够编译通过,而且能够执行,所以不知道是怎么回事,是不是我哪里的声明出问题了。

 

此帖出自编程基础论坛

最新回复

是有可能,你这都是可以静态求值的东西。你把优化关掉试试。   详情 回复 发表于 2024-1-30 19:51
点赞 关注
 

回复
举报

7193

帖子

2

TA的资源

版主

沙发
 
哪个版本稳定就用哪个版本的编译器吧,编译器内部的工作是怎么样的你也不清楚。
此帖出自编程基础论坛

点评

我主要是想知道是不是我的程序代码是否规范,如果因为编写C代码不规范造成的问题就好好去学习  详情 回复 发表于 2024-1-26 13:40
 
 
 

回复

2935

帖子

4

TA的资源

五彩晶圆(中级)

板凳
 
wangerxian 发表于 2024-1-26 13:14 哪个版本稳定就用哪个版本的编译器吧,编译器内部的工作是怎么样的你也不清楚。

我主要是想知道是不是我的程序代码是否规范,如果因为编写C代码不规范造成的问题就好好去学习

此帖出自编程基础论坛

点评

我看代码没有什么问题,就是函数指针被调用,是不是MDK 6对函数指针调用要求比较高。  详情 回复 发表于 2024-1-26 15:15
 
 
 

回复

7193

帖子

2

TA的资源

版主

4
 
bigbat 发表于 2024-1-26 13:40 我主要是想知道是不是我的程序代码是否规范,如果因为编写C代码不规范造成的问题就好好去学习

我看代码没有什么问题,就是函数指针被调用,是不是MDK 6对函数指针调用要求比较高。

此帖出自编程基础论坛
 
 
 

回复

7618

帖子

18

TA的资源

五彩晶圆(高级)

5
 

uint16_t cmd1(uint16_t x,uint16_t y); 前置一个声明试试

此帖出自编程基础论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

7618

帖子

18

TA的资源

五彩晶圆(高级)

6
 

或者加static

此帖出自编程基础论坛

点评

我奇怪是都能编译过去,说明语法应该没有问题,我感觉象是优化的问题。  详情 回复 发表于 2024-1-30 17:29
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

2935

帖子

4

TA的资源

五彩晶圆(中级)

7
 

我奇怪是都能编译过去,说明语法应该没有问题,我感觉象是优化的问题。

此帖出自编程基础论坛

点评

是有可能,你这都是可以静态求值的东西。你把优化关掉试试。  详情 回复 发表于 2024-1-30 19:51
看你的優化等級多少啊,可以調整不優化試試  详情 回复 发表于 2024-1-30 19:42
 
 
 

回复

114

帖子

6

TA的资源

一粒金砂(中级)

8
 
bigbat 发表于 2024-1-30 17:29 我奇怪是都能编译过去,说明语法应该没有问题,我感觉象是优化的问题。

看你的優化等級多少啊,可以調整不優化試試

此帖出自编程基础论坛
 
 
 

回复

7618

帖子

18

TA的资源

五彩晶圆(高级)

9
 
bigbat 发表于 2024-1-30 17:29 我奇怪是都能编译过去,说明语法应该没有问题,我感觉象是优化的问题。

是有可能,你这都是可以静态求值的东西。你把优化关掉试试。

此帖出自编程基础论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

2935

帖子

4

TA的资源

五彩晶圆(中级)

10
 

问题已经搞清楚了,就是优化搞的事,通过降低优化-O2,就可以避免了,默认为-O3,最高优化级别

此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表