Перейти к содержанию
    

fpga_student

Свой
  • Постов

    302
  • Зарегистрирован

  • Посещение

Весь контент fpga_student


  1. Давайте всеже завершим правильными регэкспами тему, что началась с регэкспов неправильных. Правильные regexp-ы для PowerGrip. Который оказался абсолютный чемпион в этом деле. \)\s*[\n\r]+\s*\{\s*[\n\r]+ ){\n do\s*[\n\r]+\s*\{\s*[\n\r]+ do{\n else\s*[\n\r]+\s*\{\s*[\n\r]+ else{\n \"C\"\s*[\n\r]+\s*\{\s*[\n\r]+ "C"{\n enum\s*[\n\r]+\s*\{\s*[\n\r]+ enum{\n struct\s*[\n\r]+\s*\{\s*[\n\r]+ struct{\n union\s*[\n\r]+\s*\{\s*[\n\r]+ union{\n \=\s*[\n\r]+\s*\{\s*[\n\r]+ = {\n PROTOTYPE\s*[\n\r]+\s*\{\s*[\n\r]+ PROTOTYPE {\n Этот набор регэкспов переводит в cтиль «K&R» любое форматирование с вынесенной на следующую строку открывающей скобкой.
  2. USART упал с неправильных регэкспов в неправильном туле. Завершение истории - правильные регэкспы в правильном туле.
  3. Да, таки дожал PowerGrep - он самый крутой. Фантастическая скорость работы, раз в 10 быстрее ближайшего конкурента. Погрипано этим набором регэкспов 500 метров сорцов на самом отстойном ноуте чуть не 2 ядра 1.5ГГц за 10 минут. Единственный тул что может отработать без ошибок регэкспы на несколько строк. \)\s*[\n\r]+\s*\{\s*[\n\r]+ ){\n do\s*[\n\r]+\s*\{\s*[\n\r]+ do{\n else\s*[\n\r]+\s*\{\s*[\n\r]+ else{\n \"C\"\s*[\n\r]+\s*\{\s*[\n\r]+ "C"{\n enum\s*[\n\r]+\s*\{\s*[\n\r]+ enum{\n struct\s*[\n\r]+\s*\{\s*[\n\r]+ struct{\n union\s*[\n\r]+\s*\{\s*[\n\r]+ union{\n \=\s*[\n\r]+\s*\{\s*[\n\r]+ = {\n PROTOTYPE\s*[\n\r]+\s*\{\s*[\n\r]+ PROTOTYPE {\n
  4. Еще двое суток ужасных мучений и наконец-то удалось подобрать программу и регэкспы которые худо-бедно работают. Походу все что работает с регэкспами донельзя глюкавое в многострочных выражениях. Единственное кого недожал - PowerGrep - уж больно у него странный интерфейс(( хотя возможно он лучший из всех) Итоговые замены делает Multiple Search and Replace v.6.9. Тот же самый набор регэкспов в AdvanceFind&Replace 9.0 периодически недочищает символы перевода строки. Этот набор регэкспов переводит в рациональный "классический K&R" стиль любой другой с торчащей открывающей скобкой: \)\s*[\n\r]+\s*\{[\n\r]+ ){\n do\s*[\n\r]+\s*\{[\n\r]+ do{\n else\s*[\n\r]+\s*\{[\n\r]+ else{\n \"C\"\s*[\n\r]+\s*\{[\n\r]+ "C"{\n enum\s*[\n\r]+\s*\{[\n\r]+ enum{\n struct\s*[\n\r]+\s*\{[\n\r]+ struct{\n union\s*[\n\r]+\s*\{[\n\r]+ union{\n \=\s*[\n\r]+\s*\{[\n\r]+ = {\n PROTOTYPE\s*[\n\r]+\s*\{[\n\r]+ PROTOTYPE {\n зы. Периодически ОНО оставляет пробел, вопреки всему(( Те получается ) {, вместо ){. Мне уже болт, главное текст занимает минимум по высоте места, кому охота приключений может дотанцевать сам. Попытаться)
  5. в файнридере это делается в 2 кнопки)) но потом еще нужно вычистить мусор. Ну и причесать
  6. Да уже. Мне казалось гдето видел готовое красивое
  7. Хочу чтобы был человеческий файл, как у китайцев, типа как в аттач. Чтобы было видно где ремап нужно делать. AT32F403A_pinout_all.ods Хочу не кубохал
  8. Они сам язык еще написали) Там видно, что тот кто писал hal, тупо снес условный оператор(видимо в 403a условие не нужно проверять в отличие от 415), и половину ветвления, а операторные скобки оставил на месте
  9. Если верить Хабру, то поклонниками рационального стиля были Керниган и Ричи. Интересно они тоже были писарями ?) Файл system_at32f415.c : case CRM_SCLK_PLL: pll_clock_source = CRM->cfg_bit.pllrcs; if(CRM->pll_bit.pllcfgen == FALSE){ /* get multiplication factor */ pll_mult = CRM->cfg_bit.pllmult_l; pll_mult_h = CRM->cfg_bit.pllmult_h; /* process high bits */ if((pll_mult_h != 0U) || (pll_mult == 15U)){ pll_mult += ((16U * pll_mult_h) + 1U); } else{ pll_mult += 2U; } if (pll_clock_source == 0x00){ /* hick divided by 2 selected as pll clock entry */ system_core_clock = (HICK_VALUE >> 1) * pll_mult; } else{ /* hext selected as pll clock entry */ if (CRM->cfg_bit.pllhextdiv != RESET){ /* hext clock divided by 2 */ system_core_clock = (HEXT_VALUE / 2) * pll_mult; } else{ system_core_clock = HEXT_VALUE * pll_mult; } } } else{ pll_ms = CRM->pll_bit.pllms; pll_ns = CRM->pll_bit.pllns; pll_fr = CRM->pll_bit.pllfr; if (pll_clock_source == 0x00){ /* hick divided by 2 selected as pll clock entry */ pllrcsfreq = (HICK_VALUE >> 1); } else{ /* hext selected as pll clock entry */ if (CRM->cfg_bit.pllhextdiv != RESET){ /* hext clock divided by 2 */ pllrcsfreq = (HEXT_VALUE / 2); } else{ pllrcsfreq = HEXT_VALUE; } } system_core_clock = (uint32_t)(((uint64_t)pllrcsfreq * pll_ns) / (pll_ms * (0x1 << pll_fr))); } break;
  10. несильно понятно где может возникнуть такая потребность. Тем более что код в основном плюсовой, те капсуляция в обьектах должна быть. Это другое с case проблем не будет. От обезьяны с гранатой нет спасенья, в коде идиота можно и без rename-ов подорваться. Вот кстати опять наткнулся. Интересно бы понять в чем здесь сакральный смысл скобок. Файл system_at32f403a_407.c case CRM_SCLK_PLL: pll_clock_source = CRM->cfg_bit.pllrcs; { /* get multiplication factor */ pll_mult = CRM->cfg_bit.pllmult_l; pll_mult_h = CRM->cfg_bit.pllmult_h; /* process high bits */ if((pll_mult_h != 0U) || (pll_mult == 15U)){ pll_mult += ((16U * pll_mult_h) + 1U); } else{ pll_mult += 2U; } if (pll_clock_source == 0x00){ /* hick divided by 2 selected as pll clock entry */ system_core_clock = (HICK_VALUE >> 1) * pll_mult; } else{ /* hext selected as pll clock entry */ if (CRM->cfg_bit.pllhextdiv != RESET){ hext_prediv = CRM->misc3_bit.hextdiv; /* hext clock divided by 2 */ system_core_clock = (HEXT_VALUE / (hext_prediv + 2)) * pll_mult; } else{ system_core_clock = HEXT_VALUE * pll_mult; } } } break;
  11. Поставил Advanced Find and Replace, видно из анализа больших исходников действительно могут возникнуть при правке проблемы. Но для того чтобы они случились код должен быть написан весьма криво. Например вот такой кусок сломается: //if () { ..... } Уже видел в одном месте, странную конструкцию, где были открывающие и закрывающие скобки, а самого оператора (if или while или do) не было вообще. Радость только в том что в такой ситуации код сломается с ошибкой. Регулярка уже такая \)\s*\r\n\s*{\s*\r\n на ){\n
  12. Не это не ко мне, а к Artery. "While" - это из их Firmware_Library) Но такто Artery не единственные, кто грешит "While". Ими вообще ВСЕ грешат, начиная с Ритчи) Абсолютно согласен. Такое ощущение что некоторые граждане пытаются нагнать обьем кода в страницах, забивая все пробелами, скобками, переносами и любой возможной не относящейся к делу хренью
  13. уже работает и так, но спасибо за интересную ссылку
  14. Я думаю это зависит от головы( Я не могу патч себе на башку поставить, поэтому у меня должно быть так как я написал( Тогда читаю текст программ чужих легко, иначе не могу(( Честно, не буду так глубоко рыть в природу глюка. Сделал сегодня следующее. Отладил регеэкспы для notepad++ и прошел исходники снова ими, контролируя финальный hex проекта, и дополнительно функционал 5 UART-ов (1,2,3,6,8), последовательно патча всю либу подменами: 1. \)\s*\r\n\s*{ или \)\s*\n\s*{ на \){ -успех 2. do\s*\r\n\s*{ на do{ -успех 3. else\s*\r\n\s*{ на else{ -успех После всех правок .hex проекта и функционал UART-ов остались неизменными. Как ни странно регэкспы while\s*\r\n\s*{ - маска не найдена file\s*\r\n\s*{ на else{ - маска не найдена в AT32F403A_407_Firmware_Library_V2.1.4 и AT32F403A_407_Firmware_Library_V2.1.6 ничего не нашли. Ну и хрен с ними(
  15. Вы как всегда правы(( Сделал я следующее. У меня есть пунктик, связанный с синтаксисом. Я не могу видеть в коде такое: if(*pbuffer1 != *pbuffer2) { return 0; } А мне нужно чтобы оно было такое: if(*pbuffer1 != *pbuffer2){ return 0; } Типа плотность кода на экране так выше( В определенный момент как раз накануне UARTa, я решил наконец-то навести полный порядок, и натравил на все исходники любимый notepad++, которым сделал примерно 5000 замен скобок. Потом вошел во вкус, и сделал тоже самое со скобками в операторах file do else while. И если первое преобразование прокатило - я его и до этого многократно делал, то после второго рухнул CMSIS. Он продолжал собираться, но молча перестал работать. Я этот момент толком не отловил. Потом, в процессе мучений и ковыряний попортил еще и файлы конфигов проектов. Дабы, как правильно сказал JCXZ не сделано нормальное древо проекта и бакапы были неполные(( Спасибо уважаемые простите за беспокойство(
  16. Везет( Я щаз залил ногодрыг во вторую плату. все пины дрыбают нормально в портах 1-3. USART1 не работает(( Остальное вангую тоже( Причем я вдруг понял что вообще весь cmsis обновлением библиотеки заменил на 1.6 с 1.4. Откатил щаз его обратно на 1.4. Толку 0. Какой у вас проц ? У меня 403а
  17. код-то родной пример от Artery код исполняется вот такой while(1){ while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET); usart_data_transmit(USART1, USART1_tx_buffer[1]); //while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET); //usart_data_transmit(USART1, USART1_tx_buffer[USART1_TX_BUFFER_SIZE-data_count]); //while(usart_flag_get(USART3, USART_RDBF_FLAG) == RESET); //usart3_rx_buffer[USART1_TX_BUFFER_SIZE-data_count] = usart_data_receive(USART3); //data_count--; } под отладчиком. По шагам. Можно смотреть в ассемблере как все дрыбает. Можно в кейле. Можно в иаре. Осцилл есно
  18. Согласен( 15 лет пока сидел в конторе не писал( разучился(( Нету культуры( Очень благодарен что няньчитесь. Нашел порт рабочий Ардуины на артери и стм. Доки Плата Тесты на любой ногодрыг собираются в Keil за 30 секунд. Божественно там сделан хал внутри. И ардуиновская экосистема с JTAG на армах Мда вторую плату полностью сбросил на ней не работает ни один UART((
  19. ща буду запускать да я знаю что эта работа на 10 минут, а я сижу маюсь уже четвертый день
  20. Там есть один ньюанс. Я унаследовал дурацкую структуру директорий AT32F403A_407_Firmware_Library и кажется есть пара файлов что не в бакапе. Это board.c и board.h. Как раз так неудачно вышло что между рабочими бакапами и сегодня произошла смена либы с 1.4 на 1.6, и также я поправил имя головной папки (что уж никак влиять не должно). Я сейчас сравнил старые новые файлы, в старых было несколько директив про компиляторы, в 1.6 эти директивы выпилили. На всякий случай вернул старые файлы - поведение не изменилось в одной из плат да да на 2. разные платы, процы думаю с одной закупки. Сейчас работает из 3 первых портов порт 2 без ремаппинга. Порт 3 без ремаппинга не работал ни разу. Порт 1 работал раньше во всех конфигах, но сдох.
  21. теорию эту я проходил 30 лет назад, практика не работает( прерывания не используются, все флаги ожидания в заводских демках
  22. Бакап могу щаз развернуть любой, есно все есть. Ни в одном ни один uart не работает(
  23. Да собрал как GPIO пины USART TX(1,2,3) работают. Я тещу только передачу, дабы просто ткнуть осцилл. На всех разом портах исчезло, ни один порт из 8 не могу запустить, хотя работало раньше в моих же в тестах 3 штуки одновременно.
×
×
  • Создать...