2017-10-14 46 views
0

我試圖調用下面的函數應該充滿傳感器的數據的數組,並返回檢測傳感器數量的函數:調用與動態分配的數組的指針

uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) 

我怎麼來在不知道傳感器數量的情況下調用它?我想過:

ds_sensor_t *result = (ds_sensor_t *) malloc(NUM_OF_SENSORS * sizeof(ds_sensor_t)); 
uint8_t count = ds18b20_read_all(pin, result); 

但我不知道NUM_OF_SENSORS。我應該選擇一個足夠大的數字嗎?

編輯: 函數的源代碼:https://github.com/SuperHouse/esp-open-rtos/blob/master/extras/ds18b20/ds18b20.c

+1

閱讀功能說明。 –

+0

我想你可以在每次讀取新傳感器數據時使用'realloc'功能。 http://en.cppreference.com/w/c/memory/realloc這意味着你可以添加你的傳感器一個接一個'結果' –

+0

我認爲應該有一個常數,說你最多可用的傳感器數量(類似MAX_NUM_OF_SENSORS)。或者像這樣的東西...你有函數ds18b20_read_all的源代碼嗎? – Sandro

回答

2

頭說連着,你是想詢問功能是一個過時的API。這通常意味着你不應該使用它來如果提供更換:

//下面是過時/棄用的API ... uint8_t ds18b20_read_all(uint8_t針,ds_sensor_t *結果);

我懷疑它是由於你有關於:的問題的原因而被棄用。目前還不清楚如何使用它。

新的API(以下是其中之一)已addr_count作爲參數:

布爾ds18b20_read_temp_multi(INT引腳,ds18b20_addr_t * addr_list,INT addr_count,浮子* result_list);

+0

好的,我錯過了它,這很有道理,我以爲我錯過了C語言中的某些東西。 – Mouk

3

1線最大傳感器是75.因此,你可以具有附着高達75個ds18b20s。您還可以查詢電線找出傳感器有多少使用int ds18b20_scan_devices(int pin, ds18b20_addr_t *addr_list, int addr_count);集addr_count = 75