Ну (актуальность) сохраняет или не сохраняет, это еще большой вопрос. Где это у нас например в РФ разработчики дружно перешли на 32 пик, у Вас есть такие данные по росту продаж и числу новых разработок в стране? Наверное это не тот термин, который здесь уместен. Скорее считать что 32 пик по прежнему указан в списках процессоров, которые можно купить. Ну так многое есть такое, что можно купить. Это ни о чем еще не говорит. Так что неубедительно, я бы даже сказал необоснованные заявления.
Вот кстати, где это на форуме актуален 32 пик, не подскажете? Ссылки на развитие интереса приведите и тогда обсудим. А так все это голословно. Нет новых разработок и в основном обсуждаются темы с пиками предыдущих серий, потому как нет задач, которые бы нельзя было бы решить без 32. Так я об этом и пишу - нет задач. За последние 20 лет отмечено бурное падение активности разработчиков и производителей в стране. Нет инженеров, нет программистов, умеющих профессионально корректно работать, используя ГОСТы, нет оборудования и даже банально программаторов и отладочных плат профессионального уровня. Так что не вижу я актуальности в 32. Хотя процессор хороший, я бы даже сказал отличный.
MaxDaniel писал(а):Вот кстати, где это на форуме актуален 32 пик, не подскажете?
Я написал что STM32F103C8T6 выпущенный 10 лет назад сохраняет актуальность в чем можно убедится в соседнем разделе. https://radiokot.ru/forum/viewforum.php?f=59
Так уж сложилось что наиболее популярными современными 32-ух битними МК среди любителей стали STM32, а не PIC или AVR. Немалую роль сыграл тот фактор что они наиболее доступны как по цене так и по средствам разработки. Они по цене на уровне 8-ми битных PIC и AVR. Цена 32-ух битных PIC и AVR значительно выше, а средства разработки дороже.
А по поводу актуальности PIC32. Их используют в основном профи потому что в фирме сказали разработать устройство на этом МК. Любителями они редко используются.
MaxDaniel писал(а):Так я об этом и пишу - нет задач.
У всех задачи разные. Например недавно мне приходилось оцифровывать несколько каналов со скоростью около 50 тысяч выборок в секунду, обрабатывать данные и отправлять в комп по USB. Скорость потока порой доходит до 400 КБ/с. PIC16 или PIC18 смогут гарантировано (пропуски или задержки недопустимы) обеспечить оцифровку, обработку и отправку такого объема данных?
PIC32 вероятно сможет, но для любительского (некоммерческого) проекта намного проще и дешевле взять STM32... Вот поэтому так мало любительских проектов на PIC32.
[uquote="MaxDaniel",url="/forum/viewtopic.php?p=3704620#p3704620"]Но вот вопрос, а что делают форумчане с относительно мощными процами, если не секрет?[/uquote]
Решают задачи, которые на простых МК не решить.
Если у Вас нет задач, то МК и не нужен. Выдумывать синтетические задачи бессмысленно.
Мощные МК - это либо сигнальные приложения, либо коммуникационные с большим трафиком.
Уважаемый MaxDaniel, чем же вам PIC32 не угодил? Ну я допустим сейчас использую 32mx460l512 и именно не в личных разработках. Возможно было бы лучше использовать STM32 но пока было решено(не мной) делать на данных пиках. До этого писал и на pic18 и на atmeg'ax но как то памяти маловато. Например моя библиотека для модуля wiz550 съедает львиную долю памяти atmega324 и при этом я не использую HTML страницы. Помимо этого, толку от одного модуля wiz550 нет, контроллер должен ещё что то делать, т.е. тут и несколько прерываний и работа с остальной периферией. И ещё большое количество пинов идёт в плюс, pic18 нету столько ног. Помимо этого пришлось увеличить количество портов с помощью 74hct273, вот тут уже и частота 80МГц кстати.
Так что задачи есть, и пики используем.
Не может мне ПИК32 ни угодить, ни порадовать. У меня нет под него задач, а те что есть, полностью закрываются ПИК18. Может изменятся задачи, буду думать о том, что больше памяти имеет и скорости. Пока таких нет.
Господа, поделитесь информацией, где почитать про бут область в pic32mx. Вожусь с бутдоадером, хочу разобраться как происходит процесс старта контроллера, какие ячейки за что отвечают и где поменять адрес старта, чтобы основная прошивка стартовала через бут, а потом уже основная прошивка.
Из анализа видно что в буте есть таблица векторов от прерываний которые должны соответствовать основной прошивке.
Это который в гармонии, смотрел я на него, но у него реализация не совсем такая как мне нужно.
Он бут пишет в начало, а основной код нужно располагать после бута. Была попытка сделать так: бут располагаем в конце флешь памяти, а основной код как и положено в начале. Отдельно собрал бут и отдельно прошивку. При старте бута должен перескочить на начало основного кода, но почему то вместо этого получаю reset и старт бута(
Спойлер
alex_ писал(а):бут располагаем в конце флешь памяти, а основной код как и положено в начале.
Неверное решение. Нужно наоборот - бут в начале (он стартует первым), основное приложение - после бута.
Скрипт линкера ещё нужно править, и для бута, и для основной программы.
Исходя из опыта работу бута от микроси, там бут находится в конце прошивки. Основная прошивка в начале. В момент перезаписи бут области прошивки(0xBC)меняется адрес старта программы на адрес бута. А в целом надо научится просто прыгать по адресу: 2 независимые прошивки отдельно откомпилированные, чтобы можно было с первой прошивки прыгнуть на вторую и перезаписать основную прошивку.
[uquote="alex_",url="/forum/viewtopic.php?p=4316923#p4316923"]2 независимые прошивки отдельно откомпилированные, чтобы можно было[/uquote]
Даю на водку...
В МПЛАБе имеется специальная папка проекта. Называется Loadables.
КРАМ писал(а):В МПЛАБе имеется специальная папка проекта. Называется Loadables.
Вещь незаменимая. Как меня выручала эта плюшка, и как её сейчас не хватает в CubeIDE для STM'ок - приходится вручную, в текстовом редакторе склеивать hex'ы
Добавлено after 3 minutes 27 seconds:
[uquote="alex_",url="/forum/viewtopic.php?p=4316923#p4316923"]А в целом надо научится просто прыгать по адресу[/uquote]
КРАМ, спасибо я уже квакнул использую. Когда Аlex предложил править скрипт линкера, вот этой штукой и обошёлся, поскольку пока не представляю как править линкер, примеры конечно почитал но пока не раскурил достаточно Аlex, испробую в ближайшее время
По поводу Loadables есть один минус: к нему не получается применить дефайны, или я пока не вкурил как
//for example
#define set1
#ifdef set1
const int sett[]={1,2,3};
#else
const int sett[]={4,5,6};
#endif
Если разобраться со скриптами линкера, чтобы разные части ложил куда надо и не лез не в свое пространство, то было бы вообще идеально, но дзен пока еще не удалось постигнуть
Аlex, в проекте используется несколько дефайнов, методом комментирования меняется объём и функционал прошивки, в том числе и массив const short settings который находится за пределами прошивки(const unsigned char __attribute__((address(0x1D020000))) ConstTST []= {1,2,3,4,5,6,7,8,9,0};) и жёстко привязан к адресу. По дефайнам всё работало, но компилятор начал творить чудеса и класть часть прошивки сразу за 0x1D020000, чего в принципе быть недолжно(по моему мнению, и мне оно не надо ).
Поэтому пришлось использовать Loadables вроде не совсем удобно, но ложит всё куда надо, но дефайны тут уже не работают
Про скрипт линкера я помню, но пока не раскурил как им пользоваться.
С той проблемой вроде как разобрался, пару костылей вставил, не идеал но уже проехали.
Дошло дело до DMA, и пока ничего не понимаю, часть уже успел курнуть из мануалов, но пока не смог понять как связывать данные.
Задача: по УАРТу принимаются данные, нашёл пример в мануале
Спойлер
/* This code example illustrates the DMA channel 0 configuration for data transfer with pattern
match enabled. Transfer from the UART1 a <CR> ended string, at most 200 characters long */
IEC1CLR=0x00010000; // disable DMA channel 0 interrupts
IFS1CLR=0x00010000; // clear any existing DMA channel 0 interrupt flag
DMACONSET=0x00008000; // enable the DMA controller
DCH0CON=0x03; // channel off, priority 3, no chaining
DCH0ECON=(27 <<8)| 0x30; // start irq is UART1 RX, pattern match enabled
DCH0DAT='\r'; // pattern value, carriage return
// program the transfer
DCH0SSA=KVA_TO_PA(&U2RXREG); // transfer source physical address
DCH0DSA=KVA_TO_PA(ramBuff); // transfer destination physical address
DCH0SSIZ=1; // source size is 1 byte
DCH0DSIZ=200; // destination size at most 200 bytes
DCH0CSIZ=1; // one byte per UART transfer request
DCH0INTCLR=0x00ff00ff; // clear existing events, disable all interrupts
DCH0INTSET=0x00090000; // enable Block Complete and error interrupts
IPC9CLR=0x0000001f; // clear the DMA channel 0 priority and sub-priority
IPC9SET=0x00000016; // set IPL 5, sub-priority 2
IEC1SET=0x00010000; // enable DMA channel 0 interrupt
DCH0CONSET=0x80; // turn channel on
Вроде всё логично, но как то понять не могу, как оно связано DMA-UART2, то что есть адрес источника и этого достаточно? Как он понимает что байт пришёл, где то надо указать в DMA событие прихода байта, чтобы по этому событию произошло копирование?
Это всё исходя из опыта работы с прерываниями, пока всё что нужно не включишь прерывания не будет