Ср фев 01, 2017 13:03:11
Аlex писал(а):Ну, примерно как то так :
Ср фев 01, 2017 13:29:26
spongebob писал(а):Как реализовать массив предопределенных таймеров?
{0,0,10,func1},
{0,0,15,func2},
void func1(void);
[...]
struct {
[...]
void (*tmrFuncPtr)(void);
} a[] = {
{ 0, 0, 10, func1 },
[...]
};
void func1(void)
{
[...]
}
Ср фев 01, 2017 13:44:25
Siarzhuk писал(а):так сойдёт?
Ср фев 01, 2017 14:48:06
spongebob писал(а):У каждого таймера могут быть свои функции выполняемые по окончании работы таймера.
Как реализовать массив предопределенных таймеров?
{0,0,10,func1},
{0,0,15,func2},
Timer timers[10];
Timer timers[]={
{0,0,0,func1}, //
{0,0,0,func2}, //
{0,0,0,0}, // В этом таймере нет пока функции, присваиваться будет потом при запуске таймера.
...........
};
Ср фев 01, 2017 15:59:04
Ср фев 01, 2017 16:42:57
spongebob писал(а):p.s. а кстати, а как определить функцию потом? это на будущее мне. и можно ли её передать как аргумент другой функции (которая активиурет таймер)?
typedef void (*TimerProc)(void);
void SetHandler(TimerProc proc)
{
[...]
}
void Handler(void)
{
[...]
}
int main ([...])
{
[...]
SetHandler(Handler);
[...]
}
Чт фев 02, 2017 09:44:53
Чт фев 02, 2017 13:23:05
typedef struct{
unsigned enabled :1;
unsigned start :1;
unsigned long time;
void (*p_func)();
}Timer;
Timer timer[5]; // Массив таймеров
void func1(void){ // Вызываемая функция
}
............
............
timer[0].p_func = func1; // Присваиваем первому таймеру функцию func
............
............
timer[0].p_func(); // Вызов функции первого таймера
............
............
Сб фев 11, 2017 21:00:15
struct _curmenuitem { // текущая позиция
unsigned char x:4;
unsigned char y:4;
} curmenuitem;
const struct _menuitem { // пункт меню
const char *name; // название пункта
void (*mL)(void); // действие при нажатии кнопки Влево
void (*mR)(void); // -- Вправо
void (*mU)(void); // -- Вверх
void (*mD)(void); // -- Вниз
} menuitem[10][3] = { тут перечисляются пункты
{
{"Var 1",m_prev,m_next,m_null,m_child},
{"Time 1",m_time_d,m_time_u,m_parent,m_child},
{"Temp 1",m_temp_d,m_temp_u,m_parent,m_null}
},
и т.д.
Вт фев 14, 2017 11:25:22
Вт фев 14, 2017 12:44:00
Вт фев 14, 2017 21:25:36
while (1)
{
asm("clrwdt");
eeprom_read(0);
eeprom_write(0,1);
}
27: while (1)
28: {
29: asm("clrwdt");
02F 0064 CLRWDT
30: eeprom_read(0);
030 3000 MOVLW 0
031 2037 CALL 0x37
31: eeprom_write(0,1);
032 018E CLRF 0xe
// дальше до адреса 038 пустота, куда подевался код функции eeprom_write и возврат я, не знаю....
27: while (1)
28: {
29: asm("clrwdt");
02F 0064 CLRWDT
30: eeprom_read(0);
030 3000 MOVLW 0
031 2038 CALL 0x38
31: eeprom_write(0,1);
032 018E CLRF 0xe
033 0A8E INCF 0xe, F
034 3000 MOVLW 0
035 200C CALL 0xc
32: asm("nop");
036 0000 NOP
// дальше до адреса 038 пустота
Ср фев 15, 2017 06:39:32
Ср фев 15, 2017 07:26:58
Пока_без_кота писал(а):Прощу прощению за такие тупые вопросы, просто в книжке много всяких заумностей, а вот доступного объяснения такого поведения компилятора я не нахожу
Пн авг 07, 2017 10:29:57
Пн авг 07, 2017 11:02:42
Пн авг 07, 2017 11:29:11
Пн авг 07, 2017 11:39:33
Пн авг 07, 2017 12:54:51
if ((!PCONbits.nRMCLR)||(!PCONbits.nBOR)||(!PCONbits.nPOR))
{
PCONbits.nRMCLR = 1;
PCONbits.nBOR = 1;
PCONbits.nPOR = 1;
}
Пн авг 07, 2017 14:08:47
Ы?#pragma config WDTE = ON // Watchdog Timer Enable (WDT disabled)