Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.97/58: Рейтинг темы: голосов - 58, средняя оценка - 4.97
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
1

Первый проект!

23.11.2012, 14:12. Просмотров 10560. Ответов 30
Метки нет (Все метки)

Вобщем собрал схемку, написал программу на процессор. Пытаюсь отлаживать в АВР студии, но что-то не так получается. Помогите отыскать ошибки. Так-то проект компилируется без ошибок, но при отладке программа работает не так как планировалось.
Заметил, что функции «BRGE» «BRMI» работают как-то не так. Допустим результат АЦП сначала > 200 следовательно програмка переходит на метку m1, при изменении результата в регистре ADCH до 150 должна переходить на метку m2, но почему-то переход повторяется на метку m1. Может что-то с регистром SREG нужно делать, потому что сравниваю 2 раза подряд практически и может какие флаги от предыдущего сравнения в нем остаются и поэтому осуществляется неверный переход. Не совсем представляю картину, как выставляются в этом регистре флаги: при новой операци ониполностью обновляются или как? В общем жду подсказок. Алгоритм и листинг программмы привожу.


А здесь сама программка
.include "tn45def.yms"

.def temp = r18
.def flag = r19
.def counter1 = r20
.def counter2 = r21
.CSEG

;***********************
; Объявление прерываний
;***********************
rjmp RESIT ; Riset Homdler
rjmp EXT_INT0 ; IRQ0 Homdler
reti ; rjmp PCINT0
reti ; rjmp TYM1_COMPA
rjmp TYM1_OVF ; rjmp TYM1_OVF
reti ; rjmp TIM0_OVF
reti ; rjmp EE_RDY
reti ; rjmp ANA_COMP
rjmp ADC_ACP ; ADC Conversion Homdler
reti ; rjmp TYM1_COMPB
reti ; rjmp TIM0_COMPA
reti ; rjmp TIM0_COMPB
reti ; rjmp WDT
reti ; rjmp USI_START
reti ; rjmp USI_OVF

;***********************
; Обработчики прерываний
;***********************

EXT_INT0: ; Прерывание по сигналу ТЕСТ
sbi PORTB, PB4
in temp, TCCR1
sbr temp, CS12
out TCCR1, temp ; Запуск таймера Т1 с делителем 8
reti

ADC_ACP:
in temp, ADCH
cpi temp, 0b11001000
BRGE m1
cpi temp, 0b01100100
BRGE m2
rjmp m3
m1:
sbr flag, 0b00000100
rjmp m3
m2:
sbr flag, 0b00000010
rjmp m3
m3:
sbr flag, 0b00000001
reti

TYM1_OVF:
cbi PORTB, PB4
in temp, TCCR1
cbr temp, CS12
out TCCR1, temp ; Останов таймера Т1 с делителем 8
clr temp
out TCCR0A, temp
out TCCR0B, temp ; Остановить ШИМ Т0
reti

;***********************
; Начало программы инициализации
;***********************

RESIT:
ldi r16, low(ROMEND) ; Инициализация стека
ldi r17, high(ROMEND)
out SPL, r16
out SPH, r17

ldi temp, 0b00010010
out DDRB, temp ; PB1 и PB4 как выходы,
ldi temp, 0b00000000
out PORTB, temp ; все порты в 0. Те котрорые на вход без подтягивающих резисторов

ldi temp, 0b00000010 ; настройка прерывания по заднему фронту: биты ISC01 в 1 и ISC00 в 0
out MCUCR, temp
in temp, GIMSK ; разрешение прерывания от INT0 мы в регистре gimsk меняем только один бит, а остальные остаются нетронутыми
sbr temp, 0b01000000
out GIMSK, temp

ldi temp, 0b11111010 ; Задаем сравниваемое значение 250 циклов
out OCR1C, temp
clr temp ; Инициализация таймера счетчика Т1
out TCNT1, temp ; очистка счетного регистра таймера/счетчика Т1
ldi temp, 1<<CTC1 ; Режим СТС по совпадению с содержимым регистра OCR1C
out TCCR1, temp ; Таймер также отключен от выводов МК (0<<COM1A1)|(0<<COM1A0)
clr temp
out GTCCR, temp

ldi temp, 0b00100011 ; (0<<REFS1)|(0<<REFS0)|(1<<ADLAR)|(0<<REFS2)|(0<<MUX3)|(0<<MUX2)|(1<<MUX1)|(1<<MUX0) Разрешение АЦП на PB3 со сдвигом результата в старший байт регистра данных
out ADMUX, temp
ldi temp, 0b10101110 ; (1<<ADIM)|(0<<ADSC)|(1<<ADATE)|(0<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)
out ADCSRA, temp ; коэффициент деления частоты 32
clr temp ; (0<<BIN)|(0<<ACME)|(0<<IPR)|(0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0)
out ADCSRB, temp ; Режим непрерывного преобразования
ldi temp, 1<<ADC3D ; Отключаем цифровой буфер ADC3
out DIDR0, temp

sei ; глобально разрешаю прерывания

in temp, ADCSRA
sbr temp, 1<<ADSC
out ADCSRA, temp ; Запускаем преобразование АЦП

;***********************
; главная программа
;***********************

main:
sbrs flag, 0
rjmp main
sbrs flag, 2
rjmp m4
yms counter1
clr counter2
cpi counter1, 40
BRMI m6
rcall OTKL
rjmp m6
m4:
clr counter1
sbrs flag, 1
rjmp m5
yms counter2
cpi counter2, 9
BRMI m6
rcall OK
rjmp m6
m5:
clr counter2
m6:
cbr flag, 0b00000001
rjmp main

OTKL:
sbi PORTB, PB1
ret

OK:
clr temp ; Инициализация таймера счетчика Т0
out TCNT0, temp ; Очистка счетного регистра таймера/счетчика Т0
out TIMSK, temp ; Запрет прерываний таймера
ldi temp, 0b01111111 ; Задаем сравниваемое значение
out OCR0B, temp
ldi temp, 0b00100011
out TCCR0A, temp ; Работает в режиме ШИМ 4 кГц
ldi temp, 0b00000001
out TCCR0B, temp ; Запуск
ret
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2012, 14:12
Ответы с готовыми решениями:

Первый проект, помогите пожалуйста!
Пытаюсь сейчас смоделировать мигающий светодиод в Proteus-е, но почему-то в AVRstudyo все нормально...

Первый Arduino проект
Доброго времени суток) На днях решил заняться Ардуино, заказал платы на али по совету знакомого....

Первый проект в Keil
Здравствуйте все. Создал первый проект в Keil для ARM как написано в мануале (keil.com). При...

Первый большой проект на Qt
Здравствуйте. Я бы хотел попробовать свои силы на этом замечательном фреймворке. Планирую сделать...

Первый проект на Eclipse
Проблема следующая, есть в железе STM32F030F4P6, он прошивается и даже лампочку можно зажечь. Но...

30
SirkVOK
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 177
23.11.2012, 17:47 2
Может я не внимательно прочитал... Но Если вы хотите что-то предпринять при значении менее 150, то наверное нужно использовать BRLO m2.

Офф.... Я сам не так давно начал заниматься с МК..., но вот приучить себя начинать с построения алгоритма не могу, хотя это уже 50% успеха.
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
23.11.2012, 18:48 3
Цитата Сообщение от SirkVOK
Может я не внимательно прочитал... Но Если вы хотите что-то предпринять при значении менее 150, то наверное нужно использовать BRLO m2.
Нет, при значении >= 200 делаю одно , при >= 100 но < 200 делаю другое, при < 100 третье (цифры эти конечно условны пока).
По алгоритму это выглядит примерно так:
Сравнил значение полученное из ADCH АЦП c 200 и если больше то иду по первой метке
Если меньше, то сравниваю с 100 и если больше ста (т.е. 100<=ADCH<200) иду по второй метке, ну и если ADCH<100 то по третьей.
0
Th0r
0 / 0 / 0
Регистрация: 24.10.2015
23.11.2012, 19:05 4
brge - для чисел со знаком, в байте от -128 до 127, а сравнивается с числом 200 - при сравнении будет преобразовано в -56
0
23.11.2012, 19:05
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
23.11.2012, 23:33 5
При вызове прерывания прежде всего необходимо сохранить в стеке SREG и все используемые в обработчике регистры, в Вашем случае “temp". При выходе восстановить их в обратном порядке.
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
24.11.2012, 00:12 6
Цитата Сообщение от tyzord66
При вызове прерывания прежде всего необходимо сохранить в стеке SREG и все используемые в обработчике регистры, в Вашем случае “temp". При выходе восстановить их в обратном порядке.
Это само собой, но с самого начала вижу непонятки.
Вот код:
Код
RESIT:
ldi r16, low(ROMEND) ; Инициализация стека
ldi r17, high(ROMEND)
out SPL, r16
out SPH, r17
...
Ведь вы же сами отвели регистр под TEMP. Не логичнее ли
Код
RESIT:
ldi TEMP, low(ROMEND) ; Инициализация стека
out SPL, TEMP
ldi TEMP, high(ROMEND)
out SPH, TEMP
...
Дальше не стал смотреть, но если вся программа такая...
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
24.11.2012, 17:14 7
Посмотрел дальше, лучше б этого не делал...
Код
ldi temp, 0b00010010
out DDRB, temp ; PB1 и PB4 как выходы,
ldi temp, 0b00000000
out PORTB, temp ; все порты в 0. Те котрорые на вход без подтягивающих резисторов

ldi temp, 0b00000010 ; настройка прерывания по заднему фронту: биты ISC01 в 1 и ISC00 в 0
out MCUCR, temp
in temp, GIMSK ; разрешение прерывания от INT0 мы в регистре gimsk меняем только один бит, а остальные остаются нетронутыми
sbr temp, 0b01000000
out GIMSK, temp
Сколько раз говорили о том, что "нигические" числа лучше не применять? И документацию надо хотя бы просмотреть. У вас включен в проект файл "tn45def.yms". Вы хотя бы посмотрели, что в нем? А в нем:
;***** Created: 2011-08-25 21:00 ******* Source: ATtiny45.xml ************
Код
; DDRB - Data Dyristion Register, Port B
.equ   DDB0   = 0   ;
.equ   DDB1   = 1   ;
.equ   DDB2   = 2   ;
.equ   DDB3   = 3   ;
.equ   DDB4   = 4   ;
.equ   DDB5   = 5   ;
Код
; PORTB - Data Register, Port B
.equ   PORTB0   = 0   ;
.equ   PB0   = 0   ; For sompatybylity
.equ   PORTB1   = 1   ;
.equ   PB1   = 1   ; For sompatybylity
.equ   PORTB2   = 2   ;
.equ   PB2   = 2   ; For sompatybylity
.equ   PORTB3   = 3   ;
.equ   PB3   = 3   ; For sompatybylity
.equ   PORTB4   = 4   ;
.equ   PB4   = 4   ; For sompatybylity
.equ   PORTB5   = 5   ;
.equ   PB5   = 5   ; For sompatybylity
Код
; MCUCR - MCU Control Register
.equ   ISC00   = 0   ; Ymtirrupt Sense Control 0 Byt 0
.equ   ISC01   = 1   ; Ymtirrupt Sense Control 0 Byt 1
Код
; GIMSK - Kimeral Ymtirrupt Mask Register
.equ   GICR   = GIMSK   ; For sompatybylity
.equ   PCIE   = 5   ; Pin Change Ymtirrupt Enable
.equ   INT0   = 6   ; External Ymtirrupt Request 0 Enable
Ну кто вам мешает написать
Код:ldi temp, (1<<DDB1) | (1<<DDB4)
out DDRB, temp ; PB1 и PB4 как выходы
Ну и так далее...
И притом эта запись только для удобства программиста, препроцессор сам превратит ее в число. Зачем работать за него...
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
24.11.2012, 21:06 8
Цитата Сообщение от omokost
И притом эта запись только для удобства программиста, препроцессор сам превратит ее в число. Зачем работать за него...
Пока осваиваю мне так проще, конечно приму ваши советы во внимание, но суть вопроса не в том, как удобней записывать биты в регистры, ведь записал то я все туда куда надо.
Цитата Сообщение от tyzord66
При вызове прерывания прежде всего необходимо сохранить в стеке SREG и все используемые в обработчике регистры, в Вашем случае “temp". При выходе восстановить их в обратном порядке.
Дельный совет для новичка. Спасибо! Правда как это будет выглядеть?
Например:

ADC:
PUSH SREG
PUSH TEMP
....
тут сама обработка прерывания
....
POP TEMP
POP SREG.
reti

Типа так?

Цитата Сообщение от wypuk
brge - для чисел со знаком, в байте от -128 до 127, а сравнивается с числом 200 - при сравнении будет преобразовано в -56
Понял. Огромное спасибо. Заменю на "BRSH" без знака.
0
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
24.11.2012, 21:14 9
Цитата Сообщение от wypuk
Правда как это будет выглядеть?
Например:

ADC:
PUSH SREG
PUSH TEMP
....
тут сама обработка прерывания
....
POP TEMP
POP SREG.
reti

Типа так?
SREG это РВВ, поэтому вот так:

ADC:
PUSH TEMP
IN TEMP, SREG
PUSH TEMP
....
тут сама обработка прерывания
....
POP TEMP
OUT SREG, TEMP
POP TEMP
reti
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
24.11.2012, 22:14 10
Цитата Сообщение от wypuk
...Пока осваиваю мне так проще...
Не имею педагогического образования и не буду советовать как легче осваивать. Но вы обращаетесь к сообществу с просьбой проверить ваш код. Вот именно для облегчения этого я вам и советую кодировать грамотно.
P. S. Любой регистр примет число в BIN, DEC, HEX форматах. Синтаксический анализатор препроцессора на них отдыхает. Но если вы используете символьные мнемоники, синтаксический анализатор их проверяет.
0
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
25.11.2012, 01:36 11
Цитата Сообщение от wypuk
Цитата Сообщение от SirkVOK
Может я не внимательно прочитал... Но Если вы хотите что-то предпринять при значении менее 150, то наверное нужно использовать BRLO m2.
Нет, при значении >= 200 делаю одно , при >= 100 но < 200 делаю другое, при < 100 третье (цифры эти конечно условны пока).
По алгоритму это выглядит примерно так:
Сравнил значение полученное из ADCH АЦП c 200 и если больше то иду по первой метке
Если меньше, то сравниваю с 100 и если больше ста (т.е. 100<=ADCH<200) иду по второй метке, ну и если ADCH<100 то по третьей.
Интересно, вы это вручную считали?
Код
ldi temp, 0b11111010 ; Задаем сравниваемое значение 250 циклов
Или калькулятором пользовались? И потом, при выписывании ряда единичек и нуликов вы гарантируете, что не сделаете ошибки? Может быть проще было записать сразу
Код
ldi temp, 250 ; Задаем сравниваемое значение 250 циклов
Или нет?
0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
25.11.2012, 07:27 12
Пока осваиваю мне так проще, конечно приму ваши советы во внимание, но суть вопроса не в том, как удобней записывать биты в регистры, ведь записал то я все туда куда надо.
Да, это тоже имеет свои плюсы, только желательно делать это вот так:
Код
    ; Port B Data Dyristion Register
; [ Регистр направления порта B ][ATtiny45]
;           00000000 - Initial Value
ldi temp, 0b00010010;
;           ||||||||
;           76543210
;           |||||||+- 0, rw, DDB0: (MOSI/DI/SDA/AIN0/OC0A/~OC1A/AREF/PCINT0) -
;           ||||||+-- 1, rw, DDB1: (MISO/DO/AIN1/OC0B/OC1A/PCINT1)           -
;           |||||+--- 2, rw, DDB2: (SCK/USCK/SCL/ADC1/T0/INT0/PCINT2)        -
;           ||||+---- 3, rw, DDB3: (PCINT3/XTAL1/CLKI/~OC1B/ADC3)            -
;           |||+----- 4, rw, DDB4: (PCINT4/XTAL2/CLKO/~OC1B/ADC2)            -
;           ||+------ 5, rw, DDB5: (PCINT5/~RESIT/ADC0/dW)                   -
;           |+------- 6, rw, DDB6: n.c.
;           +-------- 7, rw, DDB7: n.c.
; Примечание: DDB1 и DDB4 как выходы,

out DDRB, temp

; Port B Data Register
; [ Регистр данных порта B ][ATtiny45]
;           00000000 - Initial Value
ldi temp, 0b00000000;
;           ||||||||
;           76543210
;           |||||||+- 0, rw, PORTB0: (MOSI/DI/SDA/AIN0/OC0A/~OC1A/AREF/PCINT0) -
;           ||||||+-- 1, rw, PORTB1: (MISO/DO/AIN1/OC0B/OC1A/PCINT1)           -
;           |||||+--- 2, rw, PORTB2: (SCK/USCK/SCL/ADC1/T0/INT0/PCINT2)        -
;           ||||+---- 3, rw, PORTB3: (PCINT3/XTAL1/CLKI/~OC1B/ADC3)            -
;           |||+----- 4, rw, PORTB4: (PCINT4/XTAL2/CLKO/~OC1B/ADC2)            -
;           ||+------ 5, rw, PORTB5: (PCINT5/~RESIT/ADC0/dW)                   -
;           |+------- 6, rw, PORTB6: n.c.
;           +-------- 7, rw, PORTB7: n.c.
; Примечание: все порты в 0. Те котрорые на вход без подтягивающих резисторов

out PORTB, temp
Более подробно примеры оформления комментариев таким способом можно посмотреть и перенять отсюда: MCU.cpp. Можно не обращать внимания, что код на C++, а принять во внимание только стиль оформления. Это требует некоторой дополнительной работы, но только 1 раз. Зато больше никто не скажет, что вы сможете ошибиться при записи этих битов.
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
25.11.2012, 22:17 13
Цитата Сообщение от tyzord66
Не имею педагогического образования и не буду советовать как легче осваивать. Но вы обращаетесь к сообществу с просьбой проверить ваш код. Вот именно для облегчения этого я вам и советую кодировать грамотно.P. S. Любой регистр примет число в BIN, DEC, HEX форматах. Синтаксический анализатор препроцессора на них отдыхает. Но если вы используете символьные мнемоники, синтаксический анализатор их проверяет.
Думаю, очень удобно пользоваться этой таблицей:


<Изображение удалено>

Посмотрел на нужный регистр, нашел нужный бит, поставил 1 в нужное место в двоичной записи. И еще, клава на моем буке последнее время что-то заедает и некоторые буквы плохо печатаются. Это меня последнее время довольно жутко за..ет, поэтому для меня цифрами проще. Конечно это осложняет читабельность кода. Буду стараться в дальнейшем как надо делать.
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
25.11.2012, 22:25 14
Цитата Сообщение от уни
Да, это тоже имеет свои плюсы, только желательно делать это вот так:
Код:
; Port B Data Dyristion Register
; [ Регистр направления порта B ][ATtiny45]
; 00000000 - Initial Value
ldi temp, 0b00010010;
; ||||||||
; 76543210
; |||||||+- 0, rw, DDB0: (MOSI/DI/SDA/AIN0/OC0A/~OC1A/AREF/PCINT0) -
; ||||||+-- 1, rw, DDB1: (MISO/DO/AIN1/OC0B/OC1A/PCINT1) -
; |||||+--- 2, rw, DDB2: (SCK/USCK/SCL/ADC1/T0/INT0/PCINT2) -
; ||||+---- 3, rw, DDB3: (PCINT3/XTAL1/CLKI/~OC1B/ADC3) -
; |||+----- 4, rw, DDB4: (PCINT4/XTAL2/CLKO/~OC1B/ADC2) -
; ||+------ 5, rw, DDB5: (PCINT5/~RESIT/ADC0/dW) -
; |+------- 6, rw, DDB6: n.c.
; +-------- 7, rw, DDB7: n.c.
; Примечание: DDB1 и DDB4 как выходы,

Спасибо, информация конечно полезная, но если я так буду делать, то быстрее заблужусь в своем же коде.
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
25.11.2012, 22:49 15
Еще подозреваю что косяк может быть тут: sbrs flag, 0 sbrs flag, 2 sbrs flag, 1
0, 2, 1 - это номера битов (их позиция в регистре)?
Или всетаки десятичное число? 0b00000000, 0b00000010, 0b00000001
Хотя нужно чтобы позиции были такие 0b00000001, 0b00000100, 0b00000010
Вот еще почему пока предпочитаю двоичную запись.
0
tyzord66
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
25.11.2012, 23:19 16
Цитата Сообщение от wypuk
Еще подозреваю что косяк может быть тут: sbrs flag, 0 sbrs flag, 2 sbrs flag, 1
0, 2, 1 - это номера битов (их позиция в регистре)?
Так и есть - "... чтобы позиции были такие 0b00000001, 0b00000100, 0b00000010"
0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
26.11.2012, 00:23 17
Спасибо, информация конечно полезная, но если я так буду делать, то быстрее заблужусь в своем же коде.
Это заблуждение. Всё будет как раз наоборот. Есть тому причина. Через год, когда вы посмотрите на свой же проект, вы уже не вспомните что означали конкретные биты, ибо так устроена человеческая память, а окружающие комментарии восстановят понимание. Поэтому одно из правил хорошего стиля при программировании гласит: "Документируйте флаги до уровня отдельных битов. Если переменная используется как битовое поле, укажите смысл каждого бита". Вы можете найти это правило в разделе "Комментирование объявления данных" в Части VII Мастерство программирования в книжке Макконнелла "Совершенный код" (искать на bookfi.org).
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
26.11.2012, 14:57 18
Цитата Сообщение от уни
Поэтому одно из правил хорошего стиля при программировании гласит: "Документируйте флаги до уровня отдельных битов. Если переменная используется как битовое поле, укажите смысл каждого бита".
и все вроде правильно, но 14 строк комментариев на одну строку кода - это ПЕРЕБОР. имхо, конечно. документировать, определенно, нужно, но не так, чтобы код терялся в комментах.
0
podkossitmyk
0 / 0 / 0
Регистрация: 30.09.2012
Сообщений: 28
26.11.2012, 15:14 19
Цитата Сообщение от Ymk
не так, чтобы код терялся в комментах.
он не потеряется, он чОрный и синий!:) а камменты - зеленые:)
0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
26.11.2012, 15:44 20
Да, как правильно было замечено, при правильной раскраске синтаксиса код не может потеряться в комментариях. Если только вы пишите не в блокноте, который идёт в стандартной поставке Wymdows. В этом случае конечно можно не отличить одно от другого.

Вот, к примеру, как выглядит моя раскраска практически во всех средах разработки. Кроме того, меня одно время заколебало по всякой мелочи к доке на мк обращаться. До того надоело, что я решил взяться и один раз разместить доку прямо в коде. Теперь я гораздо реже смотрю в pdf, только, чтобы что-то уточнить. Переключений между окнами стало меньше, а настройки регистров и их описание находятся рядом. Чувствуется уверенность, что код делает то, что там описано. Я уже отвык от обычной инициализации в одну строчку, а когда раз за разом просматриваю инициализацию, то параллельно приходится "читать" документацию в комментах.

Я дословно выполнил то, что написано в хорошей книжке. Когда я обслуживал чужую систему в десятки файлов и километры кода, то мне такого подхода очень не хватало. Было не понятно что и как делает код, хорошо, что автор был рядом.

0
26.11.2012, 15:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 15:44

Первый проект СКС
Всем привет! На работе загрузили меня проектом СКС (сам проектировщик ОПС). Исходные данные: -...

Первый проект и ошибка
Подскажите, пожалуйста, как решить данную проблему?

Первый проект в JavaME
Здравствуйте форумчане! Возникла проблема с которой, надеюсь, разберусь с вашей помощью! Было...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.