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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

Блин, я бы Вас понял, если бы не тот момент что гугл на -g3 выдает немецкую автоматическую винтовку( Мне пока такое сложно к сожалению(
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

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

Сообщение bevice »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755500#p3755500"]Почитываю! По чуток чтобы каши не было. вот тебя все утро жду спать не ложусь) Анализатора у меня не ма к сожалению, я занимаюсь ремонтом пром оборудования, а контроллерами занимаюсь первую неделю к сожалению.[/uquote]
Вы не с того начали, так сложно будет.


Так правильно

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

#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]);

Вот это сокращение мне очень нравиться! Его кажется даже понять стало легче, спасибо большое!
как только отвлечетесь и займетесь чем-то другим понять будет сложнее, тогда как первая конструкция останется простой и понятной.
После нас - хоть потоп (с) Лойсо
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

FMC_BANK1->RAM = RGBCode;
__DSB();
Так тоже работает.
((LCTDef *)(uint32_t)(0x60000000 | 0x00000000))->RAM = Command; Но это же тоже самое, что оно не работает то
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

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

Сообщение bevice »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755504#p3755504"]Блин, я бы Вас понял, если бы не тот момент что гугл на -g3 выдает немецкую автоматическую винтовку( Мне пока такое сложно к сожалению([/uquote]
Окей, подробнее.
Все конструкции вида 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();
После нас - хоть потоп (с) Лойсо
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

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

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

Добавлено after 48 seconds:
А про макросы я понял, спасибо большое!
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

bevice, у ТС Iar, не забивай ему мозги GCC-ной мутью.
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

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

Сообщение bevice »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3755514#p3755514"]bevice, у ТС Iar, не забивай ему мозги GCC-ной мутью.[/uquote]
Так он неделю назад начал, может сейчас плюнет на иар и будет нормальным компилятором собирать. Бесплатным, без ограничений, с официальной поддержкой arm.com
Тем более, что подвижки в правильную сторону у ТС имеются.
После нас - хоть потоп (с) Лойсо
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755513#p3755513"]Владислав, а если все настройки сунуть в low_level_init.cpp,[/uquote]В low_level_init стоит перенести все настройки микроконтроллера, которые выполняются один раз при старте: тактирование, GPIO, FSMC. Всё что касается каких-то внешних железок написать в соответствующих файлах, типа lcd.cpp - так что-то типа библиотеки получится.

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755513#p3755513"]и вызывать только функции типа WritePixel();, они будут находить адресата?[/uquote]Чего???

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755513#p3755513"]И файл "stm32f412zx.h", надо подключать в обоих документах или только в low_level_init.cpp?[/uquote]Его нужно подключать там где необходимо его содержимое. Ты же не просто потому что у него красивое имя подключаешь.

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755513#p3755513"]__DSB(); У меня была, просто без нее ни чего не менялось и я ее упростил([/uquote]Я думаю, барьер тут вообще не причём. Надо бы разобраться с тем что и как ты в индикатор пихаешь.

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755513#p3755513"]А про макросы я понял, спасибо большое![/uquote]Везёт, даже я ничего не понял :)
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

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

Сообщение bevice »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755513#p3755513"]__DSB(); У меня была, просто без нее ни чего не менялось и я ее упростил([/uquote]
Это для синхронизации.
После нас - хоть потоп (с) Лойсо
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

Я так понял можно сделать так, чтобы макросы при компиляции не упрощались и их можно было бы смотреть в отладчике.
Про адресата я имею в виду, если функция в одном файле, то из другого ее можно вызвать? Когда я занимался опенгл, надо было переменные, чтобы использовать по всему проекту как то особенно объявлять, кажется public int i; хотя могу ошибаться, 15 лет прошло
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="bevice",url="/forum/viewtopic.php?p=3755516#p3755516"]Так он неделю назад начал, может сейчас плюнет на иар и будет нормальным компилятором собирать.[/uquote]Вот не вот этих ЛОЗУНГОВ. У меня есть опыт сборки проектов разными компиляторами. Для новичка IAR будет лучше. Из-под него рабочий код проще получить.
[uquote="bevice",url="/forum/viewtopic.php?p=3755516#p3755516"]Бесплатным, без ограничений, с официальной поддержкой arm.com[/uquote]Что-то мне подсказывает, что у ТС Iar тоже бесплатный. А что имеется в виду под официальной поддержкой arm.com?
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

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

Сообщение bevice »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755513#p3755513"]а если все настройки сунуть в low_level_init.cpp, и вызывать только функции типа WritePixel();, они будут находить адресата? И файл "stm32f412zx.h", надо подключать в обоих документах или только в low_level_init.cpp?[/uquote]
Сначала разберитесь с тем как работает компилятор, это важная тема.
Вы сейчас сразу за все хватаетесь, очень много всего нового и не сразу понятного - так накосячить можно в тысячах мест.

Добавлено after 5 minutes 7 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3755526#p3755526"][uquote="bevice",url="/forum/viewtopic.php?p=3755516#p3755516"]Так он неделю назад начал, может сейчас плюнет на иар и будет нормальным компилятором собирать.[/uquote]Вот не вот этих ЛОЗУНГОВ. У меня есть опыт сборки проектов разными компиляторами. Для новичка IAR будет лучше. Из-под него рабочий код проще получить.
[uquote="bevice",url="/forum/viewtopic.php?p=3755516#p3755516"]Бесплатным, без ограничений, с официальной поддержкой arm.com[/uquote]Что-то мне подсказывает, что у ТС Iar тоже бесплатный. А что имеется в виду под официальной поддержкой arm.com?[/uquote]

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

Под официальной поддежркой понимается, что arm-none-eabi-gcc сейчас тянет ARM.
https://developer.arm.com/tools-and-sof ... /downloads
Последний раз редактировалось bevice Сб дек 14, 2019 10:32:51, всего редактировалось 1 раз.
После нас - хоть потоп (с) Лойсо
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755523#p3755523"]Про адресата я имею в виду, если функция в одном файле, то из другого ее можно вызвать?[/uquote]А как ты думаешь библиотеки пишут? Конечно можно. Читаем что такое объявление и определение переменных и функций.
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

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

Сообщение bevice »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755523#p3755523"]Я так понял можно сделать так, чтобы макросы при компиляции не упрощались и их можно было бы смотреть в отладчике.
Про адресата я имею в виду, если функция в одном файле, то из другого ее можно вызвать? Когда я занимался опенгл, надо было переменные, чтобы использовать по всему проекту как то особенно объявлять, кажется public int i; хотя могу ошибаться, 15 лет прошло[/uquote]

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


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 раз.
После нас - хоть потоп (с) Лойсо
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

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

Добавлено after 9 minutes 34 seconds:
Господа, не могли бы вы еще мне подсказать, есть некая система когда мы имеем некий буфер, отрисовываем там картинку, выкидываем на экран а в это время рисуем уже другую, тут это неприменимо?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="bevice",url="/forum/viewtopic.php?p=3755527#p3755527"]С каких пор новичку проще иар?[/uquote]Во-первых, у Iar нет таких степеней свободы. Во-вторых, настройки по умолчанию рабочие и их можно вообще не трогать по началу. В-третьих, он многое "прощает" при опитмизации. На GCC не дай бог пропустил где volatile и всё, считай код потёрт.

[uquote="bevice",url="/forum/viewtopic.php?p=3755527#p3755527"]Мне вот кажется, что Clion будет порядком удобнее.[/uquote]Представляю как новичок сможет её настроить для сборки и отладки STM32. Угумс. И с бесплатностью что-то как-то....

[uquote="bevice",url="/forum/viewtopic.php?p=3755527#p3755527"]Там хотя бы нормальная IDE а не блокнот с компилятором.[/uquote]Простая IDE с минимумом настроек и свистоперделок для новичка самое то. Меньше степеней свободы, меньше отвлекающих факторов. Ты же видишь как он в двух строчках кода разобраться не может, а тут ещё IDE настрой, компиялтор настрой...

[uquote="bevice",url="/forum/viewtopic.php?p=3755527#p3755527"]Под официальной поддежркой понимается, что arm-none-eabi-gcc сейчас тянет ARM.[/uquote]И чего? IAR - рабочая лошадка уже десятки лет без всяких "тянет ARM". Заметь, я не говорю, что GCC плохой. Просто на IAR проще получить рабочий результат именно новичку.
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

У меня вообще была мечта скачать новую VS и писать под ней, 15 лет уж не виделись, но у меня только ssd на 126г, и она вместе с дистрибьютивом столько же весит, вот так остался без мечты)
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

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

Сообщение bevice »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3755544#p3755544"][uquote="bevice",url="/forum/viewtopic.php?p=3755527#p3755527"]С каких пор новичку проще иар?[/uquote]Во-первых, у Iar нет таких степеней свободы. Во-вторых, настройки по умолчанию рабочие и их можно вообще не трогать по началу. В-третьих, он многое "прощает" при опитмизации. На GCC не дай бог пропустил где volatile и всё, считай код потёрт.

[uquote="bevice",url="/forum/viewtopic.php?p=3755527#p3755527"]Мне вот кажется, что Clion будет порядком удобнее.[/uquote]Представляю как новичок сможет её настроить для сборки и отладки STM32. Угумс. И с бесплатностью что-то как-то....

[uquote="bevice",url="/forum/viewtopic.php?p=3755527#p3755527"]Там хотя бы нормальная IDE а не блокнот с компилятором.[/uquote]Простая IDE с минимумом настроек и свистоперделок для новичка самое то. Меньше степеней свободы, меньше отвлекающих факторов. Ты же видишь как он в двух строчках кода разобраться не может, а тут ещё IDE настрой, компиялтор настрой...[/uquote]Под официальной поддежркой понимается, что 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:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3755553#p3755553"]У меня вообще была мечта скачать новую VS и писать под ней, 15 лет уж не виделись, но у меня только ssd на 126г, и она вместе с дистрибьютивом столько же весит, вот так остался без мечты)[/uquote]
Хотите научу из блокнота и другого любого редактора код собирать?
После нас - хоть потоп (с) Лойсо
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755538#p3755538"]По поводу таймингов, они же все слизаны с примера, или были подставлены в пример для проверки и он не тупит, по моему я где то конкретно накосячил просто.[/uquote]Извини, но забивание настроек FF-ми моя чуйка отказывается принять как корректную.

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755538#p3755538"]Господа, не могли бы вы еще мне подсказать, есть некая система когда мы имеем некий буфер, отрисовываем там картинку, выкидываем на экран а в это время рисуем уже другую, тут это неприменимо?[/uquote]Ну почему же. Есть такая штука - DMA. Но тебе пока рановато вводить в проект новые сущности/неопределённости, разберись пока с тем что есть.

[uquote="TEPEM",url="/forum/viewtopic.php?p=3755553#p3755553"]У меня вообще была мечта скачать новую VS и писать под ней[/uquote]Нормальное желание. VS + VisualGDB - отличная штука. Последняя опять таки не бесплатна, но судя по пользованию IAR тебя эти условности не тяготят...
Последний раз редактировалось VladislavS Сб дек 14, 2019 11:16:00, всего редактировалось 1 раз.
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

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

Сообщение TEPEM »

Есть же способ обратится к функциям находящимся в 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;
Ответить

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