![](/img/trans.png)
[英]Memory leak in 32 bit CPU processor and no leak in 64 bit processor 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.