diff --git a/ds18b20.c b/ds18b20.c index d93a34c..865ad22 100755 --- a/ds18b20.c +++ b/ds18b20.c @@ -122,7 +122,8 @@ void readDs18b20Data(unsigned char *value) // local_irq_enable(); - mdelay(750); + //mdelay(750); + mdelay(375); //msleep(750); // local_irq_disable(); @@ -145,16 +146,18 @@ void readDs18b20Data(unsigned char *value) // mdelay(1); - // init_DS18B20(); + //init_DS18B20(); //write_char(0xB4); //DQ_OUT; //printk("%d: EC:%d", gpio_num,DQ_V); + //write_char(0xCC); //write_char(0x4E); //write_char(0x64); //write_char(0x00); - //write_char(0x7F); + //write_char(0x5F); //init_DS18B20(); + //write_char(0xCC); //write_char(0x48); } diff --git a/make.sh b/make.sh new file mode 100644 index 0000000..221186d --- /dev/null +++ b/make.sh @@ -0,0 +1 @@ +gcc -lpthread diff --git a/temp.c b/temp.c index 8d3a448..94a7cbd 100755 --- a/temp.c +++ b/temp.c @@ -2,17 +2,47 @@ #include #include #include +#include + +#define N 2 float getTempByDev(char *devName); +void *run(void *args); + +float results[N]; +pthread_t tids[N]; +char *names[] = {"/dev/ds18b20-223","/dev/ds18b20-224"}; int main(int argc, char *argv[]) { - float t223 = getTempByDev("/dev/ds18b20-223"); - float t224 = getTempByDev("/dev/ds18b20-224"); - printf("%.4f#%.4f\n", t223, t224); + int i = 0; + for (i = 0; i < N; i++) + { + pthread_create(&tids[i], NULL, run, (void*)i); + } + for (i = 0; i < N; i++) + { + pthread_join(tids[i], NULL); + } + for (i = 0; i < N; i++) + { + if (i > 0) + { + printf("#"); + } + printf("%.3f", results[i]); + } + printf("\n"); return 0; } +void *run(void *args) +{ + int ret=(int)args; + float res = getTempByDev(names[ret]); + results[ret] = res; +} + float getTempByDev(char *devName) { int fd; @@ -20,31 +50,34 @@ float getTempByDev(char *devName) unsigned int hightBitValue = 0; unsigned int lowBitValue = 0; float p = 0.0625; - float value = 1024.0f; + float value = 1024; + short count = 0; fd = open(devName, 0); if (fd >= 0) { - int i = read(fd, &result, sizeof(&result)); - if (i >= 0) + do { - // printf("%xH-%xH\n", result[1], result[0]); - hightBitValue = result[1]; - lowBitValue = result[0]; - hightBitValue <<= 8; - hightBitValue = hightBitValue + lowBitValue; - if ((result[1] & 0xf8)) + count++; + int i = read(fd, &result, sizeof(&result)); + if (i >= 0) { -// printf("aaa\n"); - hightBitValue = ~hightBitValue + 1; - value = hightBitValue * p * -1; + hightBitValue = result[1]; + lowBitValue = result[0]; + hightBitValue <<= 8; + hightBitValue = hightBitValue + lowBitValue; + if ((result[1] & 0xf8)) + { + hightBitValue = ~hightBitValue + 1; + value = hightBitValue * p * -1; + } + else + { + value = hightBitValue * p; + } } - else - { - value = hightBitValue * p; - } - - } + } + while ((value < -55 || value > 125) && count < 5); close(fd); } return value;