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

学习
页: 1 [2] 3 4
查看完整版本: 荣誉版主,老许版:8H系列/8G系列, MDU16 V3.0 LIB 库使用说明