Обсуждаем контроллеры компании Atmel.
Ответить

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср мар 21, 2018 22:59:12

модульное программирование и отладка сначала модулей, затем верхний уровень.

Прекрасен подход только на бумаге, в реальности полуается не так как задумывалось и всё резко становится хуже.
К тому же, подход применим только когда поставлено чёткое Т.З. в деталях и изменений не предвидится.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср мар 21, 2018 23:47:14

Не могу понять почему протеус криво компонует исходник? При пошаговом выполнении вылетает "No source code in this line". Или я что-то делаю не так.


Кстати, а по адресу 0х0046 не должго быть какого-то прерывания или команды RETI, а так получается адрес никуда, а просто так на прерывание без вызова протеус не даст выйти, насколько мне известно

СпойлерИзображение

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 22, 2018 06:55:43

...

С МК AVR я начал работать с 2007 года. Сначала писал на асме, затем перешел на си. В студии работаю с самого начала. В протеусе неоднократно пробовал работать. В итоге на последней попытке плюнул и забил на протеус.
С одной стороны протеус как бы удобен тем, что накидал схему и можно эту схему просимулировать. Такой подход может быть и удобен на небольших схемах.
Приведу в качестве примера один свой проект. Блок управления термоформовочным станком. Состав: МК, регистры ввода-вывода 74HC165 - 3 шт, 74HC595 - 2 шт. 24 входа, 16 выходов. Символьный дисплей 20х4. Матричная клавиатура. "Сейчас мы со всей этой хренью попытаемся взлететь". Я попытался как-то сделать на протеусе. Компьютер так завис на этой схеме, что я прекратил дальнейшие попытки работать в протеусе и весь проект отлаживал как и прежде в студии.
Да, непросто. Но если приноровиться, то все не так уж и сложно.
Алгоритм простой. Как работают микросхемы регистры ввода-вывода нам прекрасно известно, тем более, что SPI аппаратный. Написали программный модуль, сделали тестовый проект, проверили в железе. Если что, отладили в симуляторе. Теперь этот модуль можно смело выкидывать из головы. Беремся за следующий модуль, скажем, символьный дисплей. Тут все аналогично. Я с такими дисплеями работаю без флага ожидания. Только на запись. Проверили работоспособность, что-то вывели для проверки. Этот пункт теперь тоже выкидываем из головы. Матричная клавиатура. Написали модуль, сделали тестовую программу. Вывели коды кнопок на дисплей, выкинули из головы. Дальше остается только сама программа. Алгоритм работы самого устройства в целом.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 22, 2018 10:17:48

Спор ни о чем. С таким же результатом можно спорить что лучше ВАЗ 2102 или 2103. Если хотите продолжать, проще создать ветку "Что круче:........ или ..........", и там разводить срач.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 22, 2018 12:45:35

2 Jetetex когда то помогло в случае "No source code in this line" - разместил файл протеуса там где исходник, правда на Си это было
Если что, отладили в симуляторе

хм. AVR Studio 4.19 хэлп:
Simulator Modules
USI is not supported.
TWI is not supported.
Analog Comparator is not supported.
Analog input is not supported.
лучше эмулятор имхо, правда у Atmel было дорого всегда, но народ извращался - HappyJTAG2 JTAG и ISP для AVR:
http://microsin.net/programming/avr/happyjtag2.html
з.ы. в коментах есть чтоб AVR Studio не падала

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 22, 2018 12:55:27

модульное программирование и отладка сначала модулей, затем верхний уровень.

Прекрасен подход только на бумаге, в реальности полуается не так как задумывалось и всё резко становится хуже.
К тому же, подход применим только когда поставлено чёткое Т.З. в деталях и изменений не предвидится.


Вполне нормально получается - подход древний, с самого рождения ассемблера применяется.
Другое дело, что модульная (многофайловый проект) программа несколько специфична в отношении написания самих модулей и правил работы с ними. О многих приемах можно только догадываться или своими "шишками" осваивать на практике.
Или вспоминать "давно забытое" старое для I8080/Z80/I8086.
8)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 22, 2018 21:33:41

Дальше остается только сама программа. Алгоритм работы самого устройства в целом.

А потом оказывается что эти самые модули которые выбросили из головы начинают конфликтовать друг с другом. Где-то одинаковые регистры задействовали, где-то выходит за границу выделенной памяти и портит соседний участок...
Такой подход предполагает очень тщательное документирование каждого модуля, согласование всех модулей в рамках проекта и это отбирает по времени и ресурсам едва ли не больше чем на реализацию самой программы. И самое ужасное что это позволяет только УМЕНЬШИТЬ количество очевидных ошибок.

Тогда как метод научного(не полностью же рандомно писать программу) тыка с последующей симуляцией работает гораздо быстрее.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 22, 2018 22:17:04

Дело было вечером, делать было нечего... решил я я по свободе перечитать тему с самого начала, и вот что заметил: темы повторяются каждые 10-15 страниц. И в попытке как-то систематизировать сделал что-то вроде навигации или содержания. Получилось или нет, судить Вам:

Руководство по AVR на русском
http://asm-avr.narod.ru/?oprd=1

Про стек тут:
Спойлер-

http://www.radiokot.ru/start/mcu_fpga/avr/08/
viewtopic.php?p=138709#p138709

Кнопки, клавиатуры
Спойлер-
http://asm-avr.narod.ru/?oprd=1

...к меге 8 прикручена матричеая клава на порт С...
viewtopic.php?p=157483#p157483

- фиксировать длительное и короткое нажатие кнопки
viewtopic.php?p=409842#p409842

- избавится от дребизга клавиатуры.
viewtopic.php?p=323224#p323224

- собрать матричную клавиатуру и опрашивать ее 32ой мегой.
viewtopic.php?p=727232#p727232


Прерывания. таймеры
Спойлерhttp://asm-avr.narod.ru/?oprd=1
-Нужно запустить 16 битный таймер, и в определенный момент его считать и сбросить. (ATTiny2313)
viewtopic.php?p=75446#p75446

- прерывания правильно отрабатываются, но вот частота срабатывания не совпадает с расчётной
viewtopic.php?p=408405#p408405

-чтоб контроллер установил порт В в высокий уровень и через 2 сек в низкий уровень и на этом всё прекратилось
viewtopic.php?p=83599#p83599

- происходит прерывание по завершению приема UART, МК перегружается или...
viewtopic.php?p=99533#p99533

- прерывание таймера компаратора - 1 раз в секунду, прогрмма работает 2 минуты и 7 секунд, после чего...
viewtopic.php?p=154743#p154743

- Как в асме организовать смещение влево при записи в ОЗУ?
viewtopic.php?p=167822#p167822

- надо чтоб после включения света он погорел чуть чуть и потух, микросхема ATtiny2313
viewtopic.php?p=171248#p171248

- Помогите пожалуйста с иницаализацией таймера мк AtMega2561
viewtopic.php?p=187197#p187197

- как можно управлять скоростью счета таймера 1 в ATtiny 2313 и числом до которого он считает
viewtopic.php?p=314566#p314566

- при выходе из прерывания данные с АЦП затираются данными до прерывания
viewtopic.php?p=182416#p182416

- attiny12 у нее одно внешнее прерывание, я подключил две кнопки
viewtopic.php?p=330934#p330934

- Нужна помощь по таймеру. Например, делаю задержку
viewtopic.php?p=338772#p338772

- делаю типа секундомера кторый пока считает...
viewtopic.php?p=478704#p478704

- при включении авр уходил в сон, при внешнем прерывании просыпался,
viewtopic.php?p=610378#p610378

- как грамотнее всего В КОНКРЕТНОМ МЕСТЕ программы запустить таймер
viewtopic.php?p=713603#p713603



РОНы и Регистры ввода/вывода
Спойлерhttp://asm-avr.narod.ru/?oprd=1

- ициализировать пару регистров
viewtopic.php?p=188687#p188687

- как присвоить значение отдельным битам порта содержимое какой-нибудь переменной?
viewtopic.php?p=488698#p488698

- как в асме выставлять/снимать один бит порта не изменяя остальных?
viewtopic.php?p=186992#p186992

- часто встречается загрузка регистров примерно таким способом:
viewtopic.php?p=190666#p190666

- прочитать бит по одному адресу из пространства ввода-вывода (I/O space) и записать его по другому адресу и номеру разряда
viewtopic.php?p=193277#p193277

- почему в блоке «Переключение светодиода» в первой строчке PINB а не PORTB
viewtopic.php?p=223372#p223372

- запрограмировать отдельные биты в РОНе, но чтобы другие остались прежними.
viewtopic.php?p=323185#p323185

- ATmega48 - не могу записать в OCR0A, OCR0B, OCR2A!
viewtopic.php?p=338837#p338837

- инвертировать два (младших) разряда в регистре ввода-вывода?
viewtopic.php?p=372935#p372935

- запись в FLASH. Нужно её считать и запихнуть в регистр
viewtopic.php?p=376073#p376073

- Не могу проверить порт B attiny2313
viewtopic.php?p=484658#p484658


математика
Спойлер-
http://asm-avr.narod.ru/?oprd=1

- код умножает двухбайтовое число на 4.875
viewtopic.php?p=377898#p377898

- декремент 16-ти битного числа,
viewtopic.php?p=319684#p319684

-преобразование 16-битного двоичного слова в пять двоично-десятичных (три байта)?
viewtopic.php?p=524894#p524894


Разное
Спойлер-
http://asm-avr.narod.ru/?oprd=1

- Вопрос в следующем, пришел тот злащасный день когда мне понадобилась работа с не целыми числами типа 1,5 в ассемблере, ести ли какие либо стандартные варианты работы с такими числами или нужно чегото мудрить, если мудрить то как???
viewtopic.php?p=56246#p56246

- почему не получается вызывать подпрограммы
viewtopic.php?p=89497#p89497

- подставляю файл с описанием регистров m64def.inc при ассеблирование у меня вылетает ошибка
viewtopic.php?p=90290#p90290

-передать некое число по одному пину но получается огромный код!
viewtopic.php?p=90672#p90672

- хочу подружить мегу64 и ммс карту 32метра (меньше не нашёл хотя устроила бы и 8метровая)
viewtopic.php?p=91055#p91055

- Возникла непонятка с косвенной адресацией это так понимаю нухно только для парных регистров X,Y,Z?
viewtopic.php?p=93091#p93091

- пытаюсь работать с AT45DB161 (SO8) MEG-ой 64-ой подключил флэшку на штатный SPI контроллера
viewtopic.php?p=96506#p96506

- может ли кто поделиться драйвером на ЖКИ (на базе контроллера HD44780)
viewtopic.php?p=97053#p97053

- Хочу тахометр на МК для вентилятора ПК.
viewtopic.php?p=97359#p97359

- идеи по поводу сложения чисел в доп. коде в 24 разрядный регистр(8x3)
viewtopic.php?p=121289#p121289

- mega128. столкнулся с такой проблемой, в АВРстудио при копиляции на команду OUT DDRG,R16 пишет error: Operand 1 out of range: 0x64
viewtopic.php?p=126549#p126549

- Мне надо записать байт из регистра данных SPI в массив
viewtopic.php?p=141316#p141316

- Мне нужен код прошивки для AVR для общения с жёстким диском
viewtopic.php?p=146994#p146994

- Пытаюсь освоить Mega8535. Для начала решил помигать светодиодами, при обращении к одной и той же подпрограмме два и более раза подряд програмуля не работает
viewtopic.php?p=150761#p150761

- для датчика ds18b20? А то у меня никак не получается.
viewtopic.php?p=449819#p449819

- Вопрос заключается в динамической индикации
viewtopic.php?p=642334#p642334

- работала в железе на ATtiny2313, появилась необходимость портировать или типа того эту прогу на ATmega168
viewtopic.php?p=536028#p536028

- чтобы в подпрограмме содержание регистра уменьшалось ... устанавливало значение и выполняло ещё ряд действий?
viewtopic.php?p=491490#p491490

- минимальное число циклов может занять программный SPI?
viewtopic.php?p=501314#p501314

- на дисплей сразу выдаётся цифра "1", хотя
viewtopic.php?p=491232#p491232

- у меня динамическая индикация
viewtopic.php?p=484674#p484674

- У меня ещё вопрос по условным переходам
viewtopic.php?p=377868#p377868

- при попадании в определенный диапазон чисел я попадал на метку иначе дальше
viewtopic.php?p=184420#p184420

- почему огонек всевремя бежит, а не показывает комбинацию 10101010 по истечении 3х пробегов
viewtopic.php?p=186392#p186392

- ...захотел сделать сохранение данные в ЕЕПРОМ
viewtopic.php?p=196784#p196784

- начал изучать асм, добрел до массивов и вот не могу понять
viewtopic.php?p=217320#p217320

цикл из 8 обработок, в котором в зависимости от результата в регистре флагов
viewtopic.php?p=290413#p290413

- вопрос относительно дизассемблеров для AVR.
viewtopic.php?p=309445#p309445

- хочу напомнить что вектора у меги16 - 2-х словные и имеют только четные адреса $0002, $0004, $0006 и т.д., просто писать reti
viewtopic.php?p=317619#p317619

-


USART:
Спойлерhttp://asm-avr.narod.ru/?oprd=1

- Нужно использовать USART1 в atmega64
viewtopic.php?p=238046#p238046

- сделал такую маленькую программку, чтобы разобраться с юсартом.(мега16).
viewtopic.php?p=643510#p643510

- суть такая UART должен работать по прерыванию при приеме данных, а ...
viewtopic.php?p=239594#p239594

- Не вызывается прерывание по опустошению UDR
viewtopic.php?p=716868#p716868

- Хочу разобраться с этим USART. Мега 16.
viewtopic.php?p=316881#p316881


Полезная литература
Спойлерhttp://asm-avr.narod.ru/?oprd=1

    Ю.Ревич "Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера"



Ну как-то вот так :write:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 05:44:30

Alexeyslav писал(а):...

Категорически не соглашусь с вами! Ассемблер изначально предполагает тщательное планирование. И документирования в том или ином виде. Написание отдельных документов, комментарии, рисование алгоритмов. А также следование определённым правилам. Стиль и свод правил каждый программист вырабатывает сам. Есть и общепринятые правила.
Регистры. Нужно сразу и жестко, раз и навсегда определить, как и какие регистры использовать. Глобальные, часто используемые, служебные, временные.
Модульность. Нет ничего хорошего в том, что вся программа представляет из себя огромную простыню. Это как минимум затрудняет чтение программы. Программа должна быть разбита на логические блоки. В идеале следует добиться следующего: каждый модуль должен быть максимально самостоятельным. У такого подхода следующие преимущества:
В разы ускоряется создание проектов. Проекты собираются как конструктор из кубиков-модулей.
Чтобы не было проблем с регистрами нужно следовать правилам и тщательно отслеживать регистры в каждом модуле. Сохранять и восстанавливать контекст при необходимости.
Память. Максимально исключить ошибки можно единственным способом: использование не абсолютных адресов, а меток. И, естественно, тщательно проверять все операции с памятью, чтобы не выйти за пределы диапазонов.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 09:09:04

Для работ под ассемблером есть два варианта
полная проработка программной модели "с нуля" для малой прикладной задачи
и
модульная сборка из заранее подготовленных библиотек для больших проектов.
Что не исключает и комбинированного стиля.
При модульном варианте каждый из модулей получает дополнительное обрамление функциями хранения используемых ресурсов и обязательными правилами генерации имен используемых ресурсов.
Особых общих правил не имеется.
Примеры из "полнофункциональных" компиляторов (имеющих в составе ассемблер, линкер и библиотекарь) для avrasm2 (как и для c51asm от атмела для mcs51) не применимы из-за специфики отсутствия линкера и библиотекаря в самом составе компилятора.
Однако работа в любом из вариантов вполне реальна.
:beer:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 09:29:51

В avrasm2 для полного счастья не хватает локальных меток.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 17:22:55

Всем здрасте. Собираюсь в проекте использовать ШИМ, но где-то вроде как читал, что регистры сравнения OCR не могут иметь крайние значения (0 и 255). Так ли это???

Симулятор не ругается, но как бы потом в железе не возникло проблем. ШИМ планируется на вкл/выкл, + кнопка без фиксации на функцию вкл/выкл этого безпредела.

Attiny 13, Proteus 8, 9,6 МГц, /8 установлено.
Код:
Спойлер
Код:
;==============
; Main.asm file generated by New Project wizard
;
; Created:   Чт авг 10 2017
; Processor: ATtiny13, 9.6 MHz
; SKDIV/8 programed
; Compiler:  AVRASM (Proteus)
;
;==============

;==============
; DEFINITIONS
;==============
.def temp=r16
.def temp1=r17
.def temp2=r18
.def flag=r19         ; регистр пользовательских флагов
.def count0=r20         ; вспомогательный счетчик0 для отсчета времени
.def count1=r21         ; вспомогательный счетчик1 для отсчета времени
.def shift=r22

.equ on=0         ; признак нажатия кнопки
.equ tA=1         ; флаг прерывания А
.equ tB=2         ; флаг прерывания В
;==============
; VARIABLES
;==============
.dseg
readPin: .byte 1

.cseg


;==============
; RESET and INTERRUPT VECTORS
;==============
.org 0
   rjmp RESET         ; Reset Handler
.org 1
   rjmp EXT_INT0      ; IRQ0 Handler
.org 2
   rjmp PC_INT0         ; PCINT0 Handler
.org 3
   rjmp TIM0_OVF      ; Timer0 Overflow Handler
.org 4
   rjmp EE_RDY          ; EEPROM Ready Handler
.org 5
   rjmp ANA_COMP       ; Analog Comparator Handler
.org 6
   rjmp TIM0_COMPA      ; Timer0 CompareA Handler
.org 7
   rjmp TIM0_COMPB      ; Timer0 CompareB Handler
.org 8
   rjmp WATCHDOG      ; Watchdog Interrupt Handler
.org 9
   rjmp ADC_conv       ; ADC Conversion Handler



 ;RESET         ; Reset Handler
 EXT_INT0:      ; IRQ0 Handler
 PC_INT0:      ; PCINT0 Handler
 TIM0_OVF:      ; Timer0 Overflow Handler
 EE_RDY:       ; EEPROM Ready Handler
 ANA_COMP:       ; Analog Comparator Handler
 ;TIM0_COMPA:      ; Timer0 CompareA Handler
 ;TIM0_COMPB:      ; Timer0 CompareB Handler
 WATCHDOG:      ; Watchdog Interrupt Handler
 ADC_conv:       ; ADC Conversion Handler
reti

RESET:
      ldi r16,RAMEND          ;инициализация стека
      out SPL, r16
      ldi temp,0b11111101      ;установка портов на выход
      out DDRB,temp
      clr temp            ;сброс портов в лог "0"
      out portb,temp
;==============
;инициализация таймеров
;==============
      ldi temp,(1<<WGM00)|(1<<WGM01)|(1<<COM0A1)   ; установка режима Fast PWM
      out TCCR0A,temp
      ldi temp,(1<<CS01)|(1<<CS00)         ; предделитель таймера на 64 (9МГц/8/64=18750 Гц)
      out TCCR0B,temp
      ldi temp,(1<<OCIE0A)            ; разрешить прерывание по совпадению A |(1<<OCIE0B)   
      out TIMSK0,temp
      ldi temp,(1<<OCF0A)|(1<<OCF0B)         ; Установка флагов прерываний
      out TIFR0,temp
      ldi temp,0               ; регистр сравнения А, ШИМ
      out OCR0A,temp
      ldi temp,250               ; регистр сравнения В, для таймера
      out OCR0B,temp
      ldi temp,0               ;очистка счетного регистра
      out TCNT0,temp

   sei

rjmp main


;==============
;      Прерывания
;==============
TIM0_COMPA:
reti

TIM0_COMPB:
      ldi temp,tB      ; установить флаг события "сброс по переполнению B"
      in temp,OCR0A      ; загрузить значение регистра сравнения ШИМ в переменную
      inc temp         ; инкремент значения ШИМ
      breq exit_compA      ; если =0, значит достигли максимального значения, выходим
      out OCR0A,temp      ; иначе загрузить новое значение в ШИМ.
exit_compA:
    reti

;==============
;      CODE SEGMENT
;==============

main:
     
     
exit_main:
  rjmp main
     
     

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 17:31:59

Зачем
ldi temp,tB ,если потом сразу
in temp,OCR0A ?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 18:12:42

Позже все операции планирую вынести из прерывания и оставить только установку флага. А обрабатывать в основном цыкле.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 19:32:09

Всем здрасте. Собираюсь в проекте использовать ШИМ, но где-то вроде как читал, что регистры сравнения OCR не могут иметь крайние значения (0 и 255). Так ли это???...

А подумать ... ?
0 - не имеет смысла, а 255 в принципе вполне применимо, только это то же самое, что и прерывание по переполнению.
Т.Е. ШИМ там не будет - непрерывный сигнал либо 0 либо 1.
8)
Кстати... В Кривом Рогу раньше неплохая контора по кассовой технике была - "резонанс" называется.
Неплохие аппараты делала...
:roll:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 19:47:18

непрерывный сигнал либо 0 либо 1.



Это да. Так даже лучше. Сомнения именно в том - не возникнет ли каких то конфликтов на контроллере.
Смысл в том, что бы по нажатию на кнопку включить одной ногой блок питания, после этого плавно зажечь светодиодные ленты. После повторного нажатия сделать все наоборот, т.е. сначала плавно потушить свет, а потом выключить блок питания.
Сразу отвечу - блок питания на 250 Ватт, на котором висит около 40 метров ленты, поэтому и нужно его отключить что бы не жрал лишнего.

Кстати... В Кривом Рогу раньше неплохая контора по кассовой технике была - "резонанс" называется.
Неплохие аппараты делала...


Не знаю, но название знакомое. :dont_know:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 19:55:00

На выходе ШИМа не непрерывный сигнал в одном из состояний то ли 0, то ли 255. В каком не помню. Принудительно отключал.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 23, 2018 20:12:17

Протеус в осцилографе показывает именно непрерывный сигнал - при OCRA=0 низкий, а на OCR0A=255 высокий. Именно это меня немного и смущает, ведь ему каг бы надо время на переключение пина, а при 0 он должен одновременно и включить и выключить ногу :shock: . Просто нехоцца без особой необходимости увеличивать код сравнениями. Оно в общем то и не критично, но все таки..

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вт мар 27, 2018 13:31:22

Кто подскажет как сбросить флаг DOR в UART, именно с помощью команд,а не на словах как пишут обычно:Бит DOR очищается (сбрасывается в 0) когда данные приняты и пересланы в UDR.,лично у меня не получаеться его скинуть,почему то когда он устанавливается никак не прочитать данные.(((

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вт мар 27, 2018 14:26:21

если смотреть по ATMega16, то никак. Он доступен только для чтения. В даташите на Вашего таракана посмотрите на UCSRA (в 16). под табличкой регистра написаны буквы W и R. Они обозначают возможности регистра:
R (read)- чтение
W (write)- запись
W/R (read/write)- чтение/запись

Изображение

PS: с USART не знаком, но в ДШ написано, этот бит установлен пока буфер приема (UDR) не будет СЧИТАН.

PPS: Люди добрые, когда вы, крича громко хелп ми научитесь нормально оформлять вопрос? Не понятно какой контроллер, не известен код программы, нет никакой информации, от которой можно оттолкнутся для решения ВАШЕГО вопроса. Здесь нет телепатов
Вложения
Без имени.jpg
(11.04 KiB) Скачиваний: 754
Последний раз редактировалось Jetetex Вт мар 27, 2018 15:03:00, всего редактировалось 1 раз.
Ответить