- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2023-12-12 11:44:58
中级会员
- 积分
- 304
|
发表于 2023-3-22 12:55:23
|
显示全部楼层
本帖最后由 alanding 于 2023-3-22 12:56 编辑
不明白是怎么造成的错误,想出一个临时方法,把所有8位变量改成16位变量就能编译通过了,包括警告也没了,下面是原来内部错误的源码:第41行,把除号改成加减乘都没错
#include <STC_32G.H>
#include <INTRINS.H>
//#include <My_Fun_STC32.H>
unsigned long int edata abc;
unsigned long int edata aaa;
unsigned char far led[32768];
void my_fun_gmt_to_days(unsigned char *s, unsigned long int u)
{
unsigned int d, i, y;
unsigned char j;
// u = u + (un.inf.time_zone * 3600L) + (un.inf.ext_time_zone * 1800L); // Convert to local time
d = u / 86400L;
u = u % 86400L;
y = 1970;
while(d > 365)
{
if ((y % 4) == 0) d -= 366; else d -= 365;
y++;
}
if ((d == 365) && ((y % 4) != 0)) // No leap year
{
d -= 365;
y++;
}
s[0] = (unsigned char)(y / 1000) | 0x30;
i = y % 1000;
s[1] = (unsigned char)(i / 100) | 0x30;
i = y % 100;
s[2] = (unsigned char)(i / 10) | 0x30;
i = y % 10;
s[3] = (unsigned char)(i / 1) | 0x30;
s[4] = '0';
s[5] = (unsigned char)(d / 100) | 0x30;
j = d % 100;
s[6] = (unsigned char)(j / 10) | 0x30;
j = d % 10;
s[7] = (unsigned char)(j / 1) | 0x30;
// s[7] = (unsigned char)((unsigned int)j / 1) | 0x30;
i = u / 3600;
u = u % 3600;
s[8] = (unsigned char)(i / 10) | 0x30;
s[9] = (unsigned char)(i % 10) | 0x30;
i = u / 60;
u = u % 60;
s[10] = (unsigned char)(i / 10) | 0x30;
s[11] = (unsigned char)(i % 10) | 0x30;
s[12] = (unsigned char)(u / 10) | 0x30;
s[13] = (unsigned char)(u % 10) | 0x30;
s[14] = 0;
}
void xxx(void)
{
unsigned char j, s[16];
s[7] = (unsigned char)(j / 1) | 0x30;
// s[7] = (unsigned char)((unsigned int)j / 1) | 0x30;
}
void main(void)
{
unsigned char j, s[16];
xxx();
my_fun_gmt_to_days(s, 0L);
s[7] = (unsigned char)(j / 1) | 0x30;
// s[7] = (unsigned char)((unsigned int)j / 1) | 0x30;
_nop_();
aaa = abc * 3;
led[1] = 2;
}
|
|