Почитываю! По чуток чтобы каши не было. вот тебя все утро жду спать не ложусь) Анализатора у меня не ма к сожалению, я занимаюсь ремонтом пром оборудования, а контроллерами занимаюсь первую неделю к сожалению.
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 мне тоже не понравились(
Вот так у меня, и в примере я ее вставлял вместо того что там было и все быстро работало
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения