ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
622505
symbions (02.10.2015 00:32 - 13:03, просмотров: 33998)
Вопрос по С для АВРок (и прочих малых МК) ВСЕМ СПАСИБО! На сделать побыстрому советов хватает. А главный вывод - надо обновить свои знания, ибо с 1993 года многое забылось (да и поменяться могло). Осталось найто что почитать, да ещё применительно к использованию С на микроконтроллерах Есть пара структур такого типа typedef struct {char sec,min,chas} TIME_DS3231; TIME_DS3231 TimeIndic,TimeAlarm; int iTimeIndic,iTimeAlarm; Хочется сделать две функции - преобразования TIME_DS3231 в int и наоборот Собственно тело написать не проблема, проблема передать параметры, чтобы это было оптимально для ресурсов МК Первая вроде бы просто int T2i (TIME_DS3231 TimeOrAlarm) {int i; i=TimeOrAlarm.sec && 0x0f; i+=(TimeOrAlarm.sec>>4)*10; i+=(TimeOrAlarm.min && 0x0f)*60; i+=(TimeOrAlarm.min>>4)*600; i+=(TimeOrAlarm.chas && 0x0f)*600*60; i+=(TimeOrAlarm.chas>>4)*600*60*10; return(i); } //вызов iTimeIndic=T2i(TimeIndic); В общем работает - но в стек 3 байта. Как думаете - вот так работать будет? int T2i (char *TimeOrAlarm) {int i; i=*TimeOrAlarm && 0x0f; i+=(*TimeOrAlarm>>4)*10; TimeOrAlarm++; i+=(*TimeOrAlarm && 0x0f)*60; i+=(*TimeOrAlarm>>4)*600; TimeOrAlarm++; i+=(*TimeOrAlarm && 0x0f)*600*60; i+=(*TimeOrAlarm>>4)*600*60*10; return(i); } //вызов iTimeIndic=T2i(TimeIndic); Вторая - вообще не ясно: Как вернуть результат, если он должен то в TimeIndic, то TimeAlarm ложиться? И как более оптимально. Вариант такой проверить не успел (и не смогу пару дней, а любопытсво гложет :) ): TIME_DS3231 i2T (int iTimeOrAlarm) {TIME_DS3231 i; TimeOrAlarm.sec = iTimeOrAlarm % 600;//для примера просто приведено //чего-то ещё TimeOrAlarm.chas=iTimeOrAlarm>>8;//для примера просто приведено return(TimeOrAlarm); } //вызов TimeIndic=i2T(iTimeIndic);