i = read_adc();
lcd_gotoxy ( 5, 1);
lcd_putc(( (i/100)%10) +0x30);
lcd_putc(( (i/10 )%10) +0x30);
lcd_putc(( (i/1 )%10) +0x30);
delay_ms ( 10);
вот так получилось, спасибо за ответ
буду дальше разбираться
Код: Выделить всё
if(keys[VK_UP])
{
tst[qd].set_pos(qd_s[qd].qd_x, qd_s[qd].qd_y+=0.1f);
}
if(keys[VK_DOWN])
{
tst[qd].set_pos(qd_s[qd].qd_x, qd_s[qd].qd_y-=0.1f);
}
if(keys[VK_LEFT])
{
tst[qd].set_pos(qd_s[qd].qd_x-=0.1f, qd_s[qd].qd_y);
}
if(keys[VK_RIGHT])
{
tst[qd].set_pos(qd_s[qd].qd_x+=0.1f, qd_s[qd].qd_y);
}
if(keys[VK_F2])
{
qd -= 1;
}
if(keys[VK_F3])
{
qd += 1;
}
имхо, плохой код. бессмысленное дублирование кучи операций. нечитаемость полная. опять же, имхо, надо было бы завести локальные переменные для приращения координат, присвоить им значение в switch-е, а затем единожды изменить координаты и передать их в метод. как-то так...DX168B писал(а):Эх.... Бывают и похлеще записи.
Код: Выделить всё
for(int j = 0 ; j < sizeof(tst)/sizeof(*tst) ; j++) //на примере массива со статическим размером.
{
tst[j].qd_view(); //Перебираем элементы
}
Код: Выделить всё
InterlockedIncrement(&CountObjekt);
pMyClass =new CMyClass();
pMyClass->Create(bla bla bla
pMyClass->m_num=CountObjekt;
Map_My.SetAt(CountObjekt,pMyClass);
Нет, Есть массив объектов, созданный в основном потоке и есть обращения к объектам через их встроенные методы из других потоков. Никаких падений не происходит.urry писал(а):я тоже ничего не понял. Есть объекты, разнесенные по потокам - и глобальный массив, код обращения к которому не защищен хотя бы критической секцией ? А что будет , если обращение будет приходить в массив от 2 объектов одновременно? Падение ?
Я говорил о динамическом массиве объектов и о массиве структур. Пока сделано статически, так как пока кручусь между std::vector и class MyClass a; a *ps = new a;urry писал(а):И причем здесь статический массив, если говорим о динамическом ?
Попробую и так. Пока перебираю варианты.urry писал(а): Я бы не изобретал велосипед, а использовал при создании объекта класса MyObject карты, куда бы заносил номер создаваемого объекта и указатель на созданный класс.Код: Выделить всё
CountObjekt++; pMyClass =new CMyClass(); pMyClass->Create(bla bla bla pMyClass->m_num=CountObjekt; Map_My.SetAt(CountObjekt,pMyClass);
levaclaus писал(а): скидывайте конечно)
Код: Выделить всё
void f_Clk(void) {
PORT_OUT|=_BV(Clk_pin);
PORT_OUT&=~_BV(Clk_pin);
}
void f_strobe(void) {
PORT_OUT|=_BV(Strobe_pin);
PORT_OUT&=~_BV(Strobe_pin);
}
void f_shift_reg(unsigned char gear) {
for (char i=0;i<=7;i++){
(gear&0x01)? PORT_OUT|=_BV(D_pin): PORT_OUT&=~_BV(D_pin);
f_Clk();
gear>>=1;
};//for
f_strobe();
}//f_shift_reg десять рублей в моем магазинеlevaclaus писал(а):Но регистр стоит денег,
компилятор указывает вот на эту строчку впрогеError: C:\Documents and Settings\User\Рабочий стол\6\6.c(25): missing '('
с чем это может быть связано ?var = MIN_VAL; // начальное значение числа пусть будет минимальным
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
#define PC4 4
#define PC5 5
#define DIG1 (1<<PC4)
#define DIG2 (1<<PC5)
#define DELTA 1
#define MAX_VAL 99
#define MIN_VAL 0
char index;
char number[2];
int delta_value, var;
var = MIN_VAL; // начальное значение числа пусть будет минимальным
delta_value = DELTA; // приращение по умолчанию
void output(int var)
{
number[0]=var%10;
number[1]=var/10;
}
// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
PORTC=0;
PORTC = number[index & 1]; // вывели в дешифратор нужный код
PORTC |= index & 1 ? DIG2 : DIG1; // включили нужный индикатор
index++; // готовим номер разряда/индикатора для следующего прерывания
}
void main(void)
{
PORTC=0x00;
DDRC=0x7F;
PORTD=0xFF;
DDRD=0x00;
TCCR1A=0x00;
TCCR1B=0x0A;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x02;
OCR1AL=0x71;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// Global enable interrupts
#asm("sei")
while (1)
{
output(var); // вывели текущее значение числа
delay_ms(1000);
if((var >= MAX_VAL)||(var<= MIN_VAL)) {delta_val = - delta_val;};
var += delta_val; // изменяем число
};
}
Инициализация глобальных и статических переменных должна быть при объявлении:FreshMan писал(а):компилятор указывает вот на эту строчку впрогеvar = MIN_VAL; // начальное значение числа пусть будет минимальным
Код: Выделить всё
...
int var = MIN_VAL; // начальное значение числа пусть будет минимальным
int delta_value = DELTA; // приращение по умолчанию
...
Объявлены в одном месте, проинициализированы в другом...FreshMan писал(а):BorisSPB, я не понял васу меня же и так там все обявлено...........
Код: Выделить всё
//
//Это обявление
//
int delta_value, var;
//
//Это инициализация
//
var = MIN_VAL; // начальное значение числа пусть будет минимальным
delta_value = DELTA; // приращение по умолчанию
Код: Выделить всё
#define DIG1 (1<<PC4)
#define DIG2 (1<<PC5)
#define DELTA 1
#define MAX_VAL 99
#define MIN_VAL 0
char index;
char number[2];
int var = MIN_VAL; // начальное значение числа пусть будет минимальным
int delta_value = DELTA; // приращение по умолчанию
Да. Я подкорректировал предыдущий ответ чтоб было понятнееFreshMan писал(а):вот так ?
Какие?FreshMan писал(а):но в таком случае при компиляции выдается 2 ошибки
с указанием на вот эту строчкуError: C:\Documents and Settings\User\Рабочий стол\6\6.c(75): undefined symbol 'delta_val'
Код: Выделить всё
if((var >= MAX_VAL)||(var<= MIN_VAL)) {delta_val = - delta_val;};
с указанием на этуError: C:\Documents and Settings\User\Рабочий стол\6\6.c(77): undefined symbol 'delta_val'
Код: Выделить всё
var += delta_val; // изменяем число Объявлено delta_value , а используется delta_valError: C:\Documents and Settings\User\Рабочий стол\6\6.c(75): undefined symbol 'delta_val'