シンプルなCプログラムを書いて時間と分を読み込んで一緒に追加しました。しかし、それは追加されず、currentHrMin
は分の値だけを出力しています。ただし、currentHrMin
の印刷後にgetCurrentDate(&dateParams)
が呼び出された場合は問題ありません。私は自分のコードに何が間違っているかを知ることができません。愚かな問題かもしれません。私はMinGW Cコンパイラを使用しています。 #include <inttypes.h>
含めた後scanfを使用してuint8_tデータを読み取る
#include <stdio.h>
#include <stdint.h>
#define BCD_TO_DEC(num) ((((num)&0xF0)>>4)*10+((num)&0x0F))
#define DEC_TO_BCD(num) ((((num)/10) << 4) | ((num) % 10))
struct RTC_TIME
{
uint8_t hours;
uint8_t minutes;
uint8_t seconds;
uint8_t twelveHourFormat:1; //1 = 12 hour format, 0=24 hour format.
uint8_t AM_0_PM_1:1;
uint8_t hours24Format;
uint8_t alarm1State:1;
uint8_t alarm2State:1;
};
struct RTC_DATE
{
uint8_t date;
uint8_t month;
uint8_t dayOfWeek;
uint8_t year;
};
void getCurrentTime(struct RTC_TIME* time)
{
printf("Enter Hour: ");
scanf("%d",&(time->hours));
printf("Enter Min: ");
scanf("%d",&(time->minutes));
}
void getCurrentDate(struct RTC_DATE* date)
{
printf("Enter Month: ");
scanf("%d",&(date->month));
}
int ar1[5]= {0x1253,0x1034,0x0804,0x1112,0x0409};
int main(void)
{
struct RTC_DATE dateParams;
struct RTC_TIME timeParams;
getCurrentTime(&timeParams);
getCurrentDate(&dateParams);
uint16_t currentHrMin = timeParams.hours*60 + timeParams.minutes;
printf("Current hour minute = %d\n",currentHrMin);
return(0);
}
'%d'は' int'の書式指定子です。これは32ビット長である可能性があります。しかし、それを8ビット値の 'scanf'に使用しています。したがって、隣接するバイトも破損しています。 –
'scanf()'では、 ''%d "'には、対応する引数があり、 'int *'のような符号付き整数 へのポインタです。 '&(time-> hours)'は 'uint8_t *'型です。 – chux