Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Таймер не работает

Сб дек 14, 2019 09:53:10

Блин, я бы Вас понял, если бы не тот момент что гугл на -g3 выдает немецкую автоматическую винтовку( Мне пока такое сложно к сожалению(

Re: Таймер не работает

Сб дек 14, 2019 09:56:40

Почитываю! По чуток чтобы каши не было. вот тебя все утро жду спать не ложусь) Анализатора у меня не ма к сожалению, я занимаюсь ремонтом пром оборудования, а контроллерами занимаюсь первую неделю к сожалению.

Вы не с того начали, так сложно будет.


Так правильно
Код:
#define FMC_BANK1       ((LCTDef *)(uint32_t)(0x60000000 | 0x00000000))
  FMC_BANK1->RAM = Data;
  __DSB();


Так нет, никогда так не пишите.

Код:
   ((LCTDef *)(uint32_t)(0x60000000 | 0x00000000))->RAM = Command;//LCD_IO_WriteData(Parameters[i]);

Вот это сокращение мне очень нравиться! Его кажется даже понять стало легче, спасибо большое!
как только отвлечетесь и займетесь чем-то другим понять будет сложнее, тогда как первая конструкция останется простой и понятной.

Re: Таймер не работает

Сб дек 14, 2019 09:59:56

FMC_BANK1->RAM = RGBCode;
__DSB();
Так тоже работает.
((LCTDef *)(uint32_t)(0x60000000 | 0x00000000))->RAM = Command; Но это же тоже самое, что оно не работает то

Re: Таймер не работает

Сб дек 14, 2019 10:06:18

Блин, я бы Вас понял, если бы не тот момент что гугл на -g3 выдает немецкую автоматическую винтовку( Мне пока такое сложно к сожалению(

Окей, подробнее.
Все конструкции вида GPIOC->ODR это макросы препроцессора (#define), для компилятора это просто числа и строки в которые они разворачиваются.
вы пишете
Код:
#define VAR 10
int v = VAR;

компилятор это видит как
Код:
int v = 10;

Никакого макроса VAR он не знает. если попробуете посмотреть значение этого макроса - отладчик скажет, что не знает такого символа. Тоже самое происходит, когда вы пытаетесь посмотреть содержимое регистров, обращаясь к ним через макросы CMSIS.
Но. У компилятора GCC есть "уровень отладки 3" при котором в исполняемый файл попадают все определенные макросы и их можно будет смотреть.
Собирать нужно как-то так
Код:
arm-none-eabi-gcc -g3 -c -mcpu=cortex-m3 -mthumb main.c

Это почти как обычно, но добавился тот самый ключ. После сборки с ним можно будет в watchlist добавить любые регистры

Но это же тоже самое, что оно не работает то

не тоже самое
Код:
__DSB();

Re: Таймер не работает

Сб дек 14, 2019 10:10:22

Владислав, а если все настройки сунуть в low_level_init.cpp, и вызывать только функции типа WritePixel();, они будут находить адресата? И файл "stm32f412zx.h", надо подключать в обоих документах или только в low_level_init.cpp?

Добавлено after 1 minute 52 seconds:
__DSB(); У меня была, просто без нее ни чего не менялось и я ее упростил(

Добавлено after 48 seconds:
А про макросы я понял, спасибо большое!

Re: Таймер не работает

Сб дек 14, 2019 10:10:52

bevice, у ТС Iar, не забивай ему мозги GCC-ной мутью.

Re: Таймер не работает

Сб дек 14, 2019 10:12:58

bevice, у ТС Iar, не забивай ему мозги GCC-ной мутью.

Так он неделю назад начал, может сейчас плюнет на иар и будет нормальным компилятором собирать. Бесплатным, без ограничений, с официальной поддержкой arm.com
Тем более, что подвижки в правильную сторону у ТС имеются.

Re: Таймер не работает

Сб дек 14, 2019 10:18:34

Владислав, а если все настройки сунуть в low_level_init.cpp,
В low_level_init стоит перенести все настройки микроконтроллера, которые выполняются один раз при старте: тактирование, GPIO, FSMC. Всё что касается каких-то внешних железок написать в соответствующих файлах, типа lcd.cpp - так что-то типа библиотеки получится.

и вызывать только функции типа WritePixel();, они будут находить адресата?
Чего???

И файл "stm32f412zx.h", надо подключать в обоих документах или только в low_level_init.cpp?
Его нужно подключать там где необходимо его содержимое. Ты же не просто потому что у него красивое имя подключаешь.

__DSB(); У меня была, просто без нее ни чего не менялось и я ее упростил(
Я думаю, барьер тут вообще не причём. Надо бы разобраться с тем что и как ты в индикатор пихаешь.

А про макросы я понял, спасибо большое!
Везёт, даже я ничего не понял :)

Re: Таймер не работает

Сб дек 14, 2019 10:21:33

__DSB(); У меня была, просто без нее ни чего не менялось и я ее упростил(

Это для синхронизации.

Re: Таймер не работает

Сб дек 14, 2019 10:23:48

Я так понял можно сделать так, чтобы макросы при компиляции не упрощались и их можно было бы смотреть в отладчике.
Про адресата я имею в виду, если функция в одном файле, то из другого ее можно вызвать? Когда я занимался опенгл, надо было переменные, чтобы использовать по всему проекту как то особенно объявлять, кажется public int i; хотя могу ошибаться, 15 лет прошло

Re: Таймер не работает

Сб дек 14, 2019 10:24:03

Так он неделю назад начал, может сейчас плюнет на иар и будет нормальным компилятором собирать.
Вот не вот этих ЛОЗУНГОВ. У меня есть опыт сборки проектов разными компиляторами. Для новичка IAR будет лучше. Из-под него рабочий код проще получить.
Бесплатным, без ограничений, с официальной поддержкой arm.com
Что-то мне подсказывает, что у ТС Iar тоже бесплатный. А что имеется в виду под официальной поддержкой arm.com?

Re: Таймер не работает

Сб дек 14, 2019 10:30:15

а если все настройки сунуть в low_level_init.cpp, и вызывать только функции типа WritePixel();, они будут находить адресата? И файл "stm32f412zx.h", надо подключать в обоих документах или только в low_level_init.cpp?

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

Добавлено after 5 minutes 7 seconds:
Так он неделю назад начал, может сейчас плюнет на иар и будет нормальным компилятором собирать.
Вот не вот этих ЛОЗУНГОВ. У меня есть опыт сборки проектов разными компиляторами. Для новичка IAR будет лучше. Из-под него рабочий код проще получить.
Бесплатным, без ограничений, с официальной поддержкой arm.com
Что-то мне подсказывает, что у ТС Iar тоже бесплатный. А что имеется в виду под официальной поддержкой arm.com?


У меня тоже есть опыт сборки разными компиляторами. Ничего сложного в сборке любым нет. Если, конечно, вы не программист-накликал-в-форму-мышкой. С каких пор новичку проще иар? Мне вот кажется, что Clion будет порядком удобнее. Там хотя бы нормальная IDE а не блокнот с компилятором.

Под официальной поддежркой понимается, что arm-none-eabi-gcc сейчас тянет ARM.
https://developer.arm.com/tools-and-sof ... /downloads
Последний раз редактировалось bevice Сб дек 14, 2019 10:32:51, всего редактировалось 1 раз.

Re: Таймер не работает

Сб дек 14, 2019 10:30:28

Про адресата я имею в виду, если функция в одном файле, то из другого ее можно вызвать?
А как ты думаешь библиотеки пишут? Конечно можно. Читаем что такое объявление и определение переменных и функций.

Re: Таймер не работает

Сб дек 14, 2019 10:37:48

Я так понял можно сделать так, чтобы макросы при компиляции не упрощались и их можно было бы смотреть в отладчике.
Про адресата я имею в виду, если функция в одном файле, то из другого ее можно вызвать? Когда я занимался опенгл, надо было переменные, чтобы использовать по всему проекту как то особенно объявлять, кажется public int i; хотя могу ошибаться, 15 лет прошло


Если интересно как устроено - скажите, расскажу.
Если нужно чтобы работало: в файле заголовка объявляете функцию, в коде пишете реализацию этой функции. Там где будете использовать - подключаете заголовок, в котором объявление и пользуетесь.


foo.h
Код:
void my_foo(); // это заголовок

foo.c
Код:
void my_foo() {
 // тут реализация
}


main.c
Код:
#include "foo.h" // подключаете заголовок
void main(){
  my_foo(); // пользуетесь функцией
}



Переменные глобальные можно в другом файле использовать, если объявить их
extern

foo1.c
Код:
int some_var = 0;
..



foo2.c foo3.c итд:
Код:
extern int some_var;


теперь во всех этих файлах видно одну и ту же переменную
Последний раз редактировалось bevice Сб дек 14, 2019 10:40:25, всего редактировалось 1 раз.

Re: Таймер не работает

Сб дек 14, 2019 10:48:41

Во, это вы хорошо расписали, спасибо!
По поводу таймингов, они же все слизаны с примера, или были подставлены в пример для проверки и он не тупит, по моему я где то конкретно накосячил просто.

Добавлено after 9 minutes 34 seconds:
Господа, не могли бы вы еще мне подсказать, есть некая система когда мы имеем некий буфер, отрисовываем там картинку, выкидываем на экран а в это время рисуем уже другую, тут это неприменимо?

Re: Таймер не работает

Сб дек 14, 2019 10:49:39

С каких пор новичку проще иар?
Во-первых, у Iar нет таких степеней свободы. Во-вторых, настройки по умолчанию рабочие и их можно вообще не трогать по началу. В-третьих, он многое "прощает" при опитмизации. На GCC не дай бог пропустил где volatile и всё, считай код потёрт.

Мне вот кажется, что Clion будет порядком удобнее.
Представляю как новичок сможет её настроить для сборки и отладки STM32. Угумс. И с бесплатностью что-то как-то....

Там хотя бы нормальная IDE а не блокнот с компилятором.
Простая IDE с минимумом настроек и свистоперделок для новичка самое то. Меньше степеней свободы, меньше отвлекающих факторов. Ты же видишь как он в двух строчках кода разобраться не может, а тут ещё IDE настрой, компиялтор настрой...

Под официальной поддежркой понимается, что arm-none-eabi-gcc сейчас тянет ARM.
И чего? IAR - рабочая лошадка уже десятки лет без всяких "тянет ARM". Заметь, я не говорю, что GCC плохой. Просто на IAR проще получить рабочий результат именно новичку.

Re: Таймер не работает

Сб дек 14, 2019 11:02:20

У меня вообще была мечта скачать новую VS и писать под ней, 15 лет уж не виделись, но у меня только ssd на 126г, и она вместе с дистрибьютивом столько же весит, вот так остался без мечты)

Re: Таймер не работает

Сб дек 14, 2019 11:06:55

С каких пор новичку проще иар?
Во-первых, у Iar нет таких степеней свободы. Во-вторых, настройки по умолчанию рабочие и их можно вообще не трогать по началу. В-третьих, он многое "прощает" при опитмизации. На GCC не дай бог пропустил где volatile и всё, считай код потёрт.

Мне вот кажется, что Clion будет порядком удобнее.
Представляю как новичок сможет её настроить для сборки и отладки STM32. Угумс. И с бесплатностью что-то как-то....

Там хотя бы нормальная 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-сборщик, которому нужно только указать в какой папке у вас лежат исходники, тут тоже кроме докера ничего не потребуется.

В общем вы где-то в 90х потерялись, вместе с IAR

Добавлено after 41 second:
У меня вообще была мечта скачать новую VS и писать под ней, 15 лет уж не виделись, но у меня только ssd на 126г, и она вместе с дистрибьютивом столько же весит, вот так остался без мечты)

Хотите научу из блокнота и другого любого редактора код собирать?

Re: Таймер не работает

Сб дек 14, 2019 11:07:30

По поводу таймингов, они же все слизаны с примера, или были подставлены в пример для проверки и он не тупит, по моему я где то конкретно накосячил просто.
Извини, но забивание настроек FF-ми моя чуйка отказывается принять как корректную.

Господа, не могли бы вы еще мне подсказать, есть некая система когда мы имеем некий буфер, отрисовываем там картинку, выкидываем на экран а в это время рисуем уже другую, тут это неприменимо?
Ну почему же. Есть такая штука - DMA. Но тебе пока рановато вводить в проект новые сущности/неопределённости, разберись пока с тем что есть.

У меня вообще была мечта скачать новую VS и писать под ней
Нормальное желание. VS + VisualGDB - отличная штука. Последняя опять таки не бесплатна, но судя по пользованию IAR тебя эти условности не тяготят...
Последний раз редактировалось VladislavS Сб дек 14, 2019 11:16:00, всего редактировалось 1 раз.

Re: Таймер не работает

Сб дек 14, 2019 11:15:32

Есть же способ обратится к функциям находящимся в low_level_init.cpp из майна основного?
#include "foo.h" // подключаете заголовок
void main(){
my_foo(); // пользуетесь функцией
}
Так не выходит, при попытке приинклудить low_level_init.cpp он ошибку кидает(

Извини, но забивание настроек FF-ми моя чуйка отказывается принять как корректную.


Я полазил по англоязычным сайтам и нашел несколько регистровых настроек FSMC, одна из них подошла, FFFFFFFFF мне тоже не понравились(

Вот так у меня, и в примере я ее вставлял вместо того что там было и все быстро работало
Код:
  FSMC_Bank1->BTCR[0] &= 0x00000000;
  FSMC_Bank1->BTCR[0] |= 1 << 14| 1 << 12 | 0x01 << 4 | 0x00 << 2 | 1 << 0;

  FSMC_Bank1->BTCR[1] &= 0x00000000;
  FSMC_Bank1->BTCR[1] |= 0x00 << 28 | 0x0000 << 20 | 0x0f << 8 | 0x01;

  FSMC_Bank1E->BWTR[0] &= 0x00000000;                         
  FSMC_Bank1E->BWTR[0] |= 0x00 << 28 | 0x0000 << 20 | 0x03 << 8 | 0x00;
Ответить