Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/39: Рейтинг темы: голосов - 39, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
1

Видимо дурацкий вопрос но можно ли CRL и CRH объеденить?

15.11.2014, 16:07. Показов 7276. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Читая инфу про удобную настройку портов, подумал а почему бы не попытаться объединить эти два регистра, чтобы упростить макрос настройки.
Попытался сделать через (uint64_t)(GPIOx->CRL = .....) настраивал 10 ножку, смотрел в отладчике асм, по началу все идет хорошо, в регистре появляется адрес CRH но потом что то идет не так и берется значение CRL.
1. Так не получится сделать в принципе.
2. сделать можно но будет медленно работать.
3. Не по феншую такие выкрутасы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2014, 16:07
Ответы с готовыми решениями:

Дурацкий вопрос
А вот интересно : Яндекс и Гугл случайно не запоминают запросы с определённого адреса ? а потом...

Дурацкий вопрос по стилям
Когда сажаю текст в тэги h1 - он получается как будто бы для слабовидящих ((( Но видел на других...

Дурацкий вопрос по VBScript
Простите великодушно - как вызвать bat-файл из файла vbs?

Дурацкий вопрос по DataGrid
Как внести изменения в таблицу? Делаю по MSDN документации , но не получается. Выбрать новую...

Replace дурацкий вопрос :)
rs("qwerty") имеет значение типа "фывап" (включаяя кавычки!!!!) мне надо вывести элемент а мне...

27
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 701
15.11.2014, 17:07 2
Совсем непонятно, что там вам непонятно... и что хотите получить...
Камень какой??? Что делаете и что не получается???
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
15.11.2014, 17:20 3
STM32F103, да особо ничего не делаю, потихоньку экспериментирую с портами и тп. Пришла мысль что можно попытаться обращаться к CRL и CRH как к одному 64 битному регистру.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
15.11.2014, 17:49 4
а шины данных внутри F103 уже 64х разрядные стали. чтобы за раз обращаться сразу к паре 32хбитных регистров?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
15.11.2014, 18:06 5
По-моему, вопрос не в разрядности шин, а в разрядности регистров. А они все 32-разрядные.
Как я понял из RM0008, CRL и CRH лежат рядом, по смежным адресам.
Поэтому это вполне возможно нечто подобное:
uint64_t *pCr = (uint64_t *)&(GPIOA->CRL);
*pCr= 0xFFFFFFFF00000000;

Ну а будет ли оно работать, не знаю :). Проверяйте :).

От себя могу лишь сказать, что в GCC (Coosox) есть какие-то баги при работе с указателями uint64_t *. То ли при записи по такому указателю, то ли при чтении оттуда проц тупо вываливался в HordFault. Пришлось делать какой-то жуткий костыль, чтобы обойти этот баг. Но там я работал не с регистрами, а с ROM (обычные переменные). Хотя какая разница, адресное пространство ведь одно, для ядра всё равно, в ROM писать, или куда-то ещё ...
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
15.11.2014, 18:37 6
Спасибо за подробный ответ, я на весьма любительском уровне всем этим занимаюсь, и языком плохо владею, запутался в скобках и приведении типов, кстати про баг, я пользуюсь кейлом, создал указатель uhint64_t и он даже указывает, но при попытке дать ему значение отличное от ноля, компилятор ругается что не может впихнуть int в uint64_t. Может это тоже баг какой.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
15.11.2014, 18:51 7
int - это 32 бит, а не 64. Плюс к этому int - знаковый тип, а любой uintxx_t - беззнаковый. Наверное поэтому и ругается.
Проверить работу указателей можно на примитивном примере:

uint64_t temp = 0, *p;

// p - указатель на temp
*p = &temp;

// Записываем в temp
*p = (uint64_t)0xFFFFFFFF00000000;

Впихните это в любую программу и проверьте отладкой, чему будет равна temp. Я думаю, Вы догадались, чему она должна быть равна :).
Если оно отработает нормально, то переходите к регистрам. Если оно сглючит каким-либо образом, то, я думаю, Ваша хотелка вообще нереализуема. Тогда пользуйтесь как обычно, через CRH/CRL.
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
15.11.2014, 19:06 8
Я наверно не совсем ясно выразился, указатель создается, но в программе я его не использую, но в ватч добавляю и вижу что значение указателя 0, а по этому адресу вижу 64битное значение, далее в программе я пишу ptr=1 ( пробовал подряд до 10), при компиляции выдает ошибку int не могу запихнуть в uint64_t, сейчас не у компа дословно процитировать не могу.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
15.11.2014, 19:26 9
Чтобы изменить то, на что указывает указатель, надо перед ним записать *.
ptr = 1; - это меняет сам указатель, а не то, на что он указывает.
*ptr = 1; - а вот это меняет не указатель, а то, на что указатель указывает. Сам указатель не изменяется.
Эти 2 оператора совершенно разные вещи.
Ладно, когда доберётесь до компа, поговорим.

А вообще - почитайте учебник по Си, раздел про указатели. Полезно будет :) .
Язык Си практически не зависит от типа проца, на котором программа работает.
0
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 157
15.11.2014, 19:29 10
+1
http://iosyitistromyss.ru/file/yazyk-pr ... hnik/124-2
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
15.11.2014, 19:52 11
Я понимаю разницу, и я именно хочу изменить указатель.
0
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 157
15.11.2014, 20:03 12
А как это коррелирует с твоим вопросом?
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
15.11.2014, 20:06 13
Это был ответ для hd44780.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
15.11.2014, 20:28 14
Bmox77, когда доберётесь до компа, покажете код.
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
15.11.2014, 21:10 15
Сделал так:
Цитата Сообщение от hd44780
uint64_t temp = 0, *p;

// p - указатель на temp
*p = &temp;

// Записываем в temp
*p = (uint64_t)0xFFFFFFFF00000000;
Получил вот это: Step_Kim.c(299): error: #513: a value of type "uint64_t *" cannot be assykned to an entity of type "uint64_t"
0
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 157
15.11.2014, 21:19 16
Bmox77, почитай, наконец ту ссылку и посмотри как работают с указателями в си.
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
15.11.2014, 21:31 17
OrtDim, я прочитал по ссылке. Если вам не трудно ткните носом, что я делаю не так?
0
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 157
15.11.2014, 21:43 18
У тебя p - это указатель, а *p - это то, на что указатель указывает. Так как тогда понять
*p = &temp;
?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
15.11.2014, 21:55 19
Извиняюсь. Это моя тупейшая опечатка.

// p - указатель на temp
p = &temp;
0
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
15.11.2014, 21:57 20
Блин и у меня глаза уже совсем замылились.
Ха, в общем через указатель вполне работает, только объясните мне что это значит (uint64_t *)&(GPIOB->CRL);?
0
15.11.2014, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2014, 21:57
Помогаю со студенческими работами здесь

Может дурацкий вопрос!!!
Какие компилятори языка С++ Ви знаете?????????

Дурацкий вопрос про comboBox
Сделал браузер. В окошко comboBox'a вводится адрес. При нажатии на кнопку осуществляется переход. ...

Вопрос по Crl, поддерживается ли расширенные поля.
У нас запускается удостоверяющий центр. И работники УЦ интересуется для страховки имеется ли в...

Инвертор CCFL дурацкий вопрос профана.
Всем привет. Нужна помощь умного человека. Ремонтирую старенький планшетный сканер - сдохли...

Наверно, это самый дурацкий вопрос:
Наверно, это самый дурацкий вопрос: какой бесплатный хост самый лучший ? Правка = ну раз так...

http://www.public-trust.com/cgi-bin/CRL/2018/cdp.crl - адрес заблокирован
ESET выдает уведомления, что адрес http://www.public-trust.com/cgi-bin/CRL/2018/cdp.crl...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru