LAOXU
发表于 2024-10-1 10:10:32
coreyzhao 发表于 2024-8-17 22:17
大神好,我是新手,在我的项目中引入MUD16的V1和V2版本,Keil编译都能通过,但是用V3,就会出现*** ERROR L ...
调试时 加了 /**/ , 请将FCASTL.a51 文件中的 ' /* ' 和 ' */ '去掉即可.
clbrfxbh
发表于 2024-11-9 10:08:14
大神你好,使用了库函数,非常感谢,我用的时8H4K64TL,在左移和右移函数存在卡死的问题。问题发生在以下函数中
//整数平方根算法
uint16_t IntSqrt(uint32_t x)
{
uint32_t temp = 0;
uint16_t v_bit = 15;
uint16_t n = 0;
uint16_t b = 0x8000;
if (x <= 1)
return x;
do{
temp = ((uint32_t)((n << 1) + b)) << (v_bit--);
//temp = ((uint32_t)((n << 1) + b));
//temp <<= (v_bit--);
if (x >= temp)
{
n += b;
x -= temp;
}
}while (b >>= 1);
return n;
}
会卡死在<<= (v_bit--);这个语句中!
另外while (b >>= 1);这句语句平时没有问题,但是当b==0时,也会卡死
另外,官方的那个库也存在一样的问题
您有空研究一下!谢谢!
LAOXU
发表于 2024-11-9 14:06:12
收到
LAOXU
发表于 2024-11-9 14:09:17
clbrfxbh 发表于 2024-11-9 10:08
大神你好,使用了库函数,非常感谢,我用的时8H4K64TL,在左移和右移函数存在卡死的问题。问题发生在以下函 ...
请问有具体的输入数值吗?
uint32_t x 实际值, 使于跟踪分析.
clbrfxbh
发表于 2024-11-9 20:33:07
LAOXU 发表于 2024-11-9 14:09
请问有具体的输入数值吗?
uint32_t x 实际值, 使于跟踪分析.
应该是任意数都不行吧!我实验中用100不行!
LAOXU
发表于 2024-11-13 04:29:54
本帖最后由 LAOXU 于 2024-11-13 05:14 编辑
手头没有8H4K64TL芯片,用的是STC8H4K64U开发板,无论外挂哪种库,更换了好多输入数据(包括100),都未发现卡死现像。
因为我是单纯测试单一功能,不存在内存冲突问题。
请确认你是否使用OS,或中断及程序中多处使用开平方子程序?
如想确认,很简单,在调用开平方子程序之前后,临时加一个开/关总中断EA,如故障消失,肯定是特殊寄存器冲突引起的。
LAOXU
发表于 2024-11-13 04:35:06
本帖最后由 LAOXU 于 2024-11-13 05:20 编辑
这里给一个以前写的开平方子程序,精度比你的高1bit(带4舍5入功能),供参考
LAOXU
发表于 2024-11-13 13:01:10
LAOXU 发表于 2024-11-9 14:09
请问有具体的输入数值吗?
uint32_t x 实际值, 使于跟踪分析.
如开关总中断EA,故障消失,那在编译我的MDU16库时,CLOSE_EA选择1,重新编译再外挂到项目中即可。
LAOXU
发表于 2024-11-13 13:03:11
胡嘉鑫
发表于 2024-11-13 15:26:44
学习