Сергей Борщ 143 24 октября, 2022 Опубликовано 24 октября, 2022 · Жалоба Только что, Arlleex сказал: А есть еще неточный Сам сегодня искал. Но с чего-то начинать-то надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 24 октября, 2022 Опубликовано 24 октября, 2022 · Жалоба пишет No source available for "slaveRxBuf() at 0x20000716" не понимаю при чем тут эта переменная я же просто инициализирую UART. кстати в IAR-е компилируется и работает может дело в этом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 24 октября, 2022 Опубликовано 24 октября, 2022 · Жалоба 36 минут назад, RusikOk сказал: может дело в этом? Да все эти инструкции представляют собой какой-то бессмысленный набор. Это вообще адреса ОЗУ, как туда исполнение попало и почему отладчик думает, что там должен быть код функции slaveRxBuf()? А если он там должен быть - почему его там нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 24 октября, 2022 Опубликовано 24 октября, 2022 · Жалоба у меня нет такой функции. есть массив trace_t slaveRxBuf[2008]; я вообще не понимаю в чем там проблема. тот же самый код в ИАРе идеально работает. стек и кучу увеличивал не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 7 часов назад, RusikOk сказал: пишет No source available for "slaveRxBuf() at 0x20000716" не понимаю при чем тут эта переменная я же просто инициализирую UART. Очевидно в какой-то момент у вас управление улетает в область данных и данные начинают исполняться как код. Который здесь виден. А HF возникает на команде записи в память, потому как в R0 в этот момент - адрес недопустимый для записи (не ОЗУ там). А переменная не при чём. Как и HF - он вторичен, баг в другом месте, вполне возможно - никак не связанном с slaveRxBuf. Ставьте бряк чуть раньше (на 20000714) и шагайте по функциям от старта ПО. Пока бряк не сработает. Потом внутрь функции, на которой это случилось и опять шагать до бряка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба а вот это не поможет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 3 hours ago, jcxz said: и опять шагать до бряка Ещё учти, что бряк может быть не в функции. Я тут недавно народ напрягал вопросом про отладку, так у меня в итоге причиной бряка оказалось то, что в таблице адресов с векторами прерываний не хватало нолика на месте отсутствующего вектора, поэтому вся таблица съехала, а проц при уходе на обработку прерывания уходил на нулевой адрес. Так что шагай отладчиком и смотри, когда и куда ты улетаешь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба дебагер выплюнул такую строчку set *(int *)0xE000EDFC=*(int *)0xE000EDFC|0x400 в *.map и *.list такого адреса переменной не нашел. как узнать название переменной по ее адресу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 12 часов назад, RusikOk сказал: при старте сразу же в hard fault при старте отладки или старте с main()? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 10 часов назад, RusikOk сказал: у меня нет такой функции. есть массив Я не телепат - вы написали "slaveRxBuf()", а скобки тут означают функцию. 8 минут назад, RusikOk сказал: дебагер выплюнул такую строчку Куда выплюнул? Когда выплюнул? Как выплюнул? Это адрес какого-то регистра, а адреса регистров у разных семейств отличаются. Но вы даже не написали, какой контроллер вы отлаживаете, если это викторина - огласите приз победителю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 188 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 8 минут назад, RusikOk сказал: дебагер выплюнул такую строчку set *(int *)0xE000EDFC=*(int *)0xE000EDFC|0x400 в *.map и *.list такого адреса переменной не нашел. как узнать название переменной по ее адресу? Та строчка всего лишь говорит о том, что отладчик будет перехватывать все Fault-ы, т.е. при HF, например, возникнет событие отладки и CPU остановится. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 6 минут назад, razrab83 сказал: при старте отладки или старте с main()? Setting breakpoint @ address 0x080007AA, Size = 2, BPHandle = 0x0001 Setting breakpoint @ address 0x08005268, Size = 2, BPHandle = 0x0002 Starting target CPU... ...Target halted (Vector catch, PC = 0x08001000) Reading all registers Removing breakpoint @ address 0x080007AA, Size = 2 Removing breakpoint @ address 0x08005268, Size = 2 Read 4 bytes @ address 0x08001000 (Data = 0xB082B580) Read 4 bytes @ address 0x20000754 (Data = 0xA1000000) Reading 64 bytes @ address 0x20000740 Read 4 bytes @ address 0x20002174 (Data = 0xD486CFB8) Reading 64 bytes @ address 0x20002140 Read 4 bytes @ address 0x20000340 (Data = 0x00000000) Reading 64 bytes @ address 0x200001C0 Reading 64 bytes @ address 0x20000200 Read 4 bytes @ address 0x20000340 (Data = 0x00000000) при старте ядра Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 9 минут назад, Сергей Борщ сказал: не написали, какой контроллер вы отлаживаете stm32g0xx 4 минуты назад, RusikOk сказал: при старте ядра не понятно, что такое старт ядра? в настройках отладки можно поставить брейкпоинт на main() сделать "run to" и дописать main() или любую др функцию. по умолчанию стоит брейк на мэйне. вы стартуете отладку (не ядро, а в иде запускаете отладчик), запускаются всякие gdb, заливка кода, старт кода (если есть run to) и код выполняется до main(). останавливается на main(). Далее делаете Run и начинается выполнение маин, которое вызывает инит вашей перифирии, например инит вашего уарта. и вот в это ините возникает HF? Стартом ядра вы называете запуск исполнения программы с самого начала? Если у вас инит уарат до маина, перенесите инит уарта в тело майна и там нормально прошагайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 2 минуты назад, razrab83 сказал: не понятно, что такое старт ядра? в настройках отладки можно поставить брейкпоинт на main() сделать "run to" и дописать main() или любую др функцию. по умолчанию стоит брейк на мэйне. Starting target CPU... ...Target halted (Vector catch, PC = 0x08001000) всем спасибо! вопрос решился заменой программатора. это вообще нормально? в IAR работает тут нет. я даже комп перезагружал. еще один повод удалить эту индусскую поделку нафиг Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 25 октября, 2022 Опубликовано 25 октября, 2022 · Жалоба 3 часа назад, tonyk_av сказал: Ещё учти, что бряк может быть не в функции. бряк == breakpoint О чём вы пишете - совершенно не понятно... 2 часа назад, RusikOk сказал: дебагер выплюнул такую строчку set *(int *)0xE000EDFC=*(int *)0xE000EDFC|0x400 в *.map и *.list такого адреса переменной не нашел. как узнать название переменной по ее адресу? Открыть мануал на ядро и посмотреть какой регистр занимает этот адрес. И вообще - отучаться от использования "магических чисел" в исходнике. Тем более - обращений к памяти таким образом. Чтобы не возникало подобных вопросов. PS: И кстати - обращение к регистрам периферии очень желательно выполнять с модификатором volatile. Чтобы на другие грабли позже на наступить..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться