This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F2.8377万D:F32TOUI16似乎不起作用

Guru**** 2332530 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/581474/compiler-tms320f28377d-f32toui16-seems-not-to-work

部件号:TMS320F2.8377万D

工具/软件:TI C/C++编译器

你好

我写这个例程

void buck_SetPeriod (浮点Tpwm)

 EPwm1Regs.TBPRD = 100e6*Tpwm-1;
}

我称之为例行程序

  Buck SetPeriod (285e-9*230);

我期望EPwm1Regs.TBPRD 等于6554

但我读了6553。

当我运行拆卸时,我会看到

我执行一个步骤

F32TOUI16似乎将6554.0 转换为6553...

有人能帮我吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Mauro:

    我写了一个小功能,类似于拆卸,以进行测试  

    	text
    	.global _test_f32oui16
    
    _test_f32oui16:
    	.asmfunc
    	ADDB	SP,#2
    	MOV	*-SP[2],#0x77e3	;保存6.555E-5 (285e-9*230)以堆栈
    	MOV	*-SP[1],#0x3889
    	MOVIZ	R0H,#0x5E-5,#0x5E5E,		R0H,R1XI =
    	0XI			,R0XI,R0XH,R0XH 0XI = 1H
    		
    				R0H = 1.0e8 *(285e-9*230)
    	NOP
    	ADDF32	R0H,#0xbf80,R0H	;R0H = 1.0e8 *(285e-9*230)-1
    	NOP
    	F32TOUI16	R0H,R0H		;R0H = uint16_t (R0H)
    	SubREB,	#2
    	Lmfunc SP
    	

    问题似乎是(285e-9*230),它给出 了6.5549.9971万e-05,如果我将其乘以1e8,我得到6554.99971 ,子1是6553.99971 ,到ui16给出了6553。  

    因此F32TOUI16在这种情况下可以正常工作,但我们可能需要先舍入 285e-9*230*1e8,然后再减去1。 我想我们可以这样做

    UINT16_t((((((285e-9*230)*1e8 + 0.5)-1)。 0.5 应完成舍入。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    但为什么CCS钟表显示的是6554而不是6554.99971 ?

    如果我使用类似的解决方案...

    void buck_SetPeriod (浮点Tpwm)

    EPwm1Regs.TBPRD =__f32oui16r (100e6*Tpwm-1);

    }

    要舍入吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mauro Fantina 说:
    但CCS watch为什么显示为6554而不是6554.99971 ?

    我不确定。 我当时使用CCS7,在R0H的注册视图中,我获得 了6554.99971

    我还没有尝试过,但似乎 __f32tooui16r应该进行舍入。 只有在尾数(有效数字)的位7为1时才会进行舍入,如果是将1相加到位23:8,这相当于增加0.5。