Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы начинающих PIC ASM
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 09:30:50

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 440 ]     ... , , , 8, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 20:56:24 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
ТMR0 никогда не именовался "системным". Это обычный 8-битный таймер с очень неудобными делителями и без автоперезагрузки счетного регистра. Его можно использовать в качестве системных тиков, но пихать ртос на 16-й пик - упаси боже. Тем более, какой ртос на ассемблере?
Максимум, отсчитывать интервалы. Да и то, коэффициент неудобный, а автоперезагрузки нет.

Пока_без_кота писал(а):
Я сторонник учиться медленно, неторопливо, но "академически правильно", чтобы потом не переучиваться.

Огорчу сразу - в современном мире вам ассемблер не пригодится вообще. Не теряйте времени на его глубокое изучение. Возьмёте другой микроконтроллер из другой серии или поменяете платформу - заново придется учить. Ассемблер - самый низкоуровневый язык, после прямого машинного кода. На современных, особенно ARM-платформах ассемблер нужен только при очень глубокой отладке. Это вам не 35 инструкций, это раз в 7 больше.
Хотите учиться на перспективу - выбирайте перспективные платформы. То, что вы делаете сейчас - не более, чем ознакомительное, для вхождения в тему, надолго останавливаться на этом не желательно. Ассемблер помогает познать аппаратную часть микроконтроллера и его работу. Но в сложных платформах на ассемблере вы основательно завязнете в самом начале.

КРАМ писал(а):
Потому что переносимый код не использует фичи контроллера, а значит не оптимален ни по архитектуре,

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

КРАМ писал(а):
Гораздо проще, чем найти нужный регистр в структуре периферийного модуля на STM32. :)

Да ну, что вы! В СТМ-е абсолютно линейное адресное пространство, от 0 до 0xFFFFFFFF, на 4 гигабайта адресов на всё - и на прогу, и на ОЗУ, и на регистры, и никаких банков, для каждого периферифного модуля выделен свой диапазон адресов со стартовым адресом. Остальные регистры находятся по порядку за первым регистром модуля и задаются смещением от первого. Адреса регистров одинаковы ВО ВСЕХ СТМ32 от самого младшего F0xx до топового H7xx. Например, адрес регистра выхода порта А будет одинаков во всех СТМах.
Но на практике, искать адрес регистра не потребуется, в заголовочном файле уже все прописано. И в документации любой регистр найти можно в описании периферийного модуля. Регистров и битов у того же таймера или порта гораздо больше, чем в ПИКах, поэтому кажется, что сложнее найти.
Благодаря линейному адресному пространству, не требуется искать, где конкретно находятся регистры модуля. Даже в отладчике, достаточно развернуть список периферийного модуля - и все регистры модуля будут представлены по порядку адресов

_________________
Подпись убрал вместе с автором. aen


Последний раз редактировалось Мурато Мяуконни Вт янв 03, 2017 21:13:11, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 21:12:25 
Первый раз сказал Мяу!

Зарегистрирован: Вс авг 14, 2016 23:00:53
Сообщений: 21
Рейтинг сообщения: 0
Мурато Мяуконни писал(а):
Огорчу сразу - в современном мире вам ассемблер не пригодится вообще. Не теряйте времени на его глубокое изучение.

Не нужно рубить с плеча. MPASM актуален при написании небольших программ и в любительской области. А там, где время - деньги, ессесно, должен быть СИ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 21:27:03 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: -32
Зарегистрирован: Вс ноя 01, 2015 13:13:49
Сообщений: 616
Рейтинг сообщения: 0
Лет 8-10 назад на мастерсе Микрочипа в Питере были озвучены цифры количества пользователей АСМа. Уже тогда они стремились к нулю. Сейчас эти цифры наврядли пересекают границы 1%.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 21:29:52 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
Вы знаете, даже небольшую любительскую программу я напишу с нуля гораздо быстрее и проще на современной архитектуре и не на ассемблере. И дело не столько во времени/деньгах, сколько простоте и удобстве. Попробуйте так же легко записать на ассемблере сишное выражение if ((m>3) && (m<10)) { for (int i = 0; i<20; i++) { a + i } }. Подобное запросто может встретиться в несложной любительской поделке типа термостата или мигалки.

Тому челу, который желал учиться так, чтобы не переучиваться, надо смотреть на перспективу. Рано или поздно он начнет делать более сложные поделки и тут он уткнется в сложность реализации на ассемблере и нехватку ресурсов микроконтроллера. Поневоле придется переучиваться - переход на новые ПИКи или на ПИК18 потребует переучивания ассемблерных инструкций.
На ассемблере можно познать принципы работы внутрянки. И помигать светодиодами. Или посмотреть отладку. Но чем дальше будете идти, тем больше сил будете тратить на ассемблерную писанину.

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 21:39:58 
Первый раз сказал Мяу!

