簡體   English   中英

32 位 CPU 中的表達式求值

[英]Expression Evaluation in 32 bit CPU

我正在使用 TI 32 位微控制器 TMS320F280049。 我正在使用外部 ADC 進行溫度測量。 ADC output 代碼是 24 位數據,現在我想使用以下表達式將此 ADC output 代碼轉換為電阻值

RTD = (1080 * ADC output code) / (4194304 * 16)

我寫的代碼如下,

int32 RTD = 0;
int32 adc = 0x005EEC17;

RTD = (1080*adc)/(16*4194304);

我按原樣寫了這個表達式,但得到的 RTD 值是一些隨機的負值,而不是我期望的 100。 我想知道如何正確評估表達式。 我是編碼任何解釋的初學者,將不勝感激。

1080*0x005EEC17溢出int32 因此,您需要以更廣泛的類型進行數學運算。 您可以使用LL后綴使文字long long至少為 64 位

int32 RTD = 0;
int32 adc = 0x005EEC17;

RTD = (1080LL*adc)/(16*4194304);

int32_t最多只能存儲 2 31 –1(大約 2.15e9)的值。 乘以1080 * adc (約 6.7e9)將導致溢出。 以下是一些似乎適用於 gcc 的替代方案:

uint32_t rtd = adc / 16 * 1080 / 4194304;  // Dividing first.
uint32_t rtd = (adc >> 4) * 1080 / 4194304; // Same as above.
uint32_t rtd = (adc * 1080.0) / (16 * 4194304); // Implicitly convert to double, so that larger values can be stored.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM