Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 новичку в ARM что к чему
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт мар 19, 2024 13:59:10

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8459 ]     ... , , , 369, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 11:40:08 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 775
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4990
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Т.е и так тоже можно?
*(__IO uint32_t*)0x40000000 = 0x5555AAAA;

Получается 0x40000000 это тот адрес, который лежит в указателе, а *(__IO uint32_t*)0x40000000 это обращение по этому адресу, который лежит в указателе?

_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 11:41:30 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4871
Откуда: Минск
Рейтинг сообщения: 3
Да, всё верно, можно и так.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 11:45:37 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 775
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4990
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Хорошо. Тогда где сам указатель?

Добавлено after 2 minutes 25 seconds:
Просто, обычно, (как правило, во всех примерах по языку) указатель - это тоже переменная.

_________________
Станислав


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 11:45:59 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4871
Откуда: Минск
Рейтинг сообщения: 3
Не совсем понял, какой указатель. В Вашей записи он присутствует неявно (к нему приводится число 0x40000000), но он тут же разыменовывается. Но вообще гляньте на предыдущей странице моё последнее сообщение в конце.

Указатель - не обязательно переменная. В нашем случае он константа, численно равная 0x40000000. А уже там, по этому адресу, лежит переменная.


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 11:52:24 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 775
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4990
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Да. вот эта конструкция абсолютно понятна.

Код:
volatile uint32_t *ptr;
ptr = 0x40000004;
*ptr = 0x5555AAAA;


Потому что здесь есть имя указателя, как обычной переменной. А в МК его нету.. Вот и путаница

Добавлено after 3 minutes 15 seconds:
Указатель - не обязательно переменная. В нашем случае он константа, численно равная 0x40000000.


Вот! Именно это никто не говорит в курсах про Си. Там явно и однозначно говорят, что указатель это такая переменная, которая.. бла бла. А то, что он может быть константой я нигде не видел! И теперь у меня колапс головного мозга, как уложить то, что просто константа (по сути цифра) может тоже быть указателем.

_________________
Станислав


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 11:57:29 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4871
Откуда: Минск
Рейтинг сообщения: 3
Но это имя по сути не нужно.
Код:
volatile uint32_t *ptr = 0x40000004;
*ptr = 0x5555AAAA;

Это абсолютно эквивалентно
Код:
*(volatile uint32_t*)0x40000004 = 0x5555AAAA;

Вся эта конструкция (volatile uint32_t*)0x40000004 - это и есть тот самый ptr. Отдельное имя ему выделять не обязательно. Удобнее выделить отдельное имя сразу для *ptr

Добавлено after 3 minutes 38 seconds:
СКАЗОЧНИК писал(а):
Именно это никто не говорит в курсах про Си. Там явно и однозначно говорят, что указатель это такая переменная, которая.. бла бла
Вы так говорите, как будто не использовали никогда константных строк или константных массивов.

А ведь разницы никакой нет. Когда мы пишем, например, const int buf[] = {5, 3, 4, 2}; - мы ведь точно так же имеем buf - константный указатель. Просто в этом случае компилятор где-то разместит этот массив в памяти (во flash-памяти, например) и присвоит buf-у константный указатель на это место. А в наших примерах мы можем делать это руками, так как адреса периферий фиксированные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 12:09:42 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 775
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4990
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Видимо, я очень плохо соображаю в Си. что так и есть.
Даже констаный массив, который Вы описали имеет имя. И я его вижу именно по имени, а не цифрами в виде адреса. ))))))) А то, что потом с ним сделает компилятор уже его дело.
В наших же вышеуказанных примерах, имен все равно нету. Есть конечное объявление (через дефайн) на обращение по указателю. Короче, я понял, что мне не хватает. ) Одного урока по Си, где бы были примеры и варианты использования констант как указателей. Что не обязательно задвать указателю имя, как переменной и что он вообще может не являться перменной. А может быть реальной константой и при этом без имени, а тупо само число. И компилятор все это нормально схавает.
Конечно, с учетом среды, где все это используется. Если это программирование для РС, то может и выкинут, если залезть в неразрешенный адрес, а если это МК, то адреса можно посмотреть в рефренс мануале.

_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 12:15:58 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2475
Рейтинг сообщения: 3
СКАЗОЧНИК, научитесь смотреть листинг того что делает компилятор. Проще понимать что делает код будет. Вот что делает ваш код.
Код:
//*(__IO uint32_t*)0x40000000 = 0x5555AAAA;
        MOVS     R0,#+128       
        LSLS     R0,R0,#+23     
        LDR      R1,??DataTable1
        STR      R1,[R0, #+0]   
             
//*((__IO uint32_t*)0x40000000+1) = 0x5555AAAA;
        STR      R1,[R0, #+4]
//*(__IO uint32_t*)0x40000004 = 0x5555AAAA;
        STR      R1,[R0, #+4]     
       
??DataTable1:
        DATA32
        DC32     0x5555aaaa 
Обратите внимание, как при доступе по адресу 0x40000004 был использован базовый адрес 0x40000000 и смещение 4 от него. Точно так же осуществляется доступ к полям структуры смещением от базового адреса.

Добавлено after 1 minute 43 seconds:
А может быть реальной константой и при этом без имени, а тупо само число.
Не тупо само число!!! Вы же делаете приведение типа от числа к указателю. Результат этого приведения и есть указатель. Тупо записать в число, конечно же, ничего нельзя.

Добавлено after 4 minutes 15 seconds:
А теперь найдите хоть одно отличие
Код:
//__IO uint32_t *adr = (uint32_t *)0x40000000;
//  *adr = 0x5555AAAA;
        MOVS     R0,#+128       
        LSLS     R0,R0,#+23     
        LDR      R1,??DataTable1
        STR      R1,[R0, #+0]   
           
//*(adr+1) = 0x5555AAAA;
        STR      R1,[R0, #+4]   
       
        ??DataTable1:
        DATA32
        DC32     0x5555aaaa 


Последний раз редактировалось VladislavS Пн июн 21, 2021 12:22:15, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 12:20:38 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 775
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4990
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Приведение типа к указателю на структуру. Если до меня правильно доходит..

А можно так написать?

(__IO uint32_t*)0x40000000;
*0x40000000 = 0x5555AAAA;

_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 12:24:01 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2475
Рейтинг сообщения: 3
А можно так написать?
Да написать то что угодно можно, бумага всё стерпит. Только фигняс получается.


Последний раз редактировалось VladislavS Пн июн 21, 2021 12:24:43, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 12:24:31 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4871
Откуда: Минск
Рейтинг сообщения: 3
Так нельзя, это синтаксическая ошибка. Разыменовывать просто число нельзя.

А вот разыменовать это же число, приведённое к конкретному указателю - можно. Хотя формально и то и другое - одно и то же число, но в одном случае - это просто число, а во втором - адрес некоторой ячейки.

Кстати, в примере ниже результат будет тоже разный, несмотря на "одно и то же число"
Код:
*(__IO uint32_t*)0x40000000 = 0x5555AAAA;
*(__IO uint16_t*)0x40000000 = 0x5555AAAA;
*(__IO uint8_t*)0x40000000 = 0x5555AAAA;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 12:32:10 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 775
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4990
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Благодарю за помощь. ) Много нового узнал.

Добавлено after 4 minutes 4 seconds:
Кстати, в примере ниже результат будет тоже разный, несмотря на "одно и то же число"
Код:
*(__IO uint32_t*)0x40000000 = 0x5555AAAA;
*(__IO uint16_t*)0x40000000 = 0x5555AAAA;
*(__IO uint8_t*)0x40000000 = 0x5555AAAA;


Правильно я понмаю, что превое - это указатель на область памяти в 32 бита с адресом 0x40000000, и в эту область можно нормально записать число 0x5555AAAA, а в два других уже не влезет.? Хоть эта область расположена по этому же адресу...

_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 12:35:05 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2475
Рейтинг сообщения: 3
Что значит "не влезет"? :) Константа 0x5555AAAA будет приведена к типу левого операнда и будет записана командами STR, STRH и STRB соответственно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 12:39:16 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 775
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4990
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ассемблер для STM пока что сложноватая штука для меня. ) Команды не такие , как были в АВР.

_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 13:47:20 
Мучитель микросхем

Карма: 6
Рейтинг сообщений: 112
Зарегистрирован: Пн май 27, 2019 07:18:28
Сообщений: 437
Откуда: ВВХ-ск
Рейтинг сообщения: 0
Что значит "не влезет"?

Это значит, что в результате смены типа изменится значение.
А что ещё это может значить?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 16:18:03 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 3
Ассемблер для STM пока что сложноватая штука для меня. ) Команды не такие , как были в АВР.

Так экспериментируйте на AVR, кто мешает. Вот например как можно организовать порты для ATmega8
Код:
#include <avr/io.h>

typedef struct{
  uint8_t PIN;
  uint8_t DDR;
  uint8_t PORT;
}GPIO;

#define GPIOB ((volatile GPIO*)(0x0036))
#define GPIOC ((volatile GPIO*)(0x0033))
#define GPIOD ((volatile GPIO*)(0x0030))

int main(){
  GPIOB->DDR = 1;
  GPIOB->PORT = 2;
  GPIOB->PIN = 3;
 
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 16:44:20 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4871
Откуда: Минск
Рейтинг сообщения: 3
Почему адреса 36/33/30, а не 16/13/10?
Код:
// iom8.h

/* Port D */
#define PIND   _SFR_IO8(0x10)
#define DDRD   _SFR_IO8(0x11)
#define PORTD   _SFR_IO8(0x12)

/* Port C */
#define PINC   _SFR_IO8(0x13)
#define DDRC   _SFR_IO8(0x14)
#define PORTC   _SFR_IO8(0x15)

/* Port B */
#define PINB   _SFR_IO8(0x16)
#define DDRB   _SFR_IO8(0x17)
#define PORTB   _SFR_IO8(0x18)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 16:46:11 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 775
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4990
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ну, тут уже дело техники. ) Сам смысл понятен, что можно от традиционного АВР получить что-то похожее на СТМ. ) И если изначально так бы было, то переход с тех же АВР был бы легче.

_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 18:06:25 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 3
Почему адреса 36/33/30, а не 16/13/10?

Потому что указывается адрес, отображенный на память, а не сырой адрес для in/out.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пн июн 21, 2021 18:23:56 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4871
Откуда: Минск
Рейтинг сообщения: 3
Ага, ОК, увидел __SFR_OFFSET в sfr_defs.h, который может быть либо 0x20, либо 0x00 в разных МК AVR.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8459 ]     ... , , , 369, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y