Спасибо! Начало - это текущее значение rtc_timer на момент активации таймера. Что бы знать когда его останавливать.
А теперь про тонкости У каждого таймера могут быть свои функции выполняемые по окончании работы таймера. Как реализовать массив предопределенных таймеров? {0,0,10,func1}, {0,0,15,func2}, и т.д. Будем считать, что все функции заранее предопределены. Запускаются они без параметров.
P.S. а нафига функции, я тут подумал. а не проще ли ставить флаг, что таймер отработал? Количество таймеров фиксированно, их задачи заранее ясны. Меняется только время их запуска.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Ср фев 01, 2017 14:48:06
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
spongebob писал(а):
У каждого таймера могут быть свои функции выполняемые по окончании работы таймера. Как реализовать массив предопределенных таймеров? {0,0,10,func1}, {0,0,15,func2},
Если у Вас есть тип-таймер (как в моём примере - Timer), то массив этих типов создать не проблема :
Код:
Timer timers[10];
Если нужно сразу с инициализацией, то :
Код:
Timer timers[]={ {0,0,0,func1}, // {0,0,0,func2}, // {0,0,0,0}, // В этом таймере нет пока функции, присваиваться будет потом при запуске таймера. ........... };
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Боюсь, что я не понял Допустим у меня есть пяток функций func1() .. func5(). И в зависимости от каких-либо событий мне нужно тому или иному таймеру присвоить данную фунцкию при инициализации.
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 есть бесконечный цикл Спойлер
Код:
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 и возврат я, не знаю....
Добавляю после записи в ЕЕПРОМ один "nop" и получаю Спойлер
Прощу прощению за такие тупые вопросы, просто в книжке много всяких заумностей, а вот доступного объяснения такого поведения компилятора я не нахожу
Вы смотрите дизасм, причем собственного файла. А библиотечные функции находятся В ДРУГОМ. Поэтому нужно смотреть содержимое 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)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения