keil MDK 计算64位整型出错!
LPC1765程序大致如下:unsigned long long a,b;//64bit
unsigned long c,d; //32bit
c=10000ul; d=20000ul;
a=(unsigned long long)c*c;
b=(unsigned long long)d*d;
printf("a=%llu,b=%llu\r\n",a,b);
输出后值时错误的,有时只取到高32bit,或将计算的低32bit放到了高32bit。貌似内存重叠,
将printf("a=%llu,b=%llu\r\n",a,b);
改成printf("a=%llu,b=%llu\r\n",(unsigned long long)a,(unsigned long long)b); 也不对!
不知怎么才能计算正确。看keil帮助文档,说支持64bit整型。
在VC里验证,将long long改成__int64,%llu改成%I64u,结果是对的,说明VC直接运算是没有错误的。
版本信息:
IDE-Version:
μVision V4.03
Copyright (c) Keil Elektronik GmbH / Keil Software, Inc. 1995 - 2009
Tool Version Numbers:
Toolchain: RealView MDK-ARMVersion: 4.10
Toolchain Path: BIN40\
C Compiler: Armcc.Exe V4.0.0.728
Assembler: Armasm.Exe V4.0.0.728
Linker/Locator: ArmLink.Exe V4.0.0.728
Librarian: ArmAr.Exe V4.0.0.728
Hex Converter: FromElf.Exe V4.0.0.728
CPU DLL: SARMCM3.DLL V4.10
Dialog DLL: DARMP1.DLL V1.13
Target DLL: ..\TKScope\UL2ARM_TKSCP_DRV_ARM_for_AGDI.dll
Dialog DLL: TARMP1.DLL V1.13
a=(unsigned long long)c*(unsigned long long)c;
b=(unsigned long long)d*(unsigned long long)d;這樣呢? qlb1234 发表于 2013-11-22 12:17 static/image/common/back.gif
這樣呢?
不行啊,我感觉是哪里的宏定义限制了编译范围 我看上去问题是在printf库的实现。
你看看有没有相关选项?用完整版的printf。 先确认是a,b的值不对,还是printf的问题吧
我简单测试一下:
用keil/ARM/Examples/Hello/Hello.uvproj的工程,测试没有问题
y574924080 发表于 2013-11-22 13:19 static/image/common/back.gif
先确认是a,b的值不对,还是printf的问题吧
我简单测试一下:
工程用的是周立功的模板,是从ADS搬过来的,有影响没。 y574924080 发表于 2013-11-22 13:19 static/image/common/back.gif
先确认是a,b的值不对,还是printf的问题吧
我简单测试一下:
谢谢 大神:Cliff 和4924080,确实是打印输出的问题,计算是对的。 学习学习一下
页:
[1]