Вт янв 23, 2018 11:14:38
Ярослав555 писал(а):Было у нас такое на фирме, видали уже: добавить паузу в алгоритм - не! Не вазможна! Так и попрощались с гениальным кадром с многолетним опытом.
Вт янв 23, 2018 11:30:24
Вт янв 23, 2018 12:51:19
Вт янв 23, 2018 15:40:22
Ср янв 24, 2018 14:51:02
Ср янв 24, 2018 16:19:58
лично меня выбешивает, если кто-то бравирует "знанием" a+++b и тому подобных "кружев", которые допускает Си. абсолютно бессмысленные знания, примерно как умение шевелить ушами. даже, наверное, вредные знания, если задуматься о том, что код не для одного человека написан.СКАЗОЧНИК писал(а):Прикольно и жутко
Чт янв 25, 2018 01:41:02
void TouchScan (void) {
push = 0;
DDRA = 0b10100000; // X_minus, X_plus на выход, сажаем Х пленку на землю
PORTA = 0b01011111; // остальные выводы как входы с подтяжкой
delay_ms(1);
if (read_adc(6) < 100) { // если есть нажатие ( проверяем на 0 вывод Y- )
push = 1;
press_count++;
if (press_count > 1) {
press = 1;
}
PORTA = 0b01111111; // cчитываем X координату, X_minus на землю, X_plus на +5 вольт
delay_ms(1);
x = abs((int) (232 - 0.276*read_adc(4)));
// записываем значения АЦП по 2-м точкам
// сопоставляем координаты
// и через уравнение прямой по 2-м точкам находим промежуточные значения нажатия
// x = 232 - 0.276*ADC
// y = 0.25*ADC - 67.5
DDRA = 0b01011111; // cчитываем Y координату, Y_minus, Y_plus на выход
PORTA = 0b10111111; // Y_minus на землю, Y_plus на +5 вольт
delay_ms(1);
y = abs((int) (0.25*read_adc(5)-67.5));
}
else {
press = 0;
press_count = 0;
}
}
void touchRead(void)
{
// This func is to be fired each ~1ms
// if TFT shared pins used for polling,
// any usual display operations are to be disabled till 'busy' flag clears
push = 0;
static bool c; // keeping state
unsigned static char stage;
switch(stage)
{
case 1:
busy = 1; c = 0; coords = 0;
TOUCHPIN_D = (TOUCHPIN_D & ~YP) | XM;
TOUCHPORT_D = (TOUCHPORT_D & ~XM) | YP;
TOUCHPIN_A = (TOUCHPIN_A & ~YM) | XP;
TOUCHPORT_A = (TOUCHPORT_A & ~XP) | YM;
break;
case 2:
if(read_adc(CH0) < 100)
{
c = 1; push = 1;
if (++touchcount > 1) { keypress = 1; }
TOUCHPIN_D = (TOUCHPIN_D & ~YP) | XM;
TOUCHPORT_D = (TOUCHPORT_D & ~XM) | YP;
TOUCHPIN_A = (TOUCHPIN_A & ~YM) | XP;
TOUCHPORT_A |= XP | YM;
} else { busy = 0; touchRestore(); }
break;
case 3:
if(c) {
coords = (long)read_adc(CH0) << 16;
TOUCHPIN_D = (TOUCHPIN_D & ~XM) | YP;
TOUCHPORT_D |= YP | XM;
TOUCHPIN_A = (TOUCHPIN_A & ~XP) | YM;
TOUCHPORT_A = (TOUCHPORT_A & ~YM) | XP;
}
break;
case 4:
if(c)
coords |= read_adc(CH1);
else {
c = 0;
keypress = 0;
touchcount = 0;
}
busy = 0; touchRestore();
break;
} // end switch
if(++stage > TOUCH_INTERVAL) { stage = 0; } // do nothing for next n iterations
}
Чт янв 25, 2018 09:07:36
Чт янв 25, 2018 14:38:02
Чт янв 25, 2018 14:49:11
//==================
void logo (void)
{
u08 _logo = 0;
u08 logo_timer = 0;
u08 cnt = 0;
u08 i;
soft_timer ST_LOGO;
while (1)
{
__watchdog_reset ();
switch (_logo)
{
case 0:
soft_spi_init ();
set_leds_buf (0);
out_dsp_buf (0);
set_soft_timer (ST_LOGO, OUTPUTS_PERIOD, OUTPUTS_PERIOD);
_logo = 1;
break;
case 1:
if (handle_soft_timer (ST_LOGO))
{
if (++logo_timer >= LOGO_STEP)
{
logo_timer = 0;
struct tab_logo_t __flash *ptr = tab_logo;
ptr += cnt;
if (ptr -> leds == 0xFF && ptr -> segments == 0xFF)
{
set_buzzer_mode (BUZZER_TEST);
_logo = 2;
break;
}
set_leds_buf (ptr -> leds);
for (i = 0; i < MAX_LED_IND; i++)
dsp_buf [i] = ptr -> segments;
cnt++;
}
i = 0;
soft_spi_transf_buf [i++] = get_leds_buf ();
for (u08 j = 0; j < MAX_LED_IND; j++)
soft_spi_transf_buf [i++] = dsp_buf [j];
for (i = 0; i < SOFT_SPI_BYTES; i++)
soft_spi_transf (i);
strob_latch_out ();
}
break;
case 2:
if (proc_buzzer ())
return;
break;
}
}
}
//==================
//==================
__C_task main (void)
{
wdt_enable (WDTO_15_MS);
sleep_mode_init ();
init_soft_timers ();
Init_Events ();
io_init ();
__enable_interrupt ();
#ifdef __LOGO__
logo ();
#endif
while (1)
{
__watchdog_reset ();
proc_device ();
kbd_drv ();
info_service ();
proc_outputs ();
Process_Events ();
}
}
//==================
Пт янв 26, 2018 08:49:41
Пт янв 26, 2018 13:35:08
Пт янв 26, 2018 14:15:19
Пт янв 26, 2018 15:32:13
Что значит "как обычно"? В приведённом коде я ничего необычного не вижу. Простая функция инициализации вне основного цикла - так, наверное, все делают. Коль скоро эта функция начинается и завершается, никаких лишних переменных нигде не останется.Demiurg писал(а):И я вам привел пример с куском кода, который работает только при инициализации. Если его написать как обычно, останутся переменные, которые потом нигде не используются.
Пт янв 26, 2018 15:42:21
а как иначе в Си? без глобальных функций для модуля очень тяжко, если вообще возможно... это глобальные для проекта переменные можно исключить при известном уровне мазохизма...WiseLord писал(а):если Вы имели в виду, что многие любят переменные вне функций - в смысле, глобальные для модуля - то это другое дело, это уже плохой стиль программирования.
Пт янв 26, 2018 16:29:40
Пт янв 26, 2018 16:46:30
Пт мар 02, 2018 22:41:02
Ср мар 07, 2018 16:08:45
Ср мар 07, 2018 18:11:57
я верно понял, что эти килобайты - это речь об ОЗУ? вы название темы давно перечитывали? или простор ARM голову вскружил?philosoraptor писал(а):позволяет сделать на паре кБ то, что многие привыкли делать на 32-64 кБ.