Зарегистрирован: Вс авг 14, 2016 23:00:53
Сообщений: 21
Рейтинг сообщения: 0
Мурато Мяуконни писал(а):
Вы знаете, даже небольшую любительскую программу я напишу с нуля гораздо быстрее и проще

Любительское - не значит что - то маленькое. Оно может быть и большим, и очень большим, но без дедлайна.
Когда же время деньги, то это, конечно, СИ.
Таким образом любитель выбирает себе язык по вкусу, а профи под задачу.

Мурато Мяуконни писал(а):
Рано или поздно он начнет делать более сложные поделки и тут он уткнется в сложность реализации на ассемблере и нехватку ресурсов микроконтроллера. Поневоле придется переучиваться - переход на новые ПИКи или на ПИК18 потребует переучивания ассемблерных инструкций.

18 - е пики не так страшны, как их малюют. Таже система команд, ну, чуток расширенная.
Что касаемо перспектив, то здесь нужно уточнить у нашего начинающего, что именно подразумевается ? Если коммерческое программирование, то вы правы.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 21:53:09 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
Ничоси "чуток". Вдвое. 75 инструкций против 35. Ну а USB на ассемблере сколько страниц текста займет?
Очень большое, пусть и любительское, делать на ассемблере за неограниченное время - занятие весёлое, конечно. Дело не только во времени. Дело в объемах текста. И в головной боли при отыскании ошибок и устаканивании всего этого объема.

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 22:01:36 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 440
Зарегистрирован: Чт дек 27, 2012 20:46:09
Сообщений: 2024
Откуда: Болгария, г. Лом
Рейтинг сообщения: 0
Ето въражение на С "BuffIn->d |= ((_buff_TMR1[cnt] /512 ) & 0x01) << cnt /2 -1;"
В листинге въглядить так
Спойлер
Код:
330:                                 BuffIn->d |=  ((_buff_TMR1[cnt] /512 ) & 0x01) << cnt /2 -1;
  00D2    3570     LSLF 0x70, W
  00D3    3EA0     ADDLW 0xa0
  00D4    0086     MOVWF 0x6
  00D5    0187     CLRF 0x7
  00D6    3F40     MOVIW [0]FSR1
  00D7    00F9     MOVWF 0x79
  00D8    3F41     MOVIW [1]FSR1
  00D9    00FA     MOVWF 0x7a
  00DA    3009     MOVLW 0x9
  00DB    36FA     LSRF 0x7a, F
  00DC    0CF9     RRF 0x79, F
  00DD    0B89     DECFSZ 0x9, F
  00DE    28DB     GOTO 0xdb
  00DF    0879     MOVF 0x79, W
  00E0    3901     ANDLW 0x1
  00E1    00FB     MOVWF 0x7b
  00E2    0870     MOVF 0x70, W
  00E3    00FC     MOVWF 0x7c
  00E4    36FC     LSRF 0x7c, F
  00E5    037C     DECF 0x7c, W
  00E6    0A89     INCF 0x9, F
  00E7    28E9     GOTO 0xe9
  00E8    35FB     LSLF 0x7b, F
  00E9    0B89     DECFSZ 0x9, F
  00EA    28E8     GOTO 0xe8
  00EB    0842     MOVF 0x42, W
  00EC    3E06     ADDLW 0x6
  00ED    0086     MOVWF 0x6
  00EE    0187     CLRF 0x7
  00EF    0801     MOVF 0x1, W
  00F0    393F     ANDLW 0x3f
  00F1    00FD     MOVWF 0x7d
  00F2    087B     MOVF 0x7b, W
  00F3    04FD     IORWF 0x7d, F
  00F4    0801     MOVF 0x1, W
  00F5    067D     XORWF 0x7d, W
  00F6    39C0     ANDLW 0xc0
  00F7    067D     XORWF 0x7d, W
  00F8    0081     MOVWF 0x1


То же самое на ASM
Код:
331:                              #asm
332:                              movlb    0
  00F9    0020     MOVLB 0
333:                              lsrf      _TI+1,f   //старшата част /2
  00FA    36BF     LSRF 0x3f, F
334:                              movf    _dMask,w
  00FB    084B     MOVF 0x4b, W
335:                              btfss      _TI+1,0   //имаме ли 1
  00FC    1C3F     BTFSS 0x3f, 0
336:                              movlw    0
  00FD    3000     MOVLW 0
337:                              movwf   _asm_1i
  00FE    00C8     MOVWF 0x48
338:                              lslf      _dMask,f
  00FF    35CB     LSLF 0x4b, F
339:                              #endasm


И примеров таких - море.

Для меня умение работать и на С и на ASM самое что надо.
Я правда здесь слукавил мало но ...
Спойлер
Код:
unsigned char check23(unsigned char s1,unsigned char s2)
{      // 137 машинни инструкции  ASM
   // 215 машинни инструкции  C
//   asm_1 = (unsigned char)&(Buff2Of3[s1].a[0]);
//   asm_2 = (unsigned char)&(Buff2Of3[s2].a[0]);
   asm_1 = (unsigned char)(buffarr[s1]->a[0]);
   asm_2 = (unsigned char)(buffarr[s2]->a[0]);
   asm_3 = MASK_23;
   #asm
      movf      _asm_1,w
      movwf   fsr0l      //*n
      clrf      fsr0h
      movf      _asm_2,w
      movwf   fsr1l      //*n
      clrf      fsr1h
      movlw   6
      addwf   fsr0l
      addwf   fsr1l      //на ->d - дискретните
//   i = (*(n+6) & 0x3f) ^ (*(v+6) & 0x3f);   //цифровата част - десните 6 бита
      movf      indf0,w
      andlw   0x3f
      movwf   _asm_1   // (n+6) & 0x3f
      movf      indf1,w
      andlw   0x3f      // W = (v+6) & 0x3f
      xorwf      _asm_1,f   // (n+6) & 0x3f ^  (v+6) & 0x3f

      btfss      status,2   //zero ?
      goto      check23_exit
//дискретните са равни => продължаваме
//   for(a1=0;asm_1==0 && a1<6;a1++)
      movlw   6
      subwf   fsr0l
      subwf   fsr1l      //връщаме се в началото на масивите
      movwf   _asm_2   //ще въртиме за 6 променливи      
//   asm_1 = (*n++ & MASK_23) ^  (*v++ & MASK_23);
check23_loop
      moviw   fsr0++
      andwf   _asm_3,w   //MASK_23
      movwf   _asm_1   // (n+x) & 0xf0
      moviw   fsr1++
      andwf   _asm_3,w   //MASK_23
      xorwf      _asm_1,f   // (n+6) & 0x3f ^  (v+6) & 0x3f
      btfss      status,2   //zero ?
      goto      check23_exit
      decfsz   _asm_2
      goto      check23_loop      
check23_exit
   #endasm
   return(!asm_1);
/*
// горното на С
   unsigned char a1,*n,*v;
   unsigned char   i;
   n = &(Buff2Of3[s1].a[0]);
   v = &(Buff2Of3[s2].a[0]);
   i = (*(n+6) & 0x3f) ^ (*(v+6) & 0x3f);   //цифровата част - десните 6 бита
   for(a1=0;i==0 && a1<6;a1++)
      i += (*n++ & MASK_23) ^  (*v++ & MASK_23);
   return(!i);
*/
}

Здесь внизу С код и его еквивалент на ASM и расчет
// 137 машинни инструкции ASM
// 215 машинни инструкции C

_________________
Лом - ето город в Болгарии, а не инструмент юстировки електроники.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 22:11:13 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
Всё правильно, сишное выражение рассматривается как операции с переменными, в то время как на ассемблере деление на константу 512 можно записать как сдвиги и найти вручную наиболее выгодный алгоритм.
Но вот генерируемый из Си код зависит от уровня оптимизации. поиграйтесь с оптимизацией и убедитесь в изменении размеров.
Однако, попробуйте-ка писать на ассемблере на ARM-платформах - поседеете. Хотя, на тех платформах обычно не требуется для деления что-то изобретать на ассемблере. Там стоят аппаратные одноцикловые умножители и даже делители.

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 22:17:10 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Ох, сколько всего понаписали. Если всех начну цитировать, то запутаюсь, так что отвечу всем и сразу.
В будущем я планирую учить Си, но только когда более-менее буду плавать в ассемблере. Я просто не могу себе позволить учить что серьезное не разобравшись с основами. А Си с его синтаксисом и возможностью "выстрелить себе в ногу" я считаю серьезным делом. И как Вы видите из моих вопросов, и моего кода, мне еще учиться и учиться. Причем учусь я пока просто в свое удовольствие, никто меня в спину не гонит, учебные задачи я себе придумываю сам. В ближайшем обозримом будущем профессионально заняться программированием МК я вряд ли смогу (уровень не тот), но вообще в планах на далекое туманное будущее есть такая мечта. Прошу прощения, что своими вопросами вызвал стычки между участниками форума, желаю каждому из дискуссии почерпнуть что-то новое, и остаться в +.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Вт янв 03, 2017 22:21:48 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 440
Зарегистрирован: Чт дек 27, 2012 20:46:09
Сообщений: 2024
Откуда: Болгария, г. Лом
Рейтинг сообщения: 0
Мурато Мяуконни писал(а):
попробуйте-ка писать на ассемблере на ARM-платформах - поседеете


Последнее что делал (большое) в связка С, ASM и язък въсокого уровня бъло на 286, 386 (как давно ето бъло - 1986-91). С ARM не знаком, но вряд ли ASM у него сложнеее чем у 386.

_________________
Лом - ето город в Болгарии, а не инструмент юстировки електроники.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 02:10:47 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 607
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3715
Рейтинг сообщения: 8
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Цитата:
Однако, попробуйте-ка писать на ассемблере на ARM-платформах - поседеете.

Ассемблер Cortex-M0 поддерживает всего 56 инструкций, включая 6 32-битных (остальные 16-битные), из которых как минимум 5 используются исключительно редко. Писать небольшие проекты на ассемблере под CM0 тривиально и только лишь дело привычки. У меня опубликованы несколько простых проектов под ARM-CM0 на ассемблере, например, здесь или здесь.

У архитектур CM3/CM4 инструкций уже больше, в основном (но не только) за счёт DSP и инструкций с плавающей точкой. Однако, за счёт поддержки большего числа 32-битных инструкций поддерживается больше режимов адресации и вообще добавляется гибкость инструкций. Если говорить про простые проекты типа по ссылкам выше, программировать их на ассемблере под CM3/CM4 даже проще и удобнее чем для CM0. У них, в частности, уже и целочисленное деление имеется и для умножения опций больше. Может только лишь первый-второй проект пойдёт медленно - далее появятся наработки и темпы ускорятся.

Не спорю и согласен, что правильнее писать проекты на С, даже если время не поджимает. Однако, приверженцам программирования на ассемблере перейти с 8051/AVR8/PIC на ARM в плане самого ассемблера не составит никакого труда. Больше времени уйдёт на освоение различий в архитектуре и регистров конфигурации. С часто встречающимся высказыванием, что регистров у Кортексов уйма и в них легко заблудиться не согласен. Да, регистров в них больше, но так могут говорить только те, кто не пробовал, или попробовал лишь в течении часа, или дольше но просто не дано...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 05:50:30 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21837
Откуда: Московская область, Фрязино
Рейтинг сообщения: 8
sdn_ писал(а):

Ничего не мешало микрочипу выбрать любой другой банк для TMR0.

Расстановка регистров по банкам позволяет в подавляющем числе правильно написанных программ практически никогда банки не переключать, оставляя их указатель на нулевом. И расположение TMR0 в этом нулевом тому в помощь. Кроме того, этот таймер входит в число регистров которые ВСЕГДА БЫЛИ и ЕСТЬ в МК этой платформы. То есть даже тогда, когда банков нет вообще. Вспомним про base-семейство с 12 разрядным форматом команд...

sdn_ писал(а):
Вам не сложно, а ему будет сложно, если в четырех банках путается.

И тут Вы выдумали. Он не в банках путается, а в способах их переключения. Расположение регистров по банкам ему известно назубок.

Добавлено after 38 minutes 45 seconds:
Мурато Мяуконни писал(а):
ТMR0 никогда не именовался "системным". Это обычный 8-битный таймер с очень неудобными делителями и без автоперезагрузки счетного регистра. Его можно использовать в качестве системных тиков, но пихать ртос на 16-й пик - упаси боже. Тем более, какой ртос на ассемблере?
Максимум, отсчитывать интервалы. Да и то, коэффициент неудобный, а автоперезагрузки нет.

Во первых, РТОС есть даже под 10-ые ПИКи.
Во-вторых, РТОС изначально написан именно на ассемблере, а в Си Вы его лишь применяете.
В-третьих, автоперезагрузки нет и в TMR1, но никто не мешает ее делать ручками в прерывании с коррекцией на латентность.
В-четвертых, Вы старайтесь думать собственной головой, а не искать шаблоны у чужого дяди... Системным нулевой таймер является по сути и по причине его вполне определенного использования в РТОСе.
Мурато Мяуконни писал(а):
Огорчу сразу - в современном мире вам ассемблер не пригодится вообще. Не теряйте времени на его глубокое изучение. Возьмёте другой микроконтроллер из другой серии или поменяете платформу - заново придется учить. Ассемблер - самый низкоуровневый язык, после прямого машинного кода. На современных, особенно ARM-платформах ассемблер нужен только при очень глубокой отладке. Это вам не 35 инструкций, это раз в 7 больше.
Хотите учиться на перспективу - выбирайте перспективные платформы. То, что вы делаете сейчас - не более, чем ознакомительное, для вхождения в тему, надолго останавливаться на этом не желательно. Ассемблер помогает познать аппаратную часть микроконтроллера и его работу. Но в сложных платформах на ассемблере вы основательно завязнете в самом начале.

Снова по пунктам.
1. Ассемблер ДЛЯ СЕРЬЕЗНЫХ ЗАДАЧ необходим еще более, чем для простых, а паче даже больше, чем Си. Последнее потому, что на Си не реализуется как раз самые узкие платформозависимые решения. А именно они позволяют сделать коммерческое решение конкурентным. То есть выиграть в цене/качестве. Писать только на Си - значит получать стандартное решение как у всех и выигрывать конкуренцию только за счет маржинальности проекта.
Тут что кому нравится.
2. Нащщет количества инструкций Вы не в курсе. Базовое их число и в ARM и в иных RISC-платформах невелико и среди них часто используется всего полтора десятка. Остальное - расширение по способам адресации и никак не влияет на запоминание этих команд.
3. Нет никаких "перспективных" платформ. Есть только целесообразные для данной задачи. Ваша сентенция про "перспективность" имеет лишь целью сократить время и трудозатраты на ИЗУЧЕНИЕ. Что для настоящего инженера нонсенс.



Мурато Мяуконни писал(а):
КРАМ писал(а):
Потому что переносимый код не использует фичи контроллера, а значит не оптимален ни по архитектуре,

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

В пределах одного семейства АСМ абсолютно переносим. С точностью до ветвления ifdef. А при смене платформы даже у одного производителя Си непереносим настолько, насколько иная платформа дает преимущества над прежней. Переносимый код нивелирует возможности разных платформ и делает переход с одной на другую бессмысленным занятием. Все это особенно заметно в современных архитектурах с независимой от ядра периферии. Работа с такой периферией вообще не дает шансов на переносимость любого кода.

Мурато Мяуконни писал(а):
КРАМ писал(а):
Гораздо проще, чем найти нужный регистр в структуре периферийного модуля на STM32. :)

Да ну, что вы! В СТМ-е абсолютно линейное адресное пространство, от 0 до 0xFFFFFFFF, на 4 гигабайта адресов на всё - и на прогу, и на ОЗУ, и на регистры, и никаких банков, для каждого периферифного модуля выделен свой диапазон адресов со стартовым адресом. Остальные регистры находятся по порядку за первым регистром модуля и задаются смещением от первого. Адреса регистров одинаковы ВО ВСЕХ СТМ32 от самого младшего F0xx до топового H7xx. Например, адрес регистра выхода порта А будет одинаков во всех СТМах.
Но на практике, искать адрес регистра не потребуется, в заголовочном файле уже все прописано.

Вы странно пишите НЕ О ТОМ.
Одинаковое расположение регистров справедливо и для младших ПИКов. И писал я совсем не про физический адрес, знать который и для ПИКов нет никакой необходимости. Для них адрес прописан так же в заголовочном файле. Речь шла о том, что в структуре управляющих периферийным модулем регистров нужно найти ИМЯ того регистра, который содержит тот самый элемент управления, который необходим. То есть нужно держать в голове изрядное количество АББРЕВИАТУР, либо шнырять по даташиту в поисках оного.

В завершение. Я сам пишу и на Си и на АСМе. А иногда на смешанном коде. Потому что иначе реализовать задуманное НА ЛЮБОЙ платформе не выйдет. Сигнальные приложения требуют либо очень высокой мощности ядра, что делает МК весьма дорогим, либо специфической для задачи архитектуры, что позволяет достичь целей при умеренной цене,но требует некоторого времени на нестандартное алгоритмическое решение.
В серьезных задачах собственно разработка алгоритма и написание кода занимают слишком мало места в технологической цепочке выпуска нового изделия, чтобы экономить на них. Зато ущерб от такой "экономии" способен обрушить конечный результат, сделав изделие неконкурентным в близкой и среднесрочной перспективе.

Добавлено after 8 minutes 48 seconds:
Ser60 писал(а):
С часто встречающимся высказыванием, что регистров у Кортексов уйма и в них легко заблудиться не согласен. Да, регистров в них больше, но так могут говорить только те, кто не пробовал, или попробовал лишь в течении часа, или дольше но просто не дано...

