STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 26079
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4350612#p4350612"]размер ОЗУ ограничен исключительно шиной данных и карманом заказчика. Как и количество векторов прерывания ограничено карманом заказчика.[/uquote]
Не важно чем что ограничено. Разговор был не о причинах, а о факте. Можно предположить, что купленные у сторонних разработчиков IP-блоки не позволяют реализовать все формальные ресурсы адресного пространства. Это касается и IVT, и ОЗУ. и флеша, и реквестов ДМА...
А другие IP-блоки не влазят в код чипа...
Устраивает такое предположение?
Меня удивляет другое, как вполне грамотные люди начинают рассуждать о том, какие тупые разработчики той элементной базы, которой они пользуются...? Гомерически смешно.

Добавлено after 2 minutes 59 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=4350625#p4350625"]начинающему помочь не можешь![/uquote]
Других гуру начинающему не завезли. Есть такое подозрение, что на более качественных у начинающего просто нет денег... :)
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

ARV, я и не собираюсь помогать тем, кто не принимает помощь.
Меня удивляет другое, как вполне грамотные люди начинают рассуждать о том, какие тупые разработчики той элементной базы, которой они пользуются...?
А что, местами там такие финты встречаются… Но в-основном, да, все более-менее грамотно. И errata с каждой новой серией все тоньше и тоньше. Вон, на том же F103 такую гору кода надо было для I2C написать… Правда, в более поздних моделях тоже немало, но поменьше. А хотелось бы вообще откинуть в один 32-битный регистр адрес регистра I2C и количество бит адреса (8 или 16), в другой — адрес устройства и количество бит адреса, указать DMA буфер с данными, да и запустить себе чтение N байт из данного регистра, не прибегая к этим адовым портянкам (ну, хоть не как в F103: там для одного байта - одно, для двух - другое, для N<255 - третье, в остальном случае - четвертое).
Блин, DMA на чтение I2C тоже чего-то работать не хочет. Читаю дальше мануал. Хотя казалось бы: ведь здесь даже без стоп-бита все равно данные в буфере должны были быть, а их нет. Эх, завтра притащу с работы осцилл. ХЗ, зачем я его туда утаскивал (там и "стационарных" пара штук есть).
на более качественных у начинающего просто нет денег
Смотря что "более качественными" называть. Калокуберов что-ли, которые убогие ролики на тытрубе выкладывают? Ну, это ж днище! А реальных гуру он слушать не будет, т.к. не хочет читать документацию.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4350571#p4350571"]Это примерно тоже, что утверждать, что размер ОЗУ ограничен только разрядностью шины адреса...[/uquote]
То есть для вас разницы в адресации ОЗУ (которое еще реализовать вообще-то надо на кристалле) и векторов прерываний (для которых достаточно выделить полторы ячейки флеша), не существует. Знаете, с каждым вашим словом я все больше и больше разочаровываюсь в вашей компетенции.
КРАМ писал(а):У кого тут надут ЧСВ, милейший?
Пока что кажется, что у вас.
КРАМ писал(а):То есть стартапа в проекте с HAL не существует?
Иначе говоря, вы не знаете где запрошенную информацию посмотреть по-человечески, но вместо того чтобы прямо об этом сказать пытаетесь с умным видом нести чушь.
КРАМ писал(а):Так я уже ответил. Причем с самого начала. Повторю для непонятливых. Первый таймер дает возможность выровнять латентность обработчиков по разным флагам для приложений с критически важными временными диаграммами.
Или у вас нет сигнальных проектов?
И еще многабукаф не по теме.
Повторяю, вопрос был не в том зачем TIM1 выделили аж 4 вектора - с этим-то все очевидно. А почему его вектора объединили с другими таймерами. А еще точнее, что я-то знаю ответ, потому и назвал такое решение костыльным. А вот для вас оно либо выглядит единственно верным (хотя учитывая ваше же предложение объединять в одном векторе различную периферию, это уже не столь удивительно).
ARV писал(а):хотя манера разделять документацию на стопицот файлов меня не воодушевляет
Всего два: даташит и рефман. Есть, конечно, более подробные описания отдельно для ядра, особенностей периферии и т.п., но это уже опционально.
ARV писал(а):в одной из других тем я озвучивал своё мнение о том, откуда берутся большие камни и для чего. мнение это пока не поколеблено ничем и никем.
Да я и не пытаюсь вас в чем-то переубедить. Собственно, недостатки своего подхода я и сам вижу. Но лично в моем случае преимущества перевешивают. А уж какой подход ближе вам, вы же и решайте.
Eddy_Em писал(а):Как и количество векторов прерывания ограничено карманом заказчика.
В том-то и дело, что увеличить количество векторов куда дешевле, чем память. Если, конечно, забыть о совместимости, о чем КРАМ, очевидно, не знает.
Eddy_Em писал(а):ARV, хреновый ты начинающий: начинающий начинает с чтения даташита и мануала!
Нет.
Минимальный стартап только на основании даташита и рефмана не собрать, тем более начинающему.
А начинать стоит с минимального стороннего примера, который точно компилируется и работает. Его разобрать, понять какая строчка зачем нужна, и собрать обратно по-своему, для проверки. А дальше уже можно либо "вширь" - не трогая инициализацию и прочее, осваивать периферию и алгоритмы, либо "вглубь" - ковырять ассемблер и недра контроллера.
Разумеется, ST-HAL для этого не годится: в нем посинеешь быстрее, чем разберешься что и зачем они накрутили и почему одни и те же байты передаются между тремя функциями без каких-либо изменений.
ARV писал(а):хреновый ты гуру, раз начинающему помочь не можешь!
То, что вы изначально не собираетесь возможной помощью от Eddy_Em или меня, вы сказали прямым текстом и повторяете при каждой попытке помочь. Чего вы еще ожидаете-то? Что мы выбросим нормальный рабочий код и кинемся изучать ST-HAL что ли?! Так это признак не гуру, а мазохиста.
КРАМ писал(а):Можно предположить, что купленные у сторонних разработчиков IP-блоки не позволяют реализовать все формальные ресурсы адресного пространства. Это касается и IVT, и ОЗУ.
Ага, не позволяют использовать больше 53 векторов. Это насколько надо упороться чтобы встроить именно такое ограничение?
КРАМ писал(а):Меня удивляет другое, как вполне грамотные люди начинают рассуждать о том, какие тупые разработчики той элементной базы, которой они пользуются...?
Еще смешнее, когда их пытается критиковать человек, даже не попытавшийся в теме разобраться.
КРАМ писал(а):Других гуру начинающему не завезли. Есть такое подозрение, что на более качественных у начинающего просто нет денег...
Хотите сказать, что на платных курсах расскажут что-то более осмысленное, чем мантры "тыкаем в ST-HAL туда, тыкаем сюда, фигак-фигак, оно работает"? Ох сомневаюсь
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18819
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Eddy_Em писал(а):я и не собираюсь помогать тем, кто не принимает помощь
твоя помощь заключается в том, что всех, кто отличается от тебя, ты называешь всякими непотребными словами, инструменты, отличные от твоих - говном, операционку, отличную от твоей - убожеством?

вот как знаток gdb ты мог бы подсказать, что для отладки мне надо воспользоваться режимом удаленной отладки с "сервером", запущенным на локалхосте... но ты этого не сделал, и мне пришлось самому до этого доходить.
КРАМ писал(а):на более качественных у начинающего просто нет денег...
вы уже решили сегрегировать людей по количеству денег у них в кармане? остальные способы унижений вы исчерпали?
COKPOWEHEU писал(а):Чего вы еще ожидаете-то? Что мы выбросим нормальный рабочий код и кинемся изучать ST-HAL что ли?!
а разве я не русским языком написал свой вопрос: меня интересует HAL и CubeMX (или CubeIDE, второе включает первое)? если вы не разбираетесь в HAL, можете просто промолчать, а не начинать учить меня жизни. хотя если уж кое-кто считает допустимым прямо говном меня поливать, то вам с вашими скромными нравоучениями и подавно можно...

я ожидаю адекватной помощи: если я спрашиваю, как не разбить голову при ударе о бетонную плиту, не надо рассказывать, что нормальные люди головой о бетон не бьются, что есть отбойные молотки и т.п. специально обученные тибетские монахи - или посоветуйте каску, или пройдите мимо. вот это адекватное поведение. а все прочее - расчесывание ЧСВ.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=4350611#p4350611"]если кому-то из начинающих будет интересно, как я это сделал, не спрашивайте здесь - пишите мне в ЛС.[/uquote]А чё так? Почувствовав себя гуру 1 lvl сразу на остальных плевать можно? Что тогда о гуру 80 lvl говорить.

И да, тоже мне секрет - GDB Server запустить.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 26079
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4350650#p4350650"]А еще точнее, что я-то знаю ответ, потому и назвал такое решение костыльным.[/uquote]
Я готов извиниться, если вы озвучите свое знание и оно не окажется фейком или иной интерпретацией мною сказанного...
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

ARV, ни в коем случае нельзя начинать изучение STM32 с калокуба. Ну это ж как та же самая абдуриносреда — высер для убогих, которым хочется "тяп-ляп - и в продакшн". Ты же вроде как с AVR вполне себе работаешь и сам должен понимать, чем вменяемая разработка под AVR отличается от быдлокода в абдуриносреде.
Ну так калокуб — как та же абдурина (если не хуже)!
Для начала можно скачать на гитхабе готовые простые примеры, которые можно найти по фразе "bare metal" или "CMSIS". Если видишь там гору директорий и всякие hal_*, spl_*, system_init* и т.п., то сразу закрывай вкладку — это УГ, с которого ничему не научишься.

Добавлено after 2 minutes 14 seconds:
P.S. Для отладки достаточно в Makefile добавить:

Код: Выделить всё

openocd:
    openocd -f openocd.cfg
dbg:
    arm-none-eabi-gdb $(ELF) -ex 'target remote localhost:3333' -ex 'monitor reset halt'
И потом спокойно

Код: Выделить всё

make openocd &
make dbg
Конфиг под заданный камень можно и не кидать локально, а указывать глобально: /usr/share/openocd/scripts/target/ и т.д.

Добавлено after 5 minutes 53 seconds:
VladislavS, а что насчет I2C через DMA под STM32G070? Может, там какой-то секрет есть?
Я вот вообще не вижу в документации, что нужно явно после записи выставлять STOP, как у F103, но у меня и чтение не запускается. В настройке I2C DMA указал:

Код: Выделить всё

I2C1->CR1 = I2C_CR1_PE | I2C_CR1_RXDMAEN | I2C_CR1_TXDMAEN;
Потом перед записью или чтением вызываю настройку DMA:

Код: Выделить всё

static void i2cDMAsetup(int tx, uint8_t len){
    if(tx){
        DMA1_Channel1->CCR = DMATXCCR;
        DMA1_Channel1->CPAR = (uint32_t) &I2C1->TXDR;
        DMAMUX1_Channel0->CCR = 11;
    }else{
        DMA1_Channel1->CCR = DMARXCCR;
        DMA1_Channel1->CPAR = (uint32_t) &I2C1->RXDR;
        DMAMUX1_Channel0->CCR = 10;
    }
    DMA1_Channel1->CMAR = (uint32_t) I2Cbuf;
    DMA1_Channel1->CNDTR = i2cbuflen = len;
}
Выполняю базу (адресация и т.п.), а после START запускаю DMA:

Код: Выделить всё

uint8_t read_i2c_dma(uint8_t addr, uint8_t nbytes){
    if(nbytes < 1) return 0;
    while(I2Cbusy);
    i2cDMAsetup(0, nbytes);
    goterr = 0;
    if(!i2c_startr(addr, nbytes, 1)) return 0;
    DMA1_Channel1->CCR = DMARXCCR | DMA_CCR_EN; // start transfer
    return 1;
}
Пробовал DMA_CCR_EN и в начало запихивать, где инициализация DMA происходит - без результата. Тактирование DMA включено (таки у меня на нем же и USART работает).
И если в случае Tx хотя бы CNDTR в нуль сбрасывался (типа, что-то оно, может быть, и передавало - пока я без осцилла), а вот при Rx CNDTR так и сидит равным количеству запрошенных байт данных.
Сейчас чуть в отладчике поиграюсь, но таки документация совершенно невменяемая: для обычных чтения/записи даже картинки с алгоритмами нарисовали, а для DMA хрен пойми что, еще и фраза "The end of transfer is managed with the NBYTES counter" наводит на мысль, что прерывания по TC у DMA работать не будут и нужно будет контролировать по CNDTR…

Добавлено after 15 minutes 36 seconds:
Ахъ, рукожопие мое зело велико!
Все там работает, это я в одном месте, сбрасывая ошибки перед записью без DMA, не вернул флаги нужные. Опять в виде макроса сделал - усе ОК.
И прерывание отрабатывает, что позволяет устанавливать флаги готовности и сбрасывать флаги занятости. Прелесть!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18819
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):А чё так?
ну, чтобы начинающие знали, где им помогут, как смогут. просто если кто тут задаст вопрос, будет обосран, и только.
VladislavS писал(а):тоже мне секрет - GDB Server запустить
но ведь вы этого не посоветовали? значит, видимо, секрет...
Eddy_Em писал(а):ни в коем случае нельзя начинать изучение STM32 с калокуба
ну вот я успешно пишу под винду на free pascal, и при этом я не углубляюсь ни в регистры процессора, ни в устройство FAT32 или тем паче NTFS, и даже более того, использую готовые компоненты, чтобы тыкая мышкой в 2 клика сделать видеоплейер, например. если потребуется, я могу погрузиться и до уровня регистров и видеопотоков, но это "если потребуется" - для моих задач не требуется. то же самое и с кубом - сделать быстро и легко то, что забожалось. а когда захочется нетрадиционного секса - можно и твоим советам последовать
Eddy_Em писал(а):указывать глобально: /usr/share/openocd/scripts/target/ и т.д.
вот ты даже представить себе не можешь, что за пределами /usr есть жизнь, и этой жизни больше, чем в привычном тебе окружении... поэтому все твои советы и выглядят неуместно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Это не хвост, это антенна
Сообщения: 1379
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

+ARV писал(а):
вопрос остался открытым: где искать?
Очевидно по имени колбэка и очевидно в обработчике. Обнаружив имя в обработчике, легко найти и само тело колбэка.
Странно, для меня очевидным местом поиска было "Руководство по HAL" соответствующей линейки МК. Только оно очень большое и без просмотра исходников HAL при попытках осмысленного использования вряд ли получится получить что-нибудь работающее.
Попробовать HAL, возможно, стОит, хотя бы для понимания, почему пользоваться регистрами выгодней. Простое сопоставление объёмов RM и HAL показывает, что они по объёму примерно равны, поэтому изучение настройки периферии через регистры по времени занимает примерно столько же времени, сколько чтение "Руководства.." для осмысленного использования HAL. Ещё заметь, что HAL в общем случае не обеспечивает переноса один-в-один кода с одного МК на другой. Поэтому рекомендую взять CubeIDE как настроенный искаропки набор инструментов, RM, DS- и в путь.
И ещё. Если надо, то нет никаких препятствий для заимствования из HAL драйвера нужной периферии.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[offtop]Просто упертых вендовозов я вообще людьми не считаю: ведь знают, что есть системы гораздо лучше и удобней, чем это УГ, но нет, продолжают жрать кактус![/offtop]
Кстати, SHT30, на котором я I2C тестирую, оказался на редкость пакостным засранцем: чуть что - "выходит из себя", подвешивая линию… Помогает только перезапуск его питания, я еще на несколько подобных убогих датчиков натыкался, которые всю линию гробят, если ты им неправильную команду дашь или еще что. В общем, надо на моей "нашлепке" для Orange Pi Zero+ предусмотреть еще и сброс питания датчиков, ведь за 17км каждый раз ездить, чтобы проводок тудым-сюдым - дурных нема. Ну и на всех железках с МК нужно подобное предусматривать, чтобы питание периферии была возможность включать/отключать.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

ARV, вы что ли TIM1 в прерывании пытаетесь поморгать светодиодом?

Добавлено after 34 minutes 18 seconds:
Долго его ждать, я уже и там и там поморгал светодиодом, в CubeMX проект создал на HALе, в IARе открыл, через отладчик пропустил.
Код весит

Код: Выделить всё

  4'320 bytes of readonly  code memory
     30 bytes of readonly  data memory
  1'104 bytes of readwrite data memory
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Код весит
Ничего себе! Самый легкий "блинк", ЕМНИП, занимал около 16 байт прошивки!
Мой последний "блинк" под G0 (мыргает с интервалом в секунду, либо отбивает морзянкой 'SOS'):

Код: Выделить всё

   text    data     bss     dec     hex filename
    688     192    1176    2056     808 mk/blink.elf
Посмотри в настройках калокуба: может, там assert включен. Ну и у gcc/ld не забудь проверить:

Код: Выделить всё

CFLAGS      += -fno-common -ffunction-sections -fdata-sections
LDFLAGS     += -Wl,--gc-sections
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Eddy_Em писал(а):Посмотри в настройках калокуба: может, там assert включен. Ну и у gcc/ld не забудь проверить:
Х бы его знал куда тут тыкать.
В IARе в Optimizations Hight и Size стоит.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18819
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Dimon456 писал(а):Долго его ждать
так благодаря помогающим мне приходится подолгу ковыряться в коде и читать всякое, предварительно искать всякое... потому и долго ждать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

СпойлерИзображение Изображение
Вкладку Clock Configuration не трогать, все работает от 8МГц
Куда код вставлять
Спойлер

Код: Выделить всё

  /* USER CODE BEGIN 2 */  
  HAL_TIM_Base_Start_IT(&htim1);
  /* USER CODE END 2 */

Код: Выделить всё

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM1)
    {
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);
    }
}
/* USER CODE END 4 */
Прерывания находятся в файле stm32f1xx_hal_tim.h почти в самом конце
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Дык, должны же быть опции компилятора! Я без понятия, как этот убогий софт компиляет без make, видимо, генерит какой-нибудь скрипт. Но для этого ступодово где-то в недрах должны быть настройки флагов компилятора и линкера.
Лучше всего самому Makefile написать, да пользоваться. У меня он постоянно совершенствуется, вот, с добавлением отладки уже 165 строчек получается…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

ARV, в IARе есть"фишка", которая не доступна в некоторых других IDE. Проверьте в своей IDE.
В режиме отладки найдите что-то вроде CPU Registers (в некоторых случайх нужно выбрать Current CPU Registers). Найдите значение CYCLECOUNTER, которое равно количеству тактов, которое прошло с момента запуска программы.
Чтобы измерить время выполнения функции, сделайте на ней шаг отладчика без захода в тело функции (Step Over). Значение CCSTEP покажет разницу между началом выполнения шага и его завершением.
Если CYCLECOUNTER не обновляется, то попробуйте установить бит CYCCNTENA в регистре DWT Control (DWT_CTRL.CYCCNTEN), который можно найти в группе регистров Data Watchpoint and Trace unit.

Добавлено after 9 minutes 39 seconds:
Eddy_Em писал(а):как этот убогий софт компиляет без make
А CubeMX и не компилирует, он создает проект для выбранной IDE, я IAR выбрал, а так доступно MDK_ARM TrueSTUDIO и еще чего-то есть.
Потом созданный проект тупо открыл в IARе, нажал Make, проект собрался, все.
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Сообщение a797945 »

del
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Eddy_Em писал(а):Ничего себе! Самый легкий "блинк",
Вроде как мы пока только "кнопочку" жмем и размер не имеет значения.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Ну и чем это поможет? Воспитать очередного абдуринщика, вообще не понимающего, что он пишет? "Скачайте скетч отсюда, скопируйте это туда, нажмите кнопочку и вуаля"?

Добавлено after 4 minutes 22 seconds:
Вот мой свежий код, по которому я здесь последние дни вопросы задавал. I2C с DMA или без оного, коннект - по USART (т.к. на G070 USB отсутствует). Размер бинарника - 6288Б. Распределение памяти по эльфу:

Код: Выделить всё

   text    data     bss     dec     hex filename
   6068     220    2512    8800    2260 mk/i2cscan.elf
Странно, кстати, что bss такая здоровая.
P.S. Ну и жесть: у меня размер bss у "блинка" - 1176Б! Откуда, блин! Там вообще нет буферов, а переменных по минимуму. Две страницы кода, треть из которых — лицензия GPL в шапке… В map-файле "блинка" bss кончается со смещением 8, что-то с "size" не то! Аналогично с i2c, где bss кончается по смещению 0x27c, а никак не 0x9d0…
Да, проверил objdump -h - он показывает совсем другие (близкие к реальности) размеры, нежели size. Что-то с size не то!
Ага, вона как: оно к реальному bss прибавляет зачем-то пустое место на выравнивание для моей секции .myvars:

Код: Выделить всё

arm-none-eabi-size -A blink.elf 
blink.elf  :
section           size        addr
.vector_table      192   134217728
.text              688   134217920
.data                0   536870912
.myvars           1168   134218608
.bss                 8   536870912
.comment           117           0
.ARM.attributes     43           0
Total             2216
Последний раз редактировалось Eddy_Em Вс янв 08, 2023 21:02:53, всего редактировалось 2 раза.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Ответить

Вернуться в «ARM»