- IAR7 + GD32F107 + J-Link. Иар7 не поддерживает этот контроллер.
Проект собран под STM32F107, файл линкера от него же. Ставлю
компилировать под Кортекс-М3. В настройках J-Link ставлю GD32F107. Все вроде работает, шьется. Но, на высоких уровнях
оптимизации, иногда сваливается в ХардФалаут. Что я делаю не
так? - IBAH(27.07.2023 19:37 - 29.07.2023 12:56, ARM, полностью)
- Полазал отладчиком. Насколько я понимаю ругается на команду пуш,
вызов функции LL_GPIO_Init по кривому адресу. Вопрос - как
избежать? я так понимаю надо как-то настроить линкер IBAH(1 знак., 03.08.2023 18:53, картинка)
- Делаешь не так вот что: не выясняешь точную причину HardFault.
Обычно там есть все средства, чтобы её вычислить. - SciFi(27.07.2023 19:40)
- +1 - RxTx(27.07.2023 20:03)
- Причина не в коде. В Кейле все нормально. - IBAH(27.07.2023 19:45)
- причина именно в коде, просто в кейле другая оптимизация, она
допускает промахи как и яровская на низких уровнях - 0men(27.07.2023 20:57)
- В этом то и вопрос, почему в кейле работает? Где-то что-то нужно дополнительно указать. - IBAH(29.07.2023 12:59)
- Например, компилятор может неожиданно реагировать на Undefined
Behavior. Своими глазами видел, как компилятор применял чудесатую
оптимизацию адресной арифметики, потому что по каким-то
соображениям диапазон входных значений был ограничен. Когда в жизни
встречалось другое значение, арифметика вычисляла дикий адрес, и
вот тебе HardFault. А другой компилятор может этого не делать, и
твой косяк останется незамеченным. И да, это именно косяк в
исходнике. - SciFi(30.07.2023 14:55)
- Нет такого вопроса, это у тебя в голове какой-то пробел. HardFault
вызывает какая-то АССЕМБЛЕРНАЯ инструкция, выполняемая в нетипичных
условиях с нетипичными значениями. Никто не обещает, что разные
компиляторы Кейл и ЙАР должны генерить одинаковый код. А источник
проблемы все равно - в исходнике на Си. Самый распространенный
случай - невыровненный доступ к памяти, который возникает из-за
преобразования типов указателя. У Cortex-M3 есть инструкции,
которые могут выполняться il-2(411 знак., 30.07.2023 10:34)
- Совместимы только 103, в других даже адресация регистров иная. - Visitor(29.07.2023 13:56)
- Покорнейше прошу прощения. Моя обычно подключать внутрисхемный
отладчик, смотреть в регистры, вычислять точное место, где
процессор споткнулся. Думал, все так делают. Снова прошу пардону. - SciFi(27.07.2023 19:53)
- Пришел десяток CH32V003 в soic8 с Ali по 13 руб. Показались
удобными для всяческой мелкой хренотени. Ну и как у китайцев
положено, их "рыба" из MRS неработоспособна :) Генератор на сей раз
сразу выставил в SYSCLK_FREQ_48MHZ_HSI. Рубится при попытке printf
(). Небось ремап портов не настроен. Напрягает, что отладчик в MRS
завешивает эту MRS наглухо. До перезапуска. Ну и сам чип в дауне.
Стереть flash можно только через WCH-LinkUtility в режиме
передергивания питания (по Гyдвин(43 знак., 26.07.2023 18:12, ARM, полностью)
- Отбой. Работает. Особенности чипа. Вкурил, увидев вот эту пеструю
картинку. В ДШ то все уныленько ;) Гyдвин(1 знак., 27.07.2023 15:07 - 28.07.2023 22:02, картинка)
- Есть альтернатива (8051) в ЧиД по 58 рублей - SH79F084BL (SOIC-16),
SH79F1624BL - 74р., SH79F1612BX (TSSOP-20) - 70р. - Costic(28.07.2023 21:58)
- Щас уже подорожали вдвое Kpoк(1 знак., 26.07.2023 20:26, ссылка)
- 50 шт за 496р? Арихметико - лженауко? - =AlexD=(26.07.2023 22:21)
- Я брал тут -> Гyдвин(1 знак., 26.07.2023 22:02, ссылка)
- Там еще 45р за "доставку", так что 18 за штучку получается. Но все
равно заманчиво. Был бы там USB или хотя бы CAN... А то весь смысл
дешевизны теряется. - Eddy_Em(26.07.2023 23:18)
- Дык подключайся ;) Гyдвин(1 знак., 27.07.2023 15:35, ссылка)
- Нет уж, софтовую реализацию аппаратных протоколов я считаю
идиотизмом. Лучше взять МК, где есть аппаратный USB, чем городить
хрен знает что. Eddy_Em(129 знак., 27.07.2023 15:55)
- Кстати, вот здесь все, как ты любишь - по красноглазиковски :) Гyдвин(1 знак., 27.07.2023 15:40, ссылка)
- Интересно, spi вроде есть, а на самом деле нет! Забыли SCK
доложить. m9rs(1 знак., 30.07.2023 10:49, картинка)
- Зато можно произвольную битовую последовательность гнать с МОСИ
аппаратно. Интересно, SPI в этом камне может подряд байты
передавать, загружая в буфер следующий раньше, чем закончится
предыдущий? - Nikolay_Po(30.07.2023 23:34)
- Не забыли, у А4М6 его нет. enc(1 знак., 30.07.2023 22:13, картинка)
- Ну то есть SPI есть, но без SCK - там же одинаковые кристаллы. - LightElf(30.07.2023 23:45)
- К шиту доверия больше чем к "рисовальщикам". - enc(31.07.2023 09:20)
- По идее, чтобы MOSI, всё же, использовать на вывод потока бит,
придётся настраивать несуществующий (не разваренный с кристалла)
вывод SCK, чтобы сдвиг бит, всё же, тактировался. - Nikolay_Po(30.07.2023 23:51)
- Придётся. Но я сварщик не настоящий - как там у этих зверей ремап
устроен - не знаю. - LightElf(31.07.2023 00:05)
- Просто скопировать ассемблерные инструкции неразваренного вывода с
более жирного чипа. Ну, или красивее, добавить его в свой
заголовочный файл, как у жирного чипа и настроить так же. - Nikolay_Po(31.07.2023 00:48)
- Норот, гораздо проще сделать обычный бит-бэнг. Ибо на максимальных
скоростях, всё равно надо ждать "бизи". - mse homjak(31.07.2023 09:53)
- Один бизи на 8 интервалов или каждый интервал вручную считать - по
моему, разница налицо. - Nikolay_Po(01.08.2023 08:07)
- Busy считывать в цыкле, значит, проц, полюбому, занят. Какая
разница, чем. А если пользоваться прерываниями, то на максимальной
СЦК, накладные от прерывания будут , где-то, в размер 8-битной
транзакцыи. Смотрите это и следуюсчее сообчение с картинками.
Обратите внимание, как отвисает CS на 8-битной посылке. От такая
реакция на прерывание RXRDY. В неё умещается передача ещо одного
байта. Если сыпать байтами, то всё очень не очебачно. Оптимально по
скорости, это жэлезный mse homjak(79 знак., 01.08.2023 10:35, ссылка)
- У меня типичная проблема, что вывод по SPI надо делать без пауз и
задержек, с четкой постоянной скоростью. Иначе светодиодики глючат
;-) На NUC970 пришлось кернеля перчить, шоб оно 6.25мегабита
выдавало без разрывов. Жизнь контроллера светодиодов нелегка ;-) - LightElf(31.07.2023 13:02)
- Это я еще с месяц назад скачал. Когда-нибудь попробую таки начать с
v003, а там, глядишь, кто-нибудь что-нибудь подобное и для других
камней выбросит. Уж слишком много времени понадобится тратить,
чтобы самому такое сбацать. Eddy_Em(140 знак., 27.07.2023 16:02)
- Напротив, blinky занимает всего 500 байт с ch32v003fun, \\ Где-то
разнузданно заржали пикоманы. - Kpoк(27.07.2023 15:48)
- Недорогой WCH LinkE -> Гyдвин(1 знак., 26.07.2023 22:09, ссылка)
- а на что из STM32 он похож? Я в soic-8 работал только с STM32G031. - Лaгyнoв(26.07.2023 18:16)
- Прошу помочь советом по ADuC7020BCPZ62. Суть проблемы: имеется
только hex для указанного MCU, проект не сохранился. Загрузка через
переходник USB-UART сложностей не вызывала. Но по недосмотру были
закуплены и впаяны ADuC7020BCPZ62i (с загрузкой через I2C). Донгла
такого естественно нет. Как проблему решать? - alexem(28.07.2023 20:13, ARM, полностью)
- Скажите, а сеггер жлинки китайские окончательно попячены
обновлениями ПО или можно на каком-нибудь али взять что-нибудь
подобное чтобы виделось в cubemxIDE? - NAUT(26.07.2023 16:47, ARM, полностью)
- printf(), __io_putchar, _write(), --specs=nosys.specs,
--nano.specs и вот это вот всё: хочу сделать печать на UART при использовании printf(). Что для этого надо для arm-none-eabi? Понятно, что можно сделать через snprintf() и свой буфер, но есть впечатление, что это изобретение велосипеда.
Вот только беда - к существующему нет внятного описания. Или я
поисковикам вопрос не смог задать правильно. - Dingo(13.04.2023 15:34, ARM, полностью)
- Так получилось в итоге? - RxTx(27.07.2023 20:04)
- Немного по поискам, может кому-то облегчит их и сократит путь. И о
причинах. Главное - хотелось как и задумано пользоваться printf() как стандартной и всем понятой функцией просто подключив <stdio.h>. У меня - не получилось. Потому что не "просто вывести на
консоль", а консоль это stdout, который есть файл, который есть устройство, ... в доме который
построил Джек. В моём случае FILE (в т.ч. stdout) содержит поле _write с Dingo(524 знак., 15.04.2023 18:05, ссылка)
- Конкретно printf() в конце концов вызывает write(), и тебе надо
переопределить write() так, как тебе надо. VVB(315 знак., 14.04.2023 06:38)
- Эта штука компиляторазависимая, для ИАР нужно переопределить
putchar() для stdout, для вывода по дескриптору переопределить
fputc() IBAH(2256 знак., 13.04.2023 19:22)
- В песках что-то такое было давным-давно >>> SciFi(1 знак., 13.04.2023 15:49, ссылка)
- Переопределяешь функции передачи символов. Чтобы перебить
библиотечные... что-то типа Putchar ... POV(90 знак., 13.04.2023 15:38, ссылка, ссылка)
- stm32.. счетчик импульсов. Ничего из rfm008 понять не могу. Как
настроить 3 канал таймера 4 на счет импульсов? - POV(26.07.2023 15:45, ARM, полностью)
- RTC в STM32F405: оно несовместимо ни с time_t ни со struct tm. Во
что они курили когда рожали RTC который не совместим со
стандартными структурами? И еще: не пойму в чем прикол запихивать в
кремний календарь ? Транзисторы девать некуда ? - 3m(25.07.2023 19:17, ARM, полностью)
- Вот что им помешало сделать просто двоичный счетчик в дополнение
этому изврату или вместо него? - LightElf(26.07.2023 12:35)
- Я как почитал документацию к RTC STM32F103, вот уж знатно
подохренел: это ж каким рукожопым надо быть, чтобы так убого
сделать? Eddy_Em(447 знак., 26.07.2023 11:14, ссылка)
- то, что обычный счетчик не положили, то, грусть. с другой стороны,
не помню внешних мелкосхем RTC со счетчиком. а форматы и кремний
дружить руками нужно. посмотрите форматы старого-доброго MC146818 -
там и месяцы 1...12, и день недели 1...7, и т.д.. а ещё часто
старшие битики зачищать на всякий случай нужно, ибо кремниеваятели
ничего не гарантируют всякими магическими don`t care. более грустно
когда значения считываются из асинхронных счетчиков и/или фризятся
сами счетчики на Vit(25 знак., 26.07.2023 08:40)
- так вроде это (календарь) везде в STM32. Мне нравится. :-) Кварц
прицепил - и даже високосные года соблюдает. - Лaгyнoв(25.07.2023 21:18)
- представление даты времени в BCD формате довольно стандартно - 0men(25.07.2023 21:08)
- Схему гальваноразвязки для SWD знает кто ни будь? Велосипед
изобретать не охота. Пару штук СТ-линков спалили из за Y капа в БП
и отсутствии заземления:-) - Visitor(24.07.2023 09:14, ARM, полностью)
- Если вам совсем лень, то берете I2C-шный изолятор с
однонаправленным SCL. Собственно и вся развязка, главное подтяжки
не забыть поставить. lloyd(40 знак., 24.07.2023 13:37)
- Klen предлагал всем нечто опторазвязанное. - Evgeny_CD(24.07.2023 13:26)
- Лол. Сколько можно говорить, кидай постоянный провод между корпусом
компа (читай средней точкой Y) и массой всех своих БП. Я как-то
провод от лени не кинул, глядь, а уже поздно. Сцуко, в фирменном
стлинке STMка дым пустила, вздулась, а позже обнаружил что вынесло
два USB порта на мамке. Сейчас вот придется перепаивать мать, а я
на ней работаю. - RxTx(24.07.2023 10:54)
- Я просто приобрел недорогой китайский модуль гальваноразвязки USB.
Втыкаю через него отладчики и "недоосциллограф". Так выходит
универсальнее... - Гyдвин(24.07.2023 10:47)
- Берете три одноканальных изолятора, один на чтение, другой на
передачу, третий - на включение драйвера передачи. lloyd(69 знак., 24.07.2023 10:04)
- Есть же изолированный ST-LINK. SciFi(1 знак., 24.07.2023 09:23, ссылка)
- stm32 и exti - не сразу начинает реагировать на фронты, пропускает
первые сигналы от внешнего источника (секунды не реагирует!)... POV(219 знак., 19.07.2023 15:09, ARM, полностью)
- Вопрос, как изнутри программно вызвать перезагрузку всего
микроконтроллера CortexM ? - sav6622(07.07.2023 09:28, ARM, полностью)
- Норот! Кто пишет под MounRiverStudio, что там за ебанутая система?
Подключаю в проект "*.h" файл с переменными и из других инклуденных
"*.с" эти переменные не вижу. Подключаю в эти "*.с" "*.h" файл с
определением переменных, студия начинает ругаться на множэственное
определение. Шо за ебала? - mse homjak(17.07.2023 11:31, ARM, полностью)
- Кароч, промблемма рассосалось, всем спасибо за участие. - mse homjak(17.07.2023 17:25)
- Где-то в одном месте в сишнике есть определение глобальной
переменной и без extern, NAUT(171 знак., 17.07.2023 15:35)
- а зачем у вас переменные в *.h? - RED_DRAGON(17.07.2023 15:23)
- Покажи краткий пример. VVB(107 знак., 17.07.2023 11:57)
- примерно так: mse homjak(342 знак., 17.07.2023 12:41)
- То есть вот так не умеет парсить? Неудивительно. Место для
переменной data выделяется и в модуле main и в модуле fun. Надо
где-то в одном месте выделить. VVB(209 знак., 17.07.2023 12:44)
- Должно быть вот так (тест на внимательность) Cкpипaч(237 знак., 17.07.2023 13:10)
- Нет, походу, не умеет. Ругается, как обычно. - mse homjak(17.07.2023 12:50)
- Надо убрать int data = 0; или int data = 1; в одном из модулей и
оставить только в одном. Я специально разные значения присвоил,
чтобы подчеркнуть, что компилятор не умеет за человека думать и
присваивать "правильное" значение (он не знает, какое: 0 или 1).
Переменная data примет нужное значение до запуска main() в "c
runtime". - VVB(17.07.2023 12:54)
- переменной не присваивается значение при определении. Переменная
принимает участие в вычислениях и к ней можэт быть доступ из разных
Ц-файлов. Что там присвоит ей компилятор до майн, значения не
имеет. mse homjak(24 знак., 17.07.2023 13:04)
- Тут вы не правы. Переменной всегда присваивается значение при
"определении". Если значение явно не присвоено, то присваивается
"0". VVB(441 знак., 17.07.2023 13:23, ссылка)
- Это я понимаю, упоролся ужэ. Я объявляю переменную в Н-файле и подключаю его в майн. По идее, этого должно
быть достаточно. Но МРС требует, чтобы этот Н-файл был подключён в
Ц-файле, где используется переменная, иначе, ругается, что она не
объявлена. А при подключении, ругается, что она переопределена. У
меня щас возникло нехорошее предчувствие, посмотрел внимательно на
заготовку проекта МРС-студии, а там такое: mse homjak(244 знак., 17.07.2023 13:48)
- Дык эта... Китайцы ни при чём. Это пророки Керниган и Ричи при чём.
И они ни в чём не уиноуаты, ибо пророки. А вы учите их священное
писание, и буде вам щастя. - SciFi(17.07.2023 14:06 - 14:32)
- Дык, ладно бы я, сирый и убогий. Тут местный гуру был необычайно
озадачен. Вот, ради прикола, совсем пустой проект: И сообщение, что
всё совсем плохо: mse homjak(316 знак., 17.07.2023 14:24, ссылка, ссылка)
- Переменная должна быть И объявлена (extern), И создана. Причем
создана ТОЛЬКО в одном месте. В вашем примере, или в addon.c, или в
main.c нужно добавить: Cкpипaч(64 знак., 17.07.2023 16:00)
- Всё правильно компилятор говорит. Всё-таки обратитесь к священным
текстам. Там вам разъяснят, что такое объявление, что такое
определение, в каких местах и в каком числе это всё должно
присутствовать. В этой ветке об этом уже говорилось, но вы успешно
проигнорировали. - SciFi(17.07.2023 14:30)
- Баним в майне addon() и всё, никто ни на что не ругается. Особенно,
на то, что в майне есть ундефинед референсе. - mse homjak(17.07.2023 14:29)
- Я извиняюсь за глупый вопрос, а #ifndef в *.h файлах имеется? - reZident(17.07.2023 11:41)
- Это нормально. ctl+f по всем файлам. Смотришь, где ещё вглубь это
всё. - Бapбoc(17.07.2023 11:39)
- А что "цтрл-ф"ить? В одном случае он не находит переменную, в
другом, говорит, что несколько раз переопределена. всё работает,
если всё писать в майн.ц. Это, бля, чо за дичь? - mse homjak(17.07.2023 11:44)
- При сборке консоль что выводит? Ругается на сборку или сам
индексатор? Что во всплывающей подсказке при наведении на ошибку? - Dingo(17.07.2023 12:21)
- похоже, что месье таки забыл, что выделить место (и, если нужно,
при этом задать значение) можно один раз в пределах области
видимости. а extern указывает, что место выделено где-то, потому в
хедере переменные без extern хоть и допустимо описывать (выделять
место), но только при включении хедера не более одного раза. - Vit(17.07.2023 12:10)
- Попробуй пересоздать проект, и снова туда добавить файлы, как-то
эта хрень очень похожа на новый Crosscore от андевиц... он на базе
эклипса... эта скотина иногда путается в своих же файлах, где-то
видит, где-то не видит (точнее та часть что добавляет, она видит
что файлы уже учтены в проекте... а та часть что собирает - говорит
нет и всё тут...и никакие условные @make clean не помогают)... и
всё, помогает только пересоздание проекта с импортом-вставкой всех
файлов... - sav6622(17.07.2023 11:50)
- Там, где-нибудь, в конце определений надо поменять 0 на 1. Или
наоборот. - Бapбoc(17.07.2023 11:48)
- Подскажите, как правильно использовать systick в risc-v для
формирования точного интервала? Peter_M(550 знак., 12.07.2023 17:14, ARM, полностью)
- Подниму еще разок тему. Приобрел в Чип-Дип "до-кучи" пяток
CH32V203F8P6 (еще не ведал о "токсичности"). Так и не понял как
заставить этих выкидышей от WCH отлаживаться в MRS. Отладка в
студии виснет после заливки. В DS есть картнка "BOOT0=GND". Т.е.
ожидается, что чип сразу переходит в загрузчик после сброса. Но и
загрузчик тоже не подает признаков жизни - ни usb, ни uart.
Cтереть/залить прошивку с помощью WCH-LinkUtility получается. И оно
работает. Куда еще копать? - Гyдвин(27.06.2023 14:20, ARM, полностью)
- Risc-V, CH32V203RBT6, MounRiver Studio IDE, Си. Отладчик WCH-Link. petrd(377 знак., 22.03.2023 12:26, ARM, полностью)
- GD32F103, DWT->CYCCNT перестает работать при отключенном
GD-LINK. При старте взвожу DWT_CTRL_CYCCNTENA. Куда еще посмотреть
можно? Bинни Пox(303 знак., 10.07.2023 16:41, ARM, полностью)