标准测温曲线LUT二分查表实现
const struct TempLut gStarndCoupleLUT[]=
{
{ -2739 , -2479 },
{ -2478 , -2218 },
{ -2217 , -1957 },
{ -1956 , -1696 },
{ -1695 , -1435 },
{ -1434 , -1174 },
{ -1173 , -913 },
{ -912 , -652 },
{ -651 , -391 },
{ -390 , -130 }, // above is the negative ...
{ -131 , 131 },
{ 132 , 393 },
{ 394 , 654 },
{ 655 , 916 },
{ 917 , 1178 },
{ 1179 , 1440 },
{ 1441 , 1701 },
{ 1702 , 1963 },
{ 1964 , 2228 },
{ 2229 , 2493 },
{ 2494 , 2758 },
{ 2759 , 3023 },
{ 3024 , 3289 },
{ 3290 , 3554 },
{ 3555 , 3819 },
{ 3820 , 4087 },
{ 4088 , 4356 },
{ 4357 , 4624 },
{ 4625 , 4892 },
{ 4893 , 5164 },
{ 5165 , 5436 },
{ 5437 , 5704 },
{ 5705 , 5976 },
{ 5977 , 6248 },
{ 6249 , 6520 },
{ 6521 , 6795 },
{ 6796 , 7070 },
{ 7071 , 7342 },
{ 7343 , 7614 },
{ 7615 , 7889 },
{ 7890 , 8167 },
{ 8168 , 8446 },
{ 8447 , 8721 },
{ 8722 , 8999 },
{ 9000 , 9278 },
{ 9279 , 9556 },
{ 9557 , 9835 },
{ 9836 , 10113 },
{ 10114 , 10395 },
{ 10396 , 10677 },
{ 10678 , 10959 },
{ 10960 , 11241 },
{ 11242 , 11523 },
{ 11524 , 11805 },
{ 11806 , 12090 },
{ 12091 , 12375 },
{ 12376 , 12660 },
{ 12661 , 12945 },
{ 12946 , 13231 },
{ 13232 , 13519 },
{ 13520 , 13808 },
{ 13809 , 14097 },
{ 14098 , 14385 },
{ 14386 , 14674 },
{ 14675 , 14962 },
{ 14963 , 15251 },
{ 15252 , 15543 },
{ 15544 , 15835 },
{ 15836 , 16127 },
{ 16128 , 16418 },
{ 16419 , 16710 },
{ 16711 , 17006 },
{ 17007 , 17301 },
{ 17302 , 17593 },
{ 17594 , 17885 },
{ 17886 , 18183 },
{ 18184 , 18482 },
{ 18483 , 18777 },
{ 18778 , 19073 },
{ 19074 , 19371 },
{ 19372 , 19670 },
{ 19671 , 19968 },
{ 19969 , 20270 },
{ 20271 , 20569 },
{ 20570 , 20868 },
{ 20869 , 21169 },
{ 21170 , 21471 },
{ 21472 , 21773 },
{ 21774 , 22075 },
{ 22076 , 22381 },
{ 22382 , 22686 },
{ 22687 , 22988 },
{ 22989 , 23294 },
{ 23295 , 23599 },
{ 23600 , 23905 },
{ 23906 , 24213 },
{ 24214 , 24522 },
{ 24523 , 24827 },
{ 24828 , 25133 },
{ 25134 , 25441 },
{ 25442 , 25750 },
{ 25751 , 26062 },
{ 26063 , 26374 },
{ 26375 , 26683 },
{ 26684 , 26995 },
{ 26996 , 27307 },
{ 27308 , 27616 },
{ 27617 , 27928 },
{ 27929 , 28243 },
{ 28244 , 28558 },
{ 28559 , 28871 },
{ 28872 , 29183 },
{ 29184 , 29498 },
{ 29499 , 29813 },
{ 29814 , 30129 },
{ 30130 , 30447 },
{ 30448 , 30766 },
{ 30767 , 31082 },
{ 31083 , 31397 },
{ 31398 , 31716 },
{ 31717 , 32038 },
{ 32039 , 32357 },
{ 32358 , 32675 },
{ 32676 , 32997 },
{ 32998 , 33316 },
{ 33317 , 33635 },
{ 33636 , 33957 },
{ 33958 , 34279 },
{ 34280 , 34601 },
{ 34602 , 34924 },
{ 34925 , 35249 },
{ 35250 , 35574 },
{ 35575 , 35897 },
{ 35898 , 36222 },
{ 36223 , 36548 },
{ 36549 , 36873 },
{ 36874 , 37199 },
{ 37200 , 37524 },
{ 37525 , 37853 },
{ 37854 , 38182 },
{ 38183 , 38511 },
{ 38512 , 38840 },
{ 38841 , 39169 },
{ 39170 , 39497 },
{ 39498 , 39826 },
{ 39827 , 40155 },
{ 40156 , 40484 },
{ 40485 , 40816 },
{ 40817 , 41148 },
{ 41149 , 41480 },
{ 41481 , 41813 },
{ 41814 , 42145 },
{ 42146 , 42480 },
{ 42481 , 42813 },
{ 42814 , 43145 },
{ 43146 , 43480 },
{ 43481 , 43816 },
{ 43817 , 44151 },
{ 44152 , 44487 },
{ 44488 , 44822 },
{ 44823 , 45158 },
{ 45159 , 45497 },
{ 45498 , 45836 },
{ 45837 , 46171 },
{ 46172 , 46510 },
{ 46511 , 46849 },
{ 46850 , 47188 },
{ 47189 , 47527 },
{ 47528 , 47866 },
{ 47867 , 48208 },
{ 48209 , 48550 },
{ 48551 , 48889 },
{ 48890 , 49228 },
{ 49229 , 49570 },
{ 49571 , 49912 },
{ 49913 , 50258 },
{ 50259 , 50604 },
{ 50605 , 50946 },
{ 50947 , 51288 },
{ 51289 , 51634 },
{ 51635 , 51979 },
{ 51980 , 52325 },
{ 52326 , 52671 },
{ 52672 , 53016 },
{ 53017 , 53362 },
{ 53363 , 53708 },
{ 53709 , 54057 },
{ 54058 , 54406 },
{ 54407 , 54755 },
{ 54756 , 55104 },
{ 55105 , 55453 },
{ 55454 , 55802 },
{ 55803 , 56150 },
{ 56151 , 56499 },
{ 56500 , 56848 },
{ 56849 , 57200 },
{ 57201 , 57553 },
{ 57554 , 57902 },
{ 57903 , 58254 },
{ 58255 , 58607 },
{ 58608 , 58959 },
{ 58960 , 59314 },
{ 59315 , 59667 },
{ 59668 , 60019 },
{ 60020 , 60375 },
{ 60376 , 60730 },
{ 60731 , 61086 },
{ 61087 , 61442 },
{ 61443 , 61797 },
{ 61798 , 62153 },
{ 62154 , 62509 },
{ 62510 , 62868 },
{ 62869 , 63227 },
{ 63228 , 63582 },
{ 63583 , 63942 },
{ 63943 , 64301 },
{ 64302 , 64660 },
{ 64661 , 65019 },
{ 65020 , 65378 },
{ 65379 , 65737 },
{ 65738 , 66096 },
{ 66097 , 66458 },
{ 66459 , 66820 },
{ 66821 , 67183 },
{ 67184 , 67545 },
{ 67546 , 67908 },
{ 67909 , 68270 },
{ 68271 , 68632 },
{ 68633 , 68995 },
{ 68996 , 69357 },
{ 69358 , 69723 },
{ 69724 , 70089 },
{ 70090 , 70451 },
{ 70452 , 70817 },
{ 70818 , 71183 },
{ 71184 , 71549 },
{ 71550 , 71914 },
{ 71915 , 72280 },
{ 72281 , 72649 },
{ 72650 , 73015 },
{ 73016 , 73381 },
{ 73382 , 73750 },
{ 73751 , 74119 },
{ 74120 , 74488 },
{ 74489 , 74857 },
{ 74858 , 75226 },
{ 75227 , 75595 },
{ 75596 , 75964 },
{ 75965 , 76336 },
{ 76337 , 76709 },
{ 76710 , 77078 },
{ 77079 , 77450 },
{ 77451 , 77823 },
{ 77824 , 78195 },
{ 78196 , 78568 },
{ 78569 , 78940 },
{ 78941 , 79313 },
{ 79314 , 79685 },
{ 79686 , 80061 },
{ 80062 , 80434 },
{ 80435 , 80806 },
{ 80807 , 81182 },
{ 81183 , 81557 },
{ 81558 , 81933 },
{ 81934 , 82309 },
{ 82310 , 82685 },
{ 82686 , 83061 },
{ 83062 , 83437 },
{ 83438 , 83816 },
{ 83817 , 84195 },
{ 84196 , 84571 },
{ 84572 , 84950 },
{ 84951 , 85329 },
{ 85330 , 85705 },
{ 85706 , 86084 },
{ 86085 , 86463 },
{ 86464 , 86842 },
{ 86843 , 87225 },
{ 87226 , 87604 },
{ 87605 , 87983 },
{ 87984 , 88366 },
{ 88367 , 88748 },
{ 88749 , 89131 },
{ 89132 , 89510 },
{ 89511 , 89889 },
{ 89890 , 90272 },
{ 90273 , 90654 },
{ 90655 , 91040 },
{ 91041 , 91426 },
{ 91427 , 91809 },
{ 91810 , 92191 },
{ 92192 , 92574 },
{ 92575 , 92960 },
{ 92961 , 93345 },
{ 93346 , 93728 },
{ 93729 , 94114 },
{ 94115 , 94500 },
{ 94501 , 94886 },
{ 94887 , 95275 },
{ 95276 , 95661 },
{ 95662 , 96047 },
{ 96048 , 96436 },
{ 96437 , 96822 },
{ 96823 , 97208 },
{ 97209 , 97597 },
{ 97598 , 97986 },
{ 97987 , 98375 },
{ 98376 , 98764 },
{ 98765 , 99154 },
{ 99155 , 99543 },
{ 99544 , 99932 },
{ 99933 , 100321 },
{ 100322 , 100711 },
{ 100712 , 101103 },
{ 101104 , 101496 },
{ 101497 , 101885 },
{ 101886 , 102277 },
{ 102278 , 102670 },
{ 102671 , 103059 },
{ 103060 , 103452 },
{ 103453 , 103845 },
{ 103846 , 104237 },
{ 104238 , 104633 },
{ 104634 , 105026 },
{ 105027 , 105418 },
{ 105419 , 105814 },
{ 105815 , 106210 },
{ 106211 , 106603 },
{ 106604 , 106995 },
{ 106996 , 107391 },
{ 107392 , 107787 },
{ 107788 , 108183 },
{ 108184 , 108579 },
{ 108580 , 108975 },
{ 108976 , 109371 },
{ 109372 , 109770 },
{ 109771 , 110169 },
{ 110170 , 110565 },
{ 110566 , 110961 },
{ 110962 , 111361 },
{ 111362 , 111760 },
{ 111761 , 112156 },
{ 112157 , 112555 },
{ 112556 , 112954 },
{ 112955 , 113354 },
{ 113355 , 113753 },
{ 113754 , 114153 },
{ 114154 , 114555 },
{ 114556 , 114954 },
{ 114955 , 115354 },
{ 115355 , 115756 },
{ 115757 , 116159 },
{ 116160 , 116562 },
{ 116563 , 116961 },
{ 116962 , 117360 },
{ 117361 , 117763 },
{ 117764 , 118166 },
{ 118167 , 118568 },
{ 118569 , 118974 },
{ 118975 , 119380 },
{ 119381 , 119783 },
{ 119784 , 120186 },
{ 120187 , 120588 },
{ 120589 , 120994 },
{ 120995 , 121400 },
{ 121401 , 121803 },
{ 121804 , 122209 },
{ 122210 , 122615 },
{ 122616 , 123021 },
{ 123022 , 123427 },
{ 123428 , 123833 },
{ 123834 , 124239 },
{ 124240 , 124645 },
{ 124646 , 125054 },
{ 125055 , 125460 },
{ 125461 , 125866 },
{ 125867 , 126276 },
{ 126277 , 126685 },
{ 126686 , 127094 },
{ 127095 , 127504 },
{ 127505 , 127913 },
{ 127914 , 128323 },
{ 128324 , 128732 },
{ 128733 , 129141 },
{ 129142 , 129551 },
{ 129552 , 129960 },
{ 129961 , 130369 },
{ 130370 , 130779 },
{ 130780 , 131188 },
{ 131189 , 131601 },
{ 131602 , 132014 },
{ 132015 , 132423 },
{ 132424 , 132835 },
{ 132836 , 133248 },
{ 133249 , 133658 },
{ 133659 , 134070 },
{ 134071 , 134483 },
{ 134484 , 134896 },
{ 134897 , 135309 },
{ 135310 , 135721 },
{ 135722 , 136137 },
{ 136138 , 136550 },
{ 136551 , 136963 },
{ 136964 , 137379 },
{ 137380 , 137792 },
{ 137793 , 138204 },
{ 138205 , 138620 },
{ 138621 , 139033 },
{ 139034 , 139446 },
{ 139447 , 139862 },
{ 139863 , 140277 }
};
const int gLutlen= sizeof(gStarndCoupleLUT)/sizeof(struct TempLut);
int lookUpTemp(int adv)
{
int low=0,high=gLutlen-1,mid;
// if mid hit
while(low<=high)
{
mid=(low+high)/2;
// printf(" low %d high %d ; mid %d %d %d\n",low , high , mid, gTempLut[mid].high, gTempLut[mid].low); // 4 test
if(gStarndCoupleLUT[mid].high<adv)
{
low=mid+1;
} else if(gStarndCoupleLUT[mid].low>adv)
{
high=mid-1;
} else {
return mid;
}
}
return -1;
}
/*
void main(int argc,char* argv[])
{
// if(argv[1])
int index=0, key=0;
// key=str2int(argv[1]);
// key=strtoi(argv[1],10);
// sscanf(argv[1],"%d",&key);
// printf("gTempLut len %d %d %d\n",gLutlen, argc, key);
for(key=-800;key<200000;key++){
index=lookUpTemp(key);
if(index!=-1)
printf("find the value %d in [%d, %d] \n", key, gStarndCoupleLUT[index].low, gStarndCoupleLUT[index].high );
else
printf("can't find the value %d in LUT \n", key );
}
}
*/
头文件
#ifndef TEMPLUT_H_
#define TEMPLUT_H_
#define UNIT_LEN 2 // 2 degree per unit...
#define LUT_OFFSET 10 // units under 0 degree...
struct TempLut{
int low;
int high;
};
extern int lookUpTemp(int adv);
extern const struct TempLut gTempLut[];
#endif /* TEMPLUT_H_ */