Почитываю! По чуток чтобы каши не было. вот тебя все утро жду спать не ложусь) Анализатора у меня не ма к сожалению, я занимаюсь ремонтом пром оборудования, а контроллерами занимаюсь первую неделю к сожалению.
FMC_BANK1->RAM = RGBCode; __DSB(); Так тоже работает. ((LCTDef *)(uint32_t)(0x60000000 | 0x00000000))->RAM = Command; Но это же тоже самое, что оно не работает то
Блин, я бы Вас понял, если бы не тот момент что гугл на -g3 выдает немецкую автоматическую винтовку( Мне пока такое сложно к сожалению(
Окей, подробнее. Все конструкции вида GPIOC->ODR это макросы препроцессора (#define), для компилятора это просто числа и строки в которые они разворачиваются. вы пишете
Код:
#define VAR 10 int v = VAR;
компилятор это видит как
Код:
int v = 10;
Никакого макроса VAR он не знает. если попробуете посмотреть значение этого макроса - отладчик скажет, что не знает такого символа. Тоже самое происходит, когда вы пытаетесь посмотреть содержимое регистров, обращаясь к ним через макросы CMSIS. Но. У компилятора GCC есть "уровень отладки 3" при котором в исполняемый файл попадают все определенные макросы и их можно будет смотреть. Собирать нужно как-то так
Владислав, а если все настройки сунуть в low_level_init.cpp, и вызывать только функции типа WritePixel();, они будут находить адресата? И файл "stm32f412zx.h", надо подключать в обоих документах или только в low_level_init.cpp?
Добавлено after 1 minute 52 seconds: __DSB(); У меня была, просто без нее ни чего не менялось и я ее упростил(
Добавлено after 48 seconds: А про макросы я понял, спасибо большое!
bevice, у ТС Iar, не забивай ему мозги GCC-ной мутью.
Так он неделю назад начал, может сейчас плюнет на иар и будет нормальным компилятором собирать. Бесплатным, без ограничений, с официальной поддержкой arm.com Тем более, что подвижки в правильную сторону у ТС имеются.
_________________ После нас - хоть потоп (с) Лойсо
Владислав, а если все настройки сунуть в low_level_init.cpp,
В low_level_init стоит перенести все настройки микроконтроллера, которые выполняются один раз при старте: тактирование, GPIO, FSMC. Всё что касается каких-то внешних железок написать в соответствующих файлах, типа lcd.cpp - так что-то типа библиотеки получится.
Я так понял можно сделать так, чтобы макросы при компиляции не упрощались и их можно было бы смотреть в отладчике. Про адресата я имею в виду, если функция в одном файле, то из другого ее можно вызвать? Когда я занимался опенгл, надо было переменные, чтобы использовать по всему проекту как то особенно объявлять, кажется public int i; хотя могу ошибаться, 15 лет прошло
а если все настройки сунуть в low_level_init.cpp, и вызывать только функции типа WritePixel();, они будут находить адресата? И файл "stm32f412zx.h", надо подключать в обоих документах или только в low_level_init.cpp?
Сначала разберитесь с тем как работает компилятор, это важная тема. Вы сейчас сразу за все хватаетесь, очень много всего нового и не сразу понятного - так накосячить можно в тысячах мест.
Бесплатным, без ограничений, с официальной поддержкой arm.com
Что-то мне подсказывает, что у ТС Iar тоже бесплатный. А что имеется в виду под официальной поддержкой arm.com?
У меня тоже есть опыт сборки разными компиляторами. Ничего сложного в сборке любым нет. Если, конечно, вы не программист-накликал-в-форму-мышкой. С каких пор новичку проще иар? Мне вот кажется, что Clion будет порядком удобнее. Там хотя бы нормальная IDE а не блокнот с компилятором.
Я так понял можно сделать так, чтобы макросы при компиляции не упрощались и их можно было бы смотреть в отладчике. Про адресата я имею в виду, если функция в одном файле, то из другого ее можно вызвать? Когда я занимался опенгл, надо было переменные, чтобы использовать по всему проекту как то особенно объявлять, кажется public int i; хотя могу ошибаться, 15 лет прошло
Если интересно как устроено - скажите, расскажу. Если нужно чтобы работало: в файле заголовка объявляете функцию, в коде пишете реализацию этой функции. Там где будете использовать - подключаете заголовок, в котором объявление и пользуетесь.
Во, это вы хорошо расписали, спасибо! По поводу таймингов, они же все слизаны с примера, или были подставлены в пример для проверки и он не тупит, по моему я где то конкретно накосячил просто.
Добавлено after 9 minutes 34 seconds: Господа, не могли бы вы еще мне подсказать, есть некая система когда мы имеем некий буфер, отрисовываем там картинку, выкидываем на экран а в это время рисуем уже другую, тут это неприменимо?
Во-первых, у Iar нет таких степеней свободы. Во-вторых, настройки по умолчанию рабочие и их можно вообще не трогать по началу. В-третьих, он многое "прощает" при опитмизации. На GCC не дай бог пропустил где volatile и всё, считай код потёрт.
Там хотя бы нормальная IDE а не блокнот с компилятором.
Простая IDE с минимумом настроек и свистоперделок для новичка самое то. Меньше степеней свободы, меньше отвлекающих факторов. Ты же видишь как он в двух строчках кода разобраться не может, а тут ещё IDE настрой, компиялтор настрой...
Под официальной поддежркой понимается, что arm-none-eabi-gcc сейчас тянет ARM.
И чего? IAR - рабочая лошадка уже десятки лет без всяких "тянет ARM". Заметь, я не говорю, что GCC плохой. Просто на IAR проще получить рабочий результат именно новичку.
У меня вообще была мечта скачать новую VS и писать под ней, 15 лет уж не виделись, но у меня только ssd на 126г, и она вместе с дистрибьютивом столько же весит, вот так остался без мечты)
Во-первых, у Iar нет таких степеней свободы. Во-вторых, настройки по умолчанию рабочие и их можно вообще не трогать по началу. В-третьих, он многое "прощает" при опитмизации. На GCC не дай бог пропустил где volatile и всё, считай код потёрт.
Там хотя бы нормальная IDE а не блокнот с компилятором.
Простая IDE с минимумом настроек и свистоперделок для новичка самое то. Меньше степеней свободы, меньше отвлекающих факторов. Ты же видишь как он в двух строчках кода разобраться не может, а тут ещё IDE настрой, компиялтор настрой...
Под официальной поддежркой понимается, что arm-none-eabi-gcc сейчас тянет ARM. [/uquote]И чего? IAR - рабочая лошадка уже десятки лет без всяких "тянет ARM". Заметь, я не говорю, что GCC плохой. Просто на IAR проще получить рабочий результат именно новичку.[/uquote]
* не нужно пропускать volatile там где он нужен и с оптимизацией-по умолчанию ничего страшного не случится. Если иар позволяет такие фокусы даже со включенной на полную оптимизацией - оптимизатор у него не работает.
* New project -> Get from Version Control. Пишем адрес шаблона. Готово. Еще в одном окне выбрать какой отладчик. Да она не бесплатная, но стоит как 1/100 иара, при этом является вменяемой IDE и быстро работает. Но если так не нравится - Code::Block почти без настроек работает. Буквально вчера пробовал.
* Да я вижу, что человек плавает в простейших вещах. Но на галочках иара у него понимание как устроено и не появится.
Рабочий код новичку получить с GCC ваще просто, у меня например к гитлабу автосборщики прикручены - коммитите код, он его сам собирает, ваще нажимать ничего не нужно. Есть docker-сборщик, которому нужно только указать в какой папке у вас лежат исходники, тут тоже кроме докера ничего не потребуется.
У меня вообще была мечта скачать новую VS и писать под ней, 15 лет уж не виделись, но у меня только ssd на 126г, и она вместе с дистрибьютивом столько же весит, вот так остался без мечты)
Хотите научу из блокнота и другого любого редактора код собирать?
_________________ После нас - хоть потоп (с) Лойсо
По поводу таймингов, они же все слизаны с примера, или были подставлены в пример для проверки и он не тупит, по моему я где то конкретно накосячил просто.
Извини, но забивание настроек FF-ми моя чуйка отказывается принять как корректную.
Господа, не могли бы вы еще мне подсказать, есть некая система когда мы имеем некий буфер, отрисовываем там картинку, выкидываем на экран а в это время рисуем уже другую, тут это неприменимо?
Ну почему же. Есть такая штука - DMA. Но тебе пока рановато вводить в проект новые сущности/неопределённости, разберись пока с тем что есть.
Есть же способ обратится к функциям находящимся в low_level_init.cpp из майна основного? #include "foo.h" // подключаете заголовок void main(){ my_foo(); // пользуетесь функцией } Так не выходит, при попытке приинклудить low_level_init.cpp он ошибку кидает(
Цитата:
Извини, но забивание настроек FF-ми моя чуйка отказывается принять как корректную.
Я полазил по англоязычным сайтам и нашел несколько регистровых настроек FSMC, одна из них подошла, FFFFFFFFF мне тоже не понравились(
Вот так у меня, и в примере я ее вставлял вместо того что там было и все быстро работало
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения