Program Size:
text data bss dec hex filename
5299 136 184 5619 15f3 rnd_f030.elf
ну и бинарники соответственно, на asm=5440 байт, на с=5432 байта, а если сравнивать по содержимому - то там полностью все отличается, кроме последней строки, она одинакова.
И опять же, в вашем варианте самая первая точка останова на SystemInit();, это когда отключен в debug run to main, то есть я не вижу где инициализируется оперативная память, сейчас это на каком нибудь массиве проверю.
Добавлено after 4 minutes 36 seconds:
Все увидел, вопрос отпадает, где это происходит.
[uquote="Dimon456",url="/forum/viewtopic.php?p=4322091#p4322091"]VladislavS, а вот эта строчка, синим выделено, программа туда должна заходить.[/uquote]В твоём случае должна. Это инициализация глобальных (ненулевых) данных.
А вот при отладке из SRAM не должна. Так как инициализирующие данные и так уже в SRAM, зачем их копировать туда-сюда.
Последний раз редактировалось VladislavS Чт ноя 17, 2022 18:38:06, всего редактировалось 1 раз.
[uquote="VladislavS",url="/forum/viewtopic.php?p=4322061#p4322061"]COKPOWEHEU, это действительно найдено в первом попавшемся проекте для ARМ (приведённом тут чуть выше как пример). И степень "невникания" удивала.[/uquote]
Пожалуй, сочту это комплиментом. Вроде как вы не ожидали от меня такой халтуры.
Но вообще-то, не вижу смысла уделять стартапу слишком много внимания: он выполняется единственный раз при старте камня, и даже если там накручено говнокода, по большому счету это ни на чем не скажется. Лично я к ARM'у пришел "сверху", от готового шаблона, и лезть глубоко "вниз" надобности не было: работает и ладно.
А вот с RISC-V так не повезло: не нашел шаблона, который бы просто собрался и заработал, пришлось изучать ассемблер, линкер-скрипты и прочую ядерную магию. В процессе, разумеется, тоже изрядно накосячил. Первый проект на Си у меня собрался чуть больше двух лет назад, и только на прошлой неделе я выловил грубую ошибку в линкер-скрипте.
VladislavS писал(а):Не будет подобного в курсах - замечательно.
"Будет" это уже немного поздно: 80% уже выложено на всеобщее обозрение, можете сами проверить какие там косяки. {звуки беспалевной агитации побыть бесплатным бета-тестером}
Чтобы сделать этот код независимым от тулчейна следеут поместить всё что до инициализации данных в SystemInit (она, вообще говоря, для этого и придумана), где-то спрятать seed на время инициализации данных (в какой-нибудь периферии) и использовать по назначению уже в main.
[uquote="Dimon456",url="/forum/viewtopic.php?p=4322221#p4322221"]а где его спрятать?[/uquote]В каждом чипе можно найти либо специально предназначенные для хранения данных регистры, либо неиспользуемые регистры периферии, способные это делать. Проявите изобретательность, почитайте RM
Reset_Handler:
ldr r0, =_eram
mov sp, r0 /* set stack pointer */
/* Call the clock system intitialization function.*/
bl SystemInit
/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
b LoopCopyDataInit
.
.
.
а потом в SystemInit, как вы пишите, поместить мой код, в seed сохранить, к примеру, в 32-битном регистре таймера ТИМ2 (вроде он 32-битный).
[uquote="Dimon456",url="/forum/viewtopic.php?p=4322945#p4322945"]я не знал что SystemInit можно было перенести в первый вызов[/uquote]Не только можно, но и нужно. Именно там его место.
[uquote="Dimon456",url="/forum/viewtopic.php?p=4322945#p4322945"]seed сохранить, к примеру, в 32-битном регистре таймера ТИМ2 (вроде он 32-битный).[/uquote]Ну можете же, если захотите
Второй раз повторяю - регистры Backup, память Buckap SRAM.
Ну и пусть топикстартер расскажет (чисто для интереса), зачем же ему понадобилась генерация случайного числа? Нужно ли одно число получить или несколько, нужно ли их получить один раз при старте или получать их периодически во время работы?
MLX90640 писал(а):Второй раз повторяю - регистры Backup, память Buckap SRAM.
И я еще раз повторяю - stm32f030f4p6, или может в этом чипе еще что-то есть, чего я не знаю?.
Нужно что бы при старте программы получалось всегда новое число (всего один раз сканирование ОЗУ, при старте), и нужно периодически во время работы. А АЦП не охота задействовать.
[uquote="Dimon456",url="/forum/viewtopic.php?p=4323081#p4323081"]А АЦП не охота[/uquote]
Очень убедительно...
Заниматься масштабной движухой с памятью хочется, а получить практически true Random - нет... У всех свои извращения...
MLX90640 писал(а):Второй раз повторяю - регистры Backup, память Buckap SRAM.
И я еще раз повторяю - stm32f030f4p6, или может в этом чипе еще что-то есть, чего я не знаю?.[/uquote]Ещё в DMA-контроллере обычно много 32-битных регистров простаивает. А от того что он десять раз повторит в f030 backup не появится.
Котаны, натыкайте меня мордой чего покурить на тему fasmarm желательно с примерами... Особенно возбуждает дрыганье ножкой, работа с таймерами, ADC, извлечение квадратного корня в целых числах
targeet device STM32F030
У кошки четыре ноги: вход -in, выход -out, земля - gnd, и питание -vdd... А так же хвост заземления. http://kot3245.ru
Такой дурацкий вопрос: а будет ли код, написанный под STM32F303, работать на F302? Попутали маленько и не те заказали…
Вроде в апоуте "migrating between F303 and F302" написано, что все должно быть ОК (а вот обратно может не получиться, т.к. у F302, как ни странно, функционал пожирней).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Заменить стартап, линкерскрипт и заголовочный файл контроллера. Проверить систему тактирования. Если после этого пересоберётся, то скорее всего и заработает.