ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
830952 Топик полностью
IBAH (11.04.2018 12:12, просмотров: 50) ответил AU08 на Как в ЙяР автоматически присвоить переменной дату компиляции? Чтобы использовать как версию ПО?
я делаю так   typedef struct { unsigned char D;//число месяца 1-31 unsigned char M;//месяц 1-12 unsigned char Y;//год }DataKompil_t; void InitDataKomp(DataKompil_t* s); typedef struct { unsigned char H;//часы unsigned char M;//минуты unsigned char S;//секунды }TimeKompil_t static const char StrDate[]=__DATE__; //01234567890 //Oct 30 2010 static const char StrTime[]=__TIME__; //01234567 //hh:mm:ss //сравнение строк //возвращаемое значение //совпадение 1 //не совпадение 0 //аргументы //s1-большая строка //s2-малая строка //Poz- позиция в большой строке //Kolvo - количество сравниваемых символов static unsigned char StrCompare(const char* s1,char* s2,char Poz,char Kolvo) { for(int i=0;i<Kolvo;i++) { if(s1[Poz+i]!=s2[i])return 0; } return 1; } //проверка на число static unsigned char DataCompare(void) { //если день месяца один символ if(StrDate[4]==' ') { for(int i0=1;i0<10;i0++) { if(StrDate[5]==(i0+'0')) { return i0; } } return 0; } //если день месяца два символа for(int i1=1;i1<4;i1++) { for(int i0=0;i0<10;i0++) { char stemp[2]; stemp[0]=i1+'0'; stemp[1]=i0+'0'; if(StrCompare(StrDate,stemp,4,2)) { return 10*i1+i0; } } } return 0; } //проверка на год static unsigned char YearCompare(void) { for(int i1=0;i1<10;i1++) { for(int i0=0;i0<10;i0++) { char stemp[2]; stemp[0]=i1+'0'; stemp[1]=i0+'0'; if(StrCompare(StrDate,stemp,9,2)) { return 10*i1+i0; } } } return 0; } //инициализация даты компиляции //заполнение полей структуры void InitDataKomp(DataKompil_t* s) { //проверка на месяц if (StrCompare(StrDate,((char*)"Jan"),0,3)) {s->M=1;} else if(StrCompare(StrDate,((char*)"Feb"),0,3)) {s->M=2;} else if(StrCompare(StrDate,((char*)"Mar"),0,3)) {s->M=3;} else if(StrCompare(StrDate,((char*)"Apr"),0,3)) {s->M=4;} else if(StrCompare(StrDate,((char*)"May"),0,3)) {s->M=5;} else if(StrCompare(StrDate,((char*)"Jun"),0,3)) {s->M=6;} else if(StrCompare(StrDate,((char*)"Jul"),0,3)) {s->M=7;} else if(StrCompare(StrDate,((char*)"Aug"),0,3)) {s->M=8;} else if(StrCompare(StrDate,((char*)"Sep"),0,3)) {s->M=9;} else if(StrCompare(StrDate,((char*)"Oct"),0,3)) {s->M=10;} else if(StrCompare(StrDate,((char*)"Nov"),0,3)) {s->M=11;} else if(StrCompare(StrDate,((char*)"Dec"),0,3)) {s->M=12;} //опрпеделение числа s->D=DataCompare(); //определить год s->Y=YearCompare(); } static unsigned char HorsCompare(void) { for(int i1=0;i1<3;i1++) { for(int i0=0;i0<10;i0++) { char stemp[2]; stemp[0]=i1+'0'; stemp[1]=i0+'0'; if(StrCompare(StrTime,stemp,0,2)) { return 10*i1+i0; } } } return 0; } static unsigned char MinCompare(void) { for(int i1=0;i1<6;i1++) { for(int i0=0;i0<10;i0++) { char stemp[2]; stemp[0]=i1+'0'; stemp[1]=i0+'0'; if(StrCompare(StrTime,stemp,3,2)) { return 10*i1+i0; } } } return 0; } static unsigned char SekCompare(void) { for(int i1=0;i1<6;i1++) { for(int i0=0;i0<10;i0++) { char stemp[2]; stemp[0]=i1+'0'; stemp[1]=i0+'0'; if(StrCompare(StrTime,stemp,6,2)) { return 10*i1+i0; } } } return 0; } //инициализация времени компиляции //заполнение полей структуры void InitTimeKomp(TimeKompil_t* s) { s->H=HorsCompare(); s->M=MinCompare(); s->S=SekCompare(); }