Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
vit005
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 17
1

Подскажите, можно ли создать массив на ядре AVR8L (tiny10)

03.01.2019, 14:54. Просмотров 222. Ответов 13
Метки нет (Все метки)

Столкнулся с проблемой, что на tiny10 нет команд lpm и adiw, которые используются в массиве. Возник вопрос, а этой микре можно слепить массив?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2019, 14:54
Ответы с готовыми решениями:

Если можно создать массив TButton, то как создать массив их событий?
Пишу программу в которой много однообразных Едитов и кнопок. Чтобы "облегчить сбе жизнь" создал...

Задача выполняется долго на одном ядре процессора - можно ли ее распараллелить
Здравствуйте, коллеги! Я с Delphi работаю давно, но монгопоточность не использовал. Сделал пока...

можно ли и если можно, то как в сессии создать двумерный массив ?&
нужен сабж

Подскажите можно ли создать курсор с анимацией ?
Есть к примеру анимация в expression blend бабочка которая машет крыльями ну или переливающаяся...

О потоках std::thread: можно ли вложить потоки друг в друга и можно ли создать динамический массив потоков?
1) Могу ли я вложить потоки друг в друга? 2) Могу ли я создать динамический массив потоков,...

13
liv
857 / 719 / 153
Регистрация: 07.10.2015
Сообщений: 2,552
Завершенные тесты: 1
03.01.2019, 17:40 2
vit005, из datasheet на tiny10:
In-System Reprogrammable Flash Program Memory

Constant tables can be allocated within the entire address space of program memory by using load/store
instructions. Since program memory can not be accessed directly, it has been mapped to the data
memory. The mapped program memory begins at byte address 0x4000 in data memory. Although
programs are executed starting from address 0x000 in program memory it must be addressed starting
from 0x4000 when accessed via the data memory.
Понятно? Если нет, то суть следующая:
Прочитать программную память можно, используя команду чтения SRAM, т.е. LD.
Необходимо к удвоенному адресу в программной памяти добавить 0x4000

Ну а adiw легко эмулируется командами:
Assembler
1
2
3
4
ldi r16, 0xff
clr r17
subi ZL, r16
adc ZH, r17
Добавлено через 7 минут
Для adiw Z, 1

Добавлено через 46 минут
Чуток ошибся
Assembler
1
2
3
clr r16
subi ZL, 0xff
adc ZH, r16
0
vit005
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 17
04.01.2019, 17:42  [ТС] 3
в шапке написал так...

Assembler
1
2
3
4
5
6
.dseg 
.org 0x0040            
...
.cseg
.org 0
...
Пробовал так вытащить из SRAM - не получилось...

Assembler
1
2
3
4
5
6
7
8
9
10
        ldi ZH,High(Notelist*2)
    ldi ZL,Low(Notelist*2)  
 
    add ZL,Temp3
    adc ZH,Temp1
 
    ;lpm
    ;mov Temp2,r0   
 
    ld Temp2,Z
0
liv
857 / 719 / 153
Регистрация: 07.10.2015
Сообщений: 2,552
Завершенные тесты: 1
04.01.2019, 17:58 4
vit005, а так?
Assembler
1
2
3
4
5
6
7
  ldi    ZH, High(Notelist*2)
  ldi    ZL, Low(Notelist*2)
  subi ZH, -0x40 ;+0x4000 !!!
  ld    R16, Z+
  ld    R17, Z
 
Notelist: .db  0x01, 0x02
1
vit005
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 17
05.01.2019, 15:46  [ТС] 5
К сожалению в регистрах R16, R17 нет данных из массива...

Добавлено через 2 минуты
https://electronics.stackexchange.co...t-for-attiny10
0
vit005
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 17
06.01.2019, 21:43  [ТС] 6
вот так извлекается...
Assembler
1
2
3
4
5
6
ldi    ZH, High(Notelist*2+0х4000)
ldi    ZL, Low(Notelist*2)
ld    R16, Z+
ld    R17, Z
 
Notelist: .db  0x01, 0x02
но не изменяется внутренний адрес...

Добавлено через 23 минуты
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ReadArray:      
        cpi r19,5
        breq end                    
        
        ldi r31,high(Notelist*2+0x4000)
        ldi r30,low(Notelist*2) 
        
                ;ldi Temp1,0
        add ZL,r19
                ;adc ZH,Temp1
 
        ;ld r21, Z+
        ld r20, Z
 
        inc r19              
        rjmp ReadArray         
 
end:      rjmp end
        
 
Notelist: .db 1,2,3,4,5
Я так понимаю, Z+ надо для извлечения старшего байта, так?
0
vit005
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 17
07.01.2019, 15:00  [ТС] 7
Как интересно, что на полных чипах (например, mega8), команда
Assembler
1
ld r16,Z
не работает.
По поводу adiw, не получается заменить, т.е. я извлек из памяти информацию после команды
Assembler
1
adiw Z, 1
, путем
Assembler
1
2
lpm                    
mov Temp2,R0
то в регистре получилось следующие число из массива.

Попробовал через ваш заменитель - не получилось:
Assembler
1
2
3
clr r16
subi ZL, 0xff
adc ZH, r16
Получается значение в цикле "255" и все...

Т.е., наверно, можно использовать в место adiw - Z+ на ядре avr8l

Добавлено через 14 минут
Или для чего используется команда adiw? Это следующие значение из массива или увеличение внутреннего адреса...
0
liv
857 / 719 / 153
Регистрация: 07.10.2015
Сообщений: 2,552
Завершенные тесты: 1
08.01.2019, 14:38 8
Извините, не было возможности ответить оперативно...
Давайте по-порядку:
Цитата Сообщение от vit005 Посмотреть сообщение
вот так извлекается...
Что именно извлекается? Читается байт из кода? ТАк все же читается или не читается? Я Вам привел выдержку из datasheet, вроде как должно работать... Проверить нет возможности.
Цитата Сообщение от vit005 Посмотреть сообщение
но не изменяется внутренний адрес...
О чем конкретно речь? Об увеличении адреса в Z? Ну так используйте Z+
Цитата Сообщение от vit005 Посмотреть сообщение
Я так понимаю, Z+ надо для извлечения старшего байта, так?
Z+ используется, когда нужен автоинкремент адреса. А что читать дальше, уже не важно...
Цитата Сообщение от vit005 Посмотреть сообщение
на полных чипах (например, mega8)
Там команда читает SRAM, там нет отображения кода на оперативку.
Насчет
Assembler
1
2
3
clr r16
subi ZL, 0xff
adc ZH, r16
я был неправ. Инкремент на 1 лучше сделать так:
Assembler
1
2
3
4
    clr     r16
    sec
    adc     ZL, r16
    adc     ZH, r16
Цитата Сообщение от vit005 Посмотреть сообщение
в место adiw - Z+ на ядре avr8
А на avr8 не надо ничего и выдумывать: там есть adiw
Цитата Сообщение от vit005 Посмотреть сообщение
для чего используется команда adiw?
Эта команда служит для увеличения двойного слова ZH:ZL, YH:YL, XH:XL, R25:R24 на величину в пределах 0-63

Хотелось бы задать вопрос:
Почему Вы остановились именно на tiny10? Кто мешает выбрать другой контроллер: tiny13, mega8 или любой другой с полным набором команд?
0
Ethereal
Нарушитель
5197 / 1940 / 251
Регистрация: 17.02.2013
Сообщений: 2,876
09.01.2019, 10:51 9
Цитата Сообщение от liv Посмотреть сообщение
Чуток ошибся
clr r16
subi ZL, 0xff
adc ZH, r16
Цитата Сообщение от liv Посмотреть сообщение
я был неправ. Инкремент на 1 лучше сделать так:
clr r16
sec
adc ZL, r16
adc ZH, r16
Assembler
1
2
subi ZL, 0xFF
sbci ZH, 0xFF
Добавлено через 4 минуты
Даже нагляднее так писать :
Assembler
1
2
subi ZL, -1
sbci ZH, -1
Добавлено через 8 минут
Цитата Сообщение от liv Посмотреть сообщение
А на avr8 не надо ничего и выдумывать: там есть adiw
Да итак не особенно-то надо фантазировать. Увеличить слово на 1 это тоже самое, что уменьшить слово на -1. -1 в виде слова это 0xFFFF. Для сложения чисел с большой разрядностью есть пара add+adc. Где самый младшие байты складываешь add, а более старшие adc. Ну а для вычитания пара sub+sbc. Причем опять самые младшие байты вычитаешь sub, а более старшие sbc. К тому-же у команд sub+sbc есть варианты вычитания непосредственного значения subi+sbci. Отсюда очевидно, что инкремент Z будет
Assembler
1
2
subi ZL, -1
sbci ZH, -1
Где -1 можно записывать как 0xFF, а можно как -1, главное что пара из двух байт -1 и -1 (или то-же самое 0xFF и 0xFF) объединенные вместе представляют собой слово 0xFFFF, т.е. опять таки -1, но уже слово -1.
Так-что система команд достаточно продумана даже и без adiw sbiw. Надо просто увидеть в ней естественное для любых ассемблеров - как в ней складываются и вычитаются числа из многая байт.

Добавлено через 4 минуты
Это я для тс-а написал, есс-но.
2
vit005
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 17
09.01.2019, 11:44  [ТС] 10
liv,
Цитата Сообщение от liv Посмотреть сообщение
ldi * *ZH, High(Notelist*2)
* ldi * *ZL, Low(Notelist*2)
* subi ZH, -0x40 ;+0x4000 !!!
* ld * *R16, Z+
* ld * *R17, Z
Notelist: .db *0x01, 0x02
Почему-то первого раза не заработало, т.е. из массива не было желаемого и любого байта (может студиа глюканула...).
Поэтому вникся в код по ссылке и использовал
Цитата Сообщение от vit005 Посмотреть сообщение
high(Notelist*2+0x4000)
.
Потом попробовал еще раз ваш пример и заработало... но на два бита больше...

В место adiw использовал Z+, вроде смена пошла.

Цитата Сообщение от liv Посмотреть сообщение
Хотелось бы задать вопрос:
Почему Вы остановились именно на tiny10? Кто мешает выбрать другой контроллер: tiny13, mega8 или любой другой с полным набором команд?
Это самый интересный корпус в миниатюре, интерфейс TWI, 16bit таймер (кой нужен для проекта, что ниже выложу, хоть кажется что вся мощь 16bit не используется). А так, до этого гонял tiny25-45-85. Думаю перейти на tiny102 (маленький корпус, полный комплект команд, TWI... НО Студиа нужна другая... вроде мой клон прогер должен потянуть ее).

Есть на радиокоте проект дверного звонка "Патриот" и реализован он на at90s2313, что само собой расточительство... На tiny45 не завелся, т.к. слабоват в глобальной переделке кода (16bit на 8bit таймер переводить). Вот и подвернулась по случаю tiny10, и тут без напильника никак...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
.include "tn10def.inc"
 
    .def    Temp1=R16
    .def    Temp2=R17
    .def    Temp3=R18
    .def    Temp4=R19
    .def    Temp=R20
 
.dseg
 
CountRate:  .byte 1
MelAddL:            .byte 1
MelAddH:            .byte 1
 
;******************************************************************************
.macro  stsi        ;save_immediate <SRAM_cell>,<k>
    ldi Temp,@1
    sts @0,Temp
.endmacro
 
.macro  rdm
    ldi ZH,High(@0*2+0x4000)
    ldi ZL,Low(@0*2)
    add ZL,XL
    adc ZH,XH
    ;lpm
    ;mov Temp3,r0
    ld Temp3,Z
.endmacro
;******************************************************************************
 
.cseg
.org 0
 
rjmp RESET          ; Reset 
reti ;rjmp EXT_INT0             ; External Interrupt Request 0
reti ;rjmp PCINT        ; PCINT 
reti ;rjmp TIM0_CAPT    ; Timer0 Capture Event  
reti ;rjmp TIM0_OVF             ; Timer0 Overflow 
reti ;rjmp TIM0_COMPA   ; Timer0 CompareA 
reti ;rjmp TIM0_COMPB   ; Timer0 CompareB 
reti ;rjmp ANA_COMP     ; Analog Comparator
reti ;rjmp WDT          ; Watchdog Time-out
reti ;rjmp VLM          ; Vcc Level Monitor 
reti ;rjmp ADC_C        ; ADC Conversion Complete
 
reset:  
        ldi Temp1,high(RAMEND)
    out SPH,Temp1 
    ldi Temp1,low(RAMEND)
    out SPL,Temp1
 
    cli
    inc Temp3
 
    ldi temp1,0xff          ;port init
    out ddrb,temp1
    ldi temp1,0b00000001
    out portb,Temp1                ;timers init
    ldi temp1,0b01000000    ;OC0a toggle at compare
    out tccr0a,temp1
    ldi temp1,0b00001010
    out tccr0b,temp1                 ;clear on compare, clk=C/8
 
    ldi Temp1,1
    sts CountRate,Temp1
 
 
;**********************************************************************************************
;Partiture reader
 
;input:
;output: Temp3 - code of current note
 
Partiture:    
        ldi XL,0
    ldi XH,0
    ldi Temp1,0
    ldi Temp2,0
 
Play:
    rdm HymnUSSR
    cpi Temp3,0xff             ;comparing with "end" flag
    breq Partiture
 
    sts MelAddL,XL
    sts MelAddH,XH
    rcall Note
 
    lds XL,MelAddL
    lds XH,MelAddH
    ;adiw XL,1
    ld Temp4,X+
 
    rdm HymnUSSR
    rcall Wait
    ;adiw XL,1
    ld Temp4,X+
 
    rjmp Play
 
 
HymnUSSR:   
    .db 19,24,24,32                         ;союз
    .db 19,24,21,8,23,32                    ;неруши
    .db 16,12,254,4,16,16,21,32             ;мый респу
    .db 19,24,17,8,19,32                    ;блик свобо
    .db 12,12,254,4,12,16,14,32             ;дных сплоти
    .db 14,16,16,16,17,32                   ;ла наве
    .db 17,16,19,16,21,32                   ;ки вели
    .db 23,24,24,8,26,16                    ;кая Русь
    .db 19,4,254,2,19,4,254,2,16,16,254,2   ;та-та-тааа
    .db 19,16,28,32                         ;да здра
    .db 26,24,24,8,26,32                    ;вствует со
    .db 23,16,19,16,24,32                   ;зданный во
    .db 23,24,21,8,23,32                    ;лей наро
    .db 19,16,16,16,21,32                   ;да вели
    .db 19,16,17,16,19,32                   ;кий могу
    .db 14,16,12,16,24,32                   ;чий Сове
    .db 23,16,21,16,19,16                   ;тский Союз
    .db 19,4,254,2,19,4,254,2,21,16,23,16   ;та-та-тааа
    .db 28,64,26,16,24,16,23,16,24,16,26,16 ;Сла-а-а-а вься-а-а-а-те
    .db 254,2,19,4,254,2,19,4,254,2,19,12   ;та-та-та че
    .db 254,4,18,12,254,4,19,12,254,4       ;ство тата
    .db 19,16,21,16,23,16                   ;ти-та
    .db 24,64,23,16,21,16,19,16,21,16,23,16 ;На-а-а-а ше-е сва-а-бо
    .db 254,2,16,4,254,2,16,4,254,2,16,12   ;та-та-та дно
    .db 254,4,16,12,254,4,16,12,254,4       ;е-е-е тата
    .db 16,16,17,16,19,16                   ;ти-та
    .db 21,32,17,16,19,16,21,32             ;дружбы наро
    .db 17,24,19,8,21,32                    ;дов надё
    .db 17,16,21,16,26,64                   ;жный оплот
    .db 29,64,28,16,26,16,24,16,26,16,28,48 ;Па-а-а-а рти-и-я-а Ле
    .db 24,12,254,4,24,64                   ;нина-а-а-а
    .db 26,64,24,16,23,16,21,16,23,16,24,48 ;Си-и-и-и ла-а на-а-ро
    .db 21,12,254,4,21,16,19,16,21,16,23,16 ;дная-а-а-а
    .db 24,32,23,24,21,8,19,32              ;нас к торжеству
    .db 14,8,254,8,12,16,24,32              ;коммуни-и
    .db 23,16,21,16,19,12,254,4,17,8,254,4,255,0    ;зма ведёт!
 
 
;  до(263) до#(285) ре(297) ре#(316) ми(330) фа(351) фа#(375) соль(395) соль#(422)ля(440) ля#(474) си(494)
;  0       1        2       3        4       5       6        7         8         9       10       11
;  12      13       14      15       16      17      18       19        20        21      22       23
;  24      25       26      27       28      29      30       31        32        33      34       35
 
 
;****************************************************
 
Note:   
    ldi ZH,High(Notelist*2+0x4000)
    ldi ZL,Low(Notelist*2)
 
    ldi Temp1,0
    clc
    rol Temp3
    rol Temp1
 
    add ZL,Temp3
    adc ZH,Temp1
 
    ;lpm
    ;mov Temp2,r0
    ;adiw ZL,1
    ld Temp2,Z
    ld Temp4,Z+
 
    ;lpm
    ;mov Temp1,r0
    ld Temp1,Z
 
    rcall NotePlay
    ret
 
 
;       до(263)   до#(285)  ре(297)   ре#(316)  ми(330)   фа(351)   фа#(375)  соль(395) соль#(422)ля(440)   ля#(474)  си(494)
;       0         1         2         3         4         5         6         7         8         9         10        11
Notelist:   
    .db 0x02,0x50,0x02,0x24,0x02,0x0e,0x01,0xed,0x01,0xd9,0x01,0xbc,0x01,0xa0,0x01,0x8b,0x01,0x72,0x01,0x63,0x01,0x49,0x01,0x3c;сред. октава
;       12        13        14        15        16        17        18        19        20        21        22        23
    .db 0x01,0x28,0x01,0x12,0x01,0x07,0x00,0xf6,0x00,0xec,0x00,0xde,0x00,0xd0,0x00,0xc5,0x00,0xb9,0x00,0xb1,0x00,0xa4,0x00,0x9e;бол. октава
;       24        25        26        27        28        29        30        31        32        33        34        35
    .db 0x00,0x94,0x00,0x89,0x00,0x83,0x00,0x7b,0x00,0x76,0x00,0x6f,0x00,0x68,0x00,0x62,0x00,0x5c,0x00,0x58,0x00,0x52,0x00,0x4f;1 октава
 
 
NotePlay:   
    ldi Temp3,0
    out tcnt0h,Temp3
    out tcnt0l,Temp3
    out ocr0ah,temp2
    out ocr0al,temp1
    ret
 
;************************************************************
 
Wait:   
    push Temp1
    push Temp2
 
    ldi Temp1,0
    ldi Temp2,0
 
l:  dec temp1
    brne l
 
    dec temp2
    brne l
 
    dec temp3
    brne l
 
    pop Temp2
    pop Temp1
    ret
Но скорости пока не добавить больше. В оригинале кварц 10, а в tiny10, всего 8...

Добавлено через 24 минуты
Ethereal,
Цитата Сообщение от Ethereal Посмотреть сообщение
Assembler
1
2
subi ZL, -1
sbci ZH, -1
Отлично работает...

Но мне не понятно, почему инкремент происходит в приделе одного прогона, а при повторном запросе-переходе внутренний адрес массива возвращается назад... Или это надо принимать как должное, для обычного числа так, для массива так.
0
liv
857 / 719 / 153
Регистрация: 07.10.2015
Сообщений: 2,552
Завершенные тесты: 1
09.01.2019, 11:57 11
vit005, и работает? Если так, то замечательно!
Цитата Сообщение от vit005 Посмотреть сообщение
Но скорости пока не добавить больше. В оригинале кварц 10, а в tiny10, всего 8...
Резервы всегда есть У Вас таймер сейчас настроен на Clk/8. Все константы для нот подобраны соответствующие. Измените на Clk/1. Если все константы умножить на 8, то придем к тому, что сейчас. Но теперь появится возможность изменить эти константы в пропорции 8/10. Тем самым, учтем, что кварц не на 10, а на 8

Добавлено через 5 минут
Цитата Сообщение от vit005 Посмотреть сообщение
Но мне не понятно
Перечитайте еще раз внимательно пост #9...
0
vit005
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 17
09.01.2019, 12:27  [ТС] 12
В орг таймер был Clk/64, это я уже 8 поставил, с Clk/1, увеличивается высота тона, но скорость все равно не достаточно, что вызывает подозрение не 1 МГц генератор

The calibrated internal 8 MHz oscillator is always selected as main clock when the device is
powered up or has been reset. The synchronous system clock is the main clock divided by 8,
controlled by the System Clock Prescaler. The Clock Prescaler Select Bits can be written later to
change the system clock frequency. See “System Clock Prescaler”.

т.к. в настройках фьюзов нет отключен делителя... Значит можно программно увеличить, так что ли?

Добавлено через 24 минуты
тоже самое естественное, как в математике отнять и прибавить единицу единовременно...

Я это понял, как форму интерпретации. А вопрос у меня был другой... Массив в цикле с командами add и adc, значит последующий проход добавит +1 к внутреннему адресу и выдаст след. значение, но когда у нас еще стоит инкремент дополнительно (Z+, adiw), почему не происходит +2, а возвращается на +1...
0
liv
857 / 719 / 153
Регистрация: 07.10.2015
Сообщений: 2,552
Завершенные тесты: 1
09.01.2019, 12:41 13
vit005, смотрите описание Clock Prescaler Register CLKPSR
Получается, да, делителем по-умолчанию является 8, т.е. фактически имеем частоту 1 МГц
Измените на делитель 1, будет 8 МГц.
Обратите внимание на то, что перед изменением защищенного регистра CLKPSR, надо сначала разрешить изменение
записью в регистр CCP значения 0xD8 (см описание Configuration Change Protection Register CCP)

Добавлено через 7 минут
Цитата Сообщение от vit005 Посмотреть сообщение
почему не происходит +2, а возвращается на +1
приведите пример...

Добавлено через 3 минуты
Цитата Сообщение от liv Посмотреть сообщение
кварц не на 10, а на 8
В посту 11 надо понимать не кварц, а внутренний осциллятор
Привык иметь дело только с внешними кварцами...
0
vit005
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 17
09.01.2019, 15:42  [ТС] 14
Машину не обманешь... вроде все понятно, Спасибо.
0
09.01.2019, 15:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2019, 15:42

Массив: Подскажите как создать массив(array) от [-10, 10].
Подскажите как в Visual C++ создать массив(array) от . Недавно начал изучать язык С++ без помощи не...

Массив: Как можно создать массив, не прописывая каждую строку, а с применением цикла?
Добрый день. Имеется массив: var priceList = { &quot;1644&quot; : {&quot;id&quot; : &quot;1644&quot;, &quot;subid&quot; : {},...

Подскажите,какие таблицы можно создать в этой базе данных
БД ”Видеотека” Состав атрибутов: • Название фильма; • Жанр; • Режиссер; • 3 наиболее...


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

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

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