Спасибо!
Начало - это текущее значение rtc_timer на момент активации таймера. Что бы знать когда его останавливать.
А теперь про тонкости
У каждого таймера могут быть свои функции выполняемые по окончании работы таймера.
Как реализовать массив предопределенных таймеров?
{0,0,10,func1},
{0,0,15,func2},
и т.д.
Будем считать, что все функции заранее предопределены. Запускаются они без параметров.
P.S. а нафига функции, я тут подумал. а не проще ли ставить флаг, что таймер отработал? Количество таймеров фиксированно, их задачи заранее ясны. Меняется только время их запуска.
spongebob писал(а):
У каждого таймера могут быть свои функции выполняемые по окончании работы таймера.
Как реализовать массив предопределенных таймеров?
{0,0,10,func1},
{0,0,15,func2},
Если у Вас есть тип-таймер (как в моём примере - Timer), то массив этих типов создать не проблема :
Timer timers[]={
{0,0,0,func1}, //
{0,0,0,func2}, //
{0,0,0,0}, // В этом таймере нет пока функции, присваиваться будет потом при запуске таймера.
...........
};
spongebob писал(а):p.s. а кстати, а как определить функцию потом? это на будущее мне. и можно ли её передать как аргумент другой функции (которая активиурет таймер)?
Боюсь, что я не понял
Допустим у меня есть пяток функций func1() .. func5().
И в зависимости от каких-либо событий мне нужно тому или иному таймеру присвоить данную фунцкию при инициализации.
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}
},
и т.д.
функции m_time_d, m_time_u, m_temp_d, m_temp_u занимаются тем, что меняют значения различных переменных в зависимости от пункта меню (по данным curmenuitem.x и curmenuitem.y)
это пришло мне в голову быстро - реализовал (возможно так и оставлю, но на будущее хотелось бы как-то облагородиться)
В структуру добавить указатель на переменную которой нужно управлять (или вообще никакой переменной). Переменные могут быть разных типов (ну или одного, если нет возможности делать разного)
и желательно, что бы можно было в качестве этой переменной использовать элемент массива.
Доброго времени суток. Компилятор HI-TECH Software\PICC\9.71a. Пытаюсь использовать библиотечные функции чтения/записи ЕЕПРОМ.
В функции main есть бесконечный цикл
Спойлер
Пока_без_кота писал(а):
Прощу прощению за такие тупые вопросы, просто в книжке много всяких заумностей, а вот доступного объяснения такого поведения компилятора я не нахожу
Вы смотрите дизасм, причем собственного файла. А библиотечные функции находятся В ДРУГОМ. Поэтому нужно смотреть содержимое Program Memory, либо включить симулятор и по шагам зайти ВНУТРЬ библиотечной функции, тогда среда откроет дизасм искомого участка.
Спасибо! Почитал и напросился следующий код:
проверяю был ли сброс по питанию, снижению напряжения, или ресет. Но почему то код выполняется один раз.. Правда сброс происходит в очень короткое время примерно раз в пол секунды и вот этого не отслеживается..
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = ON // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)