Хотя ещё проще, думаю, без цикла сразу всё считать:
Код: Выделить всё
eeprom_read_block(alarm, cp_alarm, sizeof(alarm));Код: Выделить всё
eeprom_read_block(alarm, cp_alarm, sizeof(alarm));Код: Выделить всё
eeprom_update_byte (&cp_time_format, time_format);
eeprom_update_byte (&cp_day_of_week, day_of_week);
for(i=1; i<7; i++){
eeprom_update_block( &alarm[i], &cp_alarm[i], sizeof(alarm) );
}
Код: Выделить всё
for(i=1; i<7; i++){
eeprom_update_block( &alarm[i], &cp_alarm[i], sizeof(alarm) );
}
eeprom_update_byte (&cp_time_format, time_format);
eeprom_update_byte (&cp_day_of_week, day_of_week);
маленькое уточнениеWiseLord писал(а): Хотя ещё проще, думаю, без цикла сразу всё считать:Код: Выделить всё
eeprom_read_block(alarm, cp_alarm, sizeof(alarm));
Код: Выделить всё
void eeprom_read_block (void *__dst, const void *__src, size_t __n);
Код: Выделить всё
eeprom_read_block(alarm, cp_alarm, sizeof(alarm));Код: Выделить всё
eeprom_read_block(&alarm[0], &cp_alarm[0], sizeof(alarm));Код: Выделить всё
--- No source file -------------------------------------------------------------
00000000 RJMP PC+0x0013 Relative jump
00000001 RJMP PC+0x0022 Relative jump
00000002 RJMP PC+0x0021 Relative jump
00000003 RJMP PC+0x0020 Relative jump
00000004 RJMP PC+0x001F Relative jump
00000005 RJMP PC+0x001E Relative jump
00000006 RJMP PC+0x001D Relative jump
00000007 RJMP PC+0x001C Relative jump
00000008 RJMP PC+0x001B Relative jump
00000009 RJMP PC+0x001A Relative jump
0000000A RJMP PC+0x0019 Relative jump
0000000B RJMP PC+0x0018 Relative jump
0000000C RJMP PC+0x0017 Relative jump
0000000D RJMP PC+0x0016 Relative jump
0000000E RJMP PC+0x0015 Relative jump
0000000F RJMP PC+0x0014 Relative jump
00000010 RJMP PC+0x0013 Relative jump
00000011 RJMP PC+0x0012 Relative jump
00000012 RJMP PC+0x0011 Relative jump
00000013 CLR R1 Clear Register
00000014 OUT 0x3F,R1 Out to I/O location
00000015 LDI R28,0x5F Load immediate
00000016 LDI R29,0x04 Load immediate
00000017 OUT 0x3E,R29 Out to I/O location
00000018 OUT 0x3D,R28 Out to I/O location
00000019 LDI R18,0x00 Load immediate
0000001A LDI R26,0x60 Load immediate
0000001B LDI R27,0x00 Load immediate
0000001C RJMP PC+0x0002 Relative jump
0000001D ST X+,R1 Store indirect and postincrement
0000001E CPI R26,0x61 Compare with immediate
0000001F CPC R27,R18 Compare with carry
00000020 BRNE PC-0x03 Branch if not equal
00000021 RCALL PC+0x0003 Relative call subroutine
00000022 RJMP PC+0x0077 Relative jump
00000023 RJMP PC-0x0023 Relative jump
--- C:\Users\st\Documents\Atmel Studio\6.1\USART8ATmega2\USART8ATmega2\Debug/.././USART8ATmega2.c
{
00000024 PUSH R28 Push register on stack
00000025 PUSH R29 Push register on stack
00000026 IN R28,0x3D In from I/O location
00000027 IN R29,0x3E In from I/O location
--- C:\Users\st\Documents\Atmel Studio\6.1\USART8ATmega2\USART8ATmega2\Debug/.././USART8ATmega2.c
PORTD|=(1<<PD1);
00000028 LDI R24,0x32 Load immediate
00000029 LDI R25,0x00 Load immediate
0000002A LDI R18,0x32 Load immediate
0000002B LDI R19,0x00 Load immediate
0000002C MOVW R30,R18 Copy register pair
0000002D LDD R18,Z+0 Load indirect with displacement
0000002E ORI R18,0x02 Logical OR with immediate
0000002F MOVW R30,R24 Copy register pair
00000030 STD Z+0,R18 Store indirect with displacement
UCSRB|=(1<<TXEN);
00000031 LDI R24,0x2A Load immediate
00000032 LDI R25,0x00 Load immediate
00000033 LDI R18,0x2A Load immediate
00000034 LDI R19,0x00 Load immediate
00000035 MOVW R30,R18 Copy register pair
00000036 LDD R18,Z+0 Load indirect with displacement
00000037 ORI R18,0x08 Logical OR with immediate
00000038 MOVW R30,R24 Copy register pair
00000039 STD Z+0,R18 Store indirect with displacement
UCSRC|=(1<<URSEL);
0000003A LDI R24,0x40 Load immediate
0000003B LDI R25,0x00 Load immediate
0000003C LDI R18,0x40 Load immediate
0000003D LDI R19,0x00 Load immediate
0000003E MOVW R30,R18 Copy register pair
0000003F LDD R18,Z+0 Load indirect with displacement
00000040 ORI R18,0x80 Logical OR with immediate
00000041 MOVW R30,R24 Copy register pair
00000042 STD Z+0,R18 Store indirect with displacement
UCSRC|=(1<<UCSZ1)|(1<<UCSZ0);
00000043 LDI R24,0x40 Load immediate
00000044 LDI R25,0x00 Load immediate
00000045 LDI R18,0x40 Load immediate
--- C:\Users\st\Documents\Atmel Studio\6.1\USART8ATmega2\USART8ATmega2\Debug/.././USART8ATmega2.c
00000046 LDI R19,0x00 Load immediate
00000047 MOVW R30,R18 Copy register pair
00000048 LDD R18,Z+0 Load indirect with displacement
00000049 ORI R18,0x06 Logical OR with immediate
0000004A MOVW R30,R24 Copy register pair
0000004B STD Z+0,R18 Store indirect with displacement
UCSRC&=~(1<<UMSEL);
0000004C LDI R24,0x40 Load immediate
0000004D LDI R25,0x00 Load immediate
0000004E LDI R18,0x40 Load immediate
0000004F LDI R19,0x00 Load immediate
00000050 MOVW R30,R18 Copy register pair
00000051 LDD R18,Z+0 Load indirect with displacement
00000052 ANDI R18,0xBF Logical AND with immediate
00000053 MOVW R30,R24 Copy register pair Код: Выделить всё
uint8_t par1;
int8_t par2;
func(par1);
func((uint8_t)par2);Встречный вопрос. Если переменная типа int8_t имеет текущее значение -1 (минус единица), то что Вы хотите передать в функцию?FreshMan писал(а):параметры типа uint8_t или int8_t ?
А он и будет в функции интерпретироваться в соответствии с описанием типа в прототипе функции. То есть, как int8_tFreshMan писал(а):uint8_t х;
void set_value (int8_t *var, uint8_t max, uint8_t min); - прототип
надо сделать так
set_value (&x, 100, 10);
но чтобы х в ф-ции был int8_t
А беззнаковая переменная по определению не может принимать отрицательных значений.FreshMan писал(а):переменная uint8_t х никогда не принимкает отрицательные значения
FreshMan писал(а):делаю ее типа int8_t дабы узнать когда она станет меньше 0 и присвоить ей макс значение
Код: Выделить всё
uint8_t *x;
if(*x) (*x)--;
else *x = MAX_VAL;Насколько я понял Вашу цель, то код такой:FreshMan писал(а):мне надо, к примеру сделать вызов с такими параметрами set_value (&x, 100, 0);
Код: Выделить всё
#define MY_SET_VALUE(var,min,max) var=(var<=min)?max:var-1
void main(void)
{
uint8_t x;
...
MY_SET_VALUE(x,10,100);
}Код: Выделить всё
void set_value (int8_t *var, uint8_t max, uint8_t min){
if ( button_1) {
if (++*var > max) *var = min;
}
if (button_2) {
if (--*var < min) *var = max;
}
}
Код: Выделить всё
if(x) x--; // если х не равен нулю - уменьшаем его
else x = max; // а если равен - делаем максимальнмВместоFreshMan писал(а): а вот когда его надо регулировать от 100 до 0 (ВКЛЮЧИТЕЛЬНО)
Код: Выделить всё
if (++*var > max) *var = min;
if (--*var < min) *var = max;
Код: Выделить всё
if ((*var)++ >= max) *var = min;
if ((*var)-- <= min) *var = max;
Если совсем по-простому, то представляешь младшие 8 бит как дробную часть, а старшие - как целую. Т.е. 512 - это 2, 64 - это 0.25, 512 + 64 - это 2.25. Тогда 0.55 - это 141 (0.55 / (1/256)). Тут уже будет погрешность, но можно под дробную часть выделить любое количество бит, например, 16. Теперь берем любое число, пусть это будет 7, множим на 141, получаем 987, добавляем 128(0.5), чтобы округлить в большую сторону, делим на 256, ответ 4(должно быть 3.85).