Регистров действительно уйма. Но заблудиться в них тому, кто их постоянно использует конечно невозможно. Тем более, что есть даташит. В этом смысле можно любой МК критиковать за объем даташита... :)
Но Вы же как никто другой понимаете, что этот объем прямо пропорционален возможностям МК.
Просто нужно его изучить.


Последний раз редактировалось КРАМ Ср янв 04, 2017 07:23:06, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 06:25:42 
Первый раз сказал Мяу!

Зарегистрирован: Вс авг 14, 2016 23:00:53
Сообщений: 21
Рейтинг сообщения: 0
КРАМ писал(а):
расстановка регистров по банкам позволяет в подавляющем числе правильно написанных программ практически никогда банки не переключать, оставляя их указатель на нулевом.

Изначально вопрос был в том, почему именно в 0 - м банке, а не в одном и том же. Один и тот же банк может быть и 30 - м банком.
КРАМ писал(а):
Кроме того, этот таймер входит в число регистров которые ВСЕГДА БЫЛИ и ЕСТЬ в МК этой платформы.

Значит возращаемся к моему предположению о историчности.
Короче, позвоните в микрочип, вместо того, чтобы переливать из пустого в порожнее. :)))
КРАМ писал(а):
И тут Вы выдумали. Он не в банках путается, а в способах их переключения. Расположение регистров по банкам ему известно назубок.

Именно это я подразумевал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 07:05:44 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21837
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
sdn_ писал(а):
Именно это я подразумевал.

Ваши мысли не соответствуют Вашим текстам, увы.
Последний Ваш коммент тому подтверждение. Кроме жонглирования словами смысла нет.
Вообще.

Добавлено after 14 minutes 37 seconds:
sdn_ писал(а):
Изначально вопрос был в том, почему именно в 0 - м банке, а не в одном и том же. Один и тот же банк может быть и 30 - м банком.

Нулевой банк содержит все наиболее употребимые регистры. Туда отнесли не только нулевой таймер, но и порты, регистр флагов, все таймеры и управление таймерами и т.п. То есть минимизированы потуги переключения банков.
Вопрос о КОНКРЕТНОМ НОМЕРЕ этого базового банка не обсуждался вообще, но именно этот банк является дефолтным после сброса. Поэтому естественно желание автора вопроса возвращать код на этот нулевой банк.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 08:09:56 
Открыл глаза

Зарегистрирован: Пт янв 11, 2013 10:54:43
Сообщений: 60
Рейтинг сообщения: 0
КРАМ писал(а):
Ассемблер ДЛЯ СЕРЬЕЗНЫХ ЗАДАЧ необходим еще более, чем для простых, а паче даже больше, чем Си.
Здесь не помешает конкретизировать понятие "СЕРЬЕЗНАЯ ЗАДАЧА", а то можно подумать, что на Си вашу задачу эффективно не решить.
КРАМ писал(а):
Последнее потому, что на Си не реализуется как раз самые узкие платформозависимые решения.
Код этих узких решений на Си выглядит как на АСМ, а примерчик для PIC16 нереализуемости на Си платформозависимых задач для общего развития привели бы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 08:23:55 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
КРАМ писал(а):
Во первых, РТОС есть даже под 10-ые ПИКи.

Можно и слона научить танцевать, но смысл??? Любая РТОС отъедает под себя ресурсы. На ПИК10 всё легко пишется и без РТОС. Че там, дергать тремя ножками без РТОС не получится чтоль?
КРАМ писал(а):
Вы странно пишите НЕ О ТОМ.
Речь шла о том, что в структуре управляющих периферийным модулем регистров нужно найти ИМЯ того регистра, который содержит тот самый элемент управления, который необходим. То есть нужно держать в голове изрядное количество АББРЕВИАТУР, либо шнырять по даташиту в поисках оного.

Нет, ну почему же, вы завели разговор про регистры СТМ-а, вот я и пишу про них. Вы посмотрите на возможности СТМ32, вы поймете зачем столько регистров и битов. А запомнить их довольно просто. Например, чтобы настроить порт на вход/выход, нужно обратиться к регистру GPIOA->MODER, а записать в портA число с помощью GPIOA->ODR. Первое слово - группа регистров, второе слово - регистр в группе.
В ПИКах с их банками нужно помнить, в каком банке сидит тот или иной регистр модуля. Надо помнить, что регистры порта находятся в разных банках - TRISA и PORTA. Операции с ЕЕПРОМ - эт ваапще скакание по банкам.
Биты флагов прерываний вообще раскиданы по разным регистрам, с первого раза не догадаешься. INTCON, PIR1, PIE1...
КРАМ писал(а):
Вы старайтесь думать собственной головой, а не искать шаблоны у чужого дяди...

Если бы я не думал собственной головой, навряд ли я бы работал с чем-то сложнее ПИКов.

КРАМ писал(а):
1. Ассемблер ДЛЯ СЕРЬЕЗНЫХ ЗАДАЧ необходим еще более, чем для простых, а паче даже больше, чем Си. ... А именно они позволяют сделать коммерческое решение конкурентным

Ну уж вы наговорите сейчас. Конкурентоспособным товар делает НЕ ассемблер, а продуманность кода, отсутствие багов и недоработок. Узкоплатформенные решения? А это какие? Какая разница, обращаюсь я к периферии на асме или на си?
КРАМ писал(а):
2. Нащщет количества инструкций Вы не в курсе.

Очень даже в курсе - M4 - более 150, M7 - более 200. А если используете только полтора десятка, то зачем вообще напрягаться на ассемблере.
КРАМ писал(а):
3. Нет никаких "перспективных" платформ

Есть. Без знания Кортекса вас мало куда возьмут. Знание платформы ПИК16 - неперспективно, устаревшая и дорогая платформа. Для любительства сойдет, но тоже дорого. Особенно для любительства. Отваливать за неперспективный PIC16F876A столько же денег, сколько за STM32F103 со всеми наворотами - это кощунство.
КРАМ писал(а):
То есть минимизированы потуги переключения банков

Минимизированы, говорити? Ну-ну. Чего только стоит классическая проверка возникновения прерывания. Флаг прерывания в одном банке, а бит разрешения прерывания - в другом банке. И всё это на фоне единственного вектора прерываний!

_________________
Подпись убрал вместе с автором. aen


Последний раз редактировалось Мурато Мяуконни Ср янв 04, 2017 08:31:55, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 08:29:33 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21837
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Vano79 писал(а):
КРАМ писал(а):
Ассемблер ДЛЯ СЕРЬЕЗНЫХ ЗАДАЧ необходим еще более, чем для простых, а паче даже больше, чем Си.
Здесь не помешает конкретизировать понятие "СЕРЬЕЗНАЯ ЗАДАЧА", а то можно подумать, что на Си вашу задачу эффективно не решить.

Не решить. Для dsPIC33 DSP-команды и команды do/repeat на Си не поддерживаются, а значит реализовать возможности цифровой обработки на недорогом и очень мощном контроллере нет возможности. Либо писать АСМ вставки, либо писать на АСМ все. Последнее оказывается много проще, если учесть необходимость соблюдения соглашений по передаче переменных в смешанном коде и рисков с этим связанных. Практика показывает, что на чистом АСМе я реализую сходню задачу быстрее и эффективнее, чем мои коллеги на смешанном коде. Но есть класс задач, где АСМ не эффективен. Это реализация стеков протоколов, где проще допилить на Си представленный разработчиком референсный код, нежели писать его реализацию на чистом АСМе. Тогда в ход идет смешанный код, если чистый Си не спасает.
Vano79 писал(а):
а примерчик для PIC16 нереализуемости на Си платформозависимых задач для общего развития привели бы.

Вы совершенно исказили смысл сказанного мной. Выше я привел пример нереализуемости на Си. А что касается 16-х, то я говорил об ОДИНАКОВОЙ переносимости в пределах этой платформы как Си, так и АСМа. Читабельность на Си несколько выше, да и то все зависит от манеры написания кода. Быстрый код на Си обычно связан с расчетом указателей, что делает код плохо читаемым.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 08:39:11 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
Недорогом и очень мощном? Ой, да вы шутник однако! :) серьезно, между прочим. Но это вопрос предпочтений. Кто на чем умеет, на том и делает.

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 08:51:41 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21837
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Мурато Мяуконни писал(а):
дергать тремя ножками без РТОС не получится чтоль?

РТОС нужен не для дерганья тремя ножками, а для РАЗДЕЛЕНИЯ РЕСУРСОВ на исполняемые потоки.
Мурато Мяуконни писал(а):
Вы посмотрите на возможности СТМ32, вы поймете зачем столько регистров и битов. А запомнить их довольно просто. Например, чтобы настроить порт на вход/выход, нужно обратиться к регистру GPIOA->MODER, а записать в портA число с помощью GPIOA->ODR. Первое слово - группа регистров, второе слово - регистр в группе.

Я пишу на STM32 и рассказывать мне как и где искать не нужно. Однако попробуйте настроить перекрестную синхронизацию таймеров и Вы уже не будете столь убедительны... :)
Мурато Мяуконни писал(а):
В ПИКах с их банками нужно помнить, в каком банке сидит тот или иной регистр модуля. Надо помнить, что регистры порта находятся в разных банках - TRISA и PORTA. Операции с ЕЕПРОМ - эт ваапще скакание по банкам.
Биты флагов прерываний вообще раскиданы по разным регистрам, с первого раза не догадаешься. INTCON, PIR1, PIE1...
В PIE1 нет никаких флагов. Это регистр разрешений. В INTCON находятся немаскируемые через PEIE прерывания. Это отражает структуру контроллера прерываний. Вы просто не разобрались как это работает в реальном коде. И искать по банкам там ничего не надо. Регистров в 16-х так мало, что запоминается все элементарно.
Мурато Мяуконни писал(а):
Если бы я не думал собственной головой, навряд ли я бы работал с чем-то сложнее ПИКов.

Это Вы на СТМ32 намекаете? :))) :))) :))) Или на ADSP-SHxxx? :tea:
Мурато Мяуконни писал(а):
Очень даже в курсе - M4 - более 150

А в чем разница между знаковым или беззнаковым умножением с разными типами адресации? На самом деле это одна и та же команда.
На то оно и RISC архитектура. Иначе АЛУ быстрым не сделать.
Мурато Мяуконни писал(а):
Без знания Кортекса вас мало куда возьмут.

Важно не куда возьмут, а сколько потом будут денег платить. А это зависит не от знания Кортексов,а уменя РЕАЛИЗОВАТЬ ПОСТАВЛЕННУЮ ЗАДАЧУ. Вы все про 16-ые ПИКи, да еще и без учета новых чипов, а я про РАЗНЫЕ ПЛАТФОРМЫ вообще. И совсем не обязательно АРМ. Я имел ввиду, что "перспективные" платформы есть лишь у тех, кто хочет сесть на одну лошадь и рулить ей как можно дольше. А это мало чем отличается от ортодоксов 16-х ПИКов.
ЗЫ. Кстати, я на 16-х последний проект делал примерно год назад, да и то это была третьестепенная работа. :tea:

Добавлено after 2 minutes 4 seconds:
Мурато Мяуконни писал(а):
Недорогом и очень мощном? Ой, да вы шутник однако! :) серьезно, между прочим. Но это вопрос предпочтений. Кто на чем умеет, на том и делает.

А Вы попробуйте что нибудь сделать на dsPIC33EP512GM304 за 4 доллара и мы посмотрим куда пригоден M3... :tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы начинающих PIC ASM
СообщениеДобавлено: Ср янв 04, 2017 09:07:53 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -27
Зарегистрирован: Сб ноя 19, 2016 21:05:48
Сообщений: 203
Рейтинг сообщения: 0
КРАМ писал(а):
Расстановка регистров по банкам позволяет в подавляющем числе правильно написанных программ практически никогда банки не переключать, оставляя их указатель на нулевом. И расположение TMR0 в этом нулевом тому в помощь..

Как бы это помягче сказать то... Вы ооооочень глубоко неправы.
Если активно работаете с периферией микроконтроллера, а не делаете простых показывалок с софтовыми интерфейсами, то вам ну никак не удастся оставаться в нулевом банке. Обычная проверка возникновения/разрешения прерывания вас будет гонять между нулевым и первым банком. Работа с интерфейсами или АЦП тоже заставляет активно переключать банки. А уж коль потребление ОЗУ выходит за пределы первого банка, то и подавно.
На TMR0 свет клином не сошелся!
КРАМ писал(а):
РАЗДЕЛЕНИЯ РЕСУРСОВ на исполняемые потоки.

Гдеее?? Каких ресурсов? В ПИК10 - каких ресурсов, какие потоки? Таймер да АЦП, 4 МГц. Вот не надо городить ересь там, где решается задача напрямую, без выёживания.

КРАМ писал(а):
STM32 ... Однако попробуйте настроить перекрестную синхронизацию таймеров и Вы уже не будете столь убедительны...

А что там сложного??? Нарисуйте на бумажке схематично связи - и настраивайте, делов то! Да, много регистров, много битов. Но все таймеры порождены от одного TIM1 и отличаются сокращенным набором возможностей. А для системного таймера и нужд РТОС там стоит таймер в ядре.
А уж про возможности DMA, да в связке с таймерами, да для аппаратной загрузки значений регистров таймеров - это вообще отдельная песня. Да, объемно, но зато какие возможности.

_________________
Подпись убрал вместе с автором. aen


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 440 ]     ... , , , 8, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y