เขียนโปรแกรมไมโครคอนโทรลเลอร์ด้วย CCS คำนวณค่าเวลาใน Array ครับ

ผมต้องการคำนวณค่าเวลาถัดไปที่กำลังจะถึงจาก Array ซึ่งภาษาซีไม่สามารถส่ง array ไปยังฟังก์ชั่นได้ ผมจึงส่งค่าชั่วโมงนาที และตำแหน่งของ array ไปกำหนดภายในฟังก์ชั่น. โดยวิธีการหาเวลาถัดไปที่กำลังจะถึงคือผมได้เปลี่ยนชั่วโมงเป็นนาที แล้วหาค่าน้อยที่สุดที่มากกว่า เวลาปัจจุบัน ถ้าไม่มีเวลาน้อยสุดที่มากกว่าปัจจุบันให้หาค่าเวลาที่น้อยที่สุด เช่น เวลาปัจจุบันคือ 20.00 เวลาถ้าไปจะต้องเป็นค่าระหว่าง 20.01-23.59 ถ้าไม่มีค่าในนี้ เวลาถัดไปจะต้องเป็น 00.00-19.59 ผมได้คำนวณค่าจาก Array แล้วแต่มันแสดงค่าไม่ถูกต้องครับ นี่คือโค้ดครับ

int16 next_time(int16 hr, int16 min, int pos){           //pos is position of array

int16 minimVal1,minimVal2;
int i=0,check;
int16 now_all;
int16 all[5];
int16 hrk[5],mnk[5];
   
hrk[pos] = hr;
mnk[pos] = min;
all[pos] =(hrk[pos]*60 + mnk[pos]) ;   //change hr to min

minimVal2 = (hrk[0]*60) + mnk[0];
now_all = getNow();              // current time

printf("\r\npos=%d a=%ld, n=%ld, hr=%ld, mn=%ld",pos ,all[pos],now_all,hrk[pos],mnk[pos]);

for(i=1;i<pos+1;i++){
   
   if(all[i]>now_all){                  /* If have a value more than current time then check =1  */
   
     check=1;
     minimVal1 = all[i];
     break;
   }
     
      if(all[i]<minimVal2){          /* If have no value more than current time then find minimum value of array */

      minimVal2 = all[i];
      printf("\r\nmin a=%ld, n=%ld, ck=%d",all[i],now_all,check);          //It not show valid value

      }
   }

if(check==1){   /* If have a value more than current time then find minimum value which more than current time. */

for(i=1;i<pos+1;i++){

if(all[i]>now_all){

   if(all[i]<minimVal1){

      minimVal1 = all[i];

   }
   }
}

   return minimVal1;
}
else{
   return minimVal2;
}
}



ผลลัพธ์จากการคำนวณคือ

pos=0 a=540, n=1404, hr=9, mn=0
pos=1 a=960, n=1404, hr=16, mn=0
pos=2 a=1020, n=1404, hr=17, mn=0
min a=448, n=1404, ck=0



ในบรรทัด  min a=448, n=1404, ck=0 ตัวแปร a จะต้องเป็นค่าเดียวกับ all[2] คือ 1020 แต่ได้เป็นค่า a=448 ถ้าเปลี่ยน hr เป็นค่าอื่นพอกำหนดตำแหน่งของ array ที่ pos ไปถึงประมาณค่าที่สองหรือสามก็ขึ้นค่าที่ผิดพลาดแบบนี้มาตลอดเลยครับ บางทีเป็น 256 บางทีก็ 512 บางทีก็ 448 ไม่รู้ว่าเกิดจากอะไรครับ จะต้องแก้ไขยังไงครับ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่