token1993 0 27 апреля, 2021 Опубликовано 27 апреля, 2021 (изменено) · Жалоба Здравствуйте, хотел бы задать вопросы по поводу кода для контроллера K1986BE92QI . // Загружаем адрес Порта D (адрес0x400C_8000) в регистр R6 __ASM("MOVW R6, #0x8000"); // Записать в младшее полуслово регистра R6 // значение 0x8000 __ASM("MOVT R6, #0x400C"); // Записать в старшее полуслово регистра R6 // значение 0x400C Во первых зачем было разделять значения адреса с помощью команд MOVW и MOVT ? Во вторых почему адрес порта D выглядит так ? Изменено 27 апреля, 2021 пользователем token1993 Не дописал букву Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forummailandlogin 0 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба Во первых, по чему бы не спросить автора этого кода. Во вторых, по чему бы не почитать документацию на Cortex-M3 и на 1986BE9x в частности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
token1993 0 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба Автора не спросишь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forummailandlogin 0 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба В таком случае это всё домыслы. Может время тянет. Может не знает, что LDR есть. Может задача стояла использовать только MOV. Может быть ворона. А может это дворник был. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
token1993 0 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба Ладно, а зачем разделять адрес с помощью команд MOVW и MOVT? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба 22 минуты назад, token1993 сказал: Ладно, а зачем разделять адрес с помощью команд MOVW и MOVT? А как надо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 189 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба Реализация МК (объем памяти, наличие буфера предвыборки) влияет на оптимальность выбора MOVW/MOVT или LDR. Тут несколько подробнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
token1993 0 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба Стало больше ясности Единственно только не как не могу понять почему надо разделять адрес порта ? Прошу прощения за столь тупые вопросы я только учусь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба 2 часа назад, token1993 сказал: Во первых зачем было разделять значения адреса с помощью команд MOVW и MOVT ? Так можно передать значения для 32-битного регистра непосредственно в команде. 2 часа назад, token1993 сказал: Во вторых почему адрес порта D выглядит так ? Видимо, опечатка. Или это порт E, или младшие 16 бит должны быть нулевые. 19 минут назад, token1993 сказал: Прошу прощения за столь тупые вопросы я только учусь. ASM принципиально нужен? На Си все гораздо проще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба Единственно только не как не могу понять почему надо разделять адрес порта ? Ибо Thumb2... операнды у заинтересовавших вас команд какой разрядности? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 189 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба ИМХО, никаких премудростей с MOVW/MOVT автор тех строк не затевал. Тупо привычка/стиль грузить адреса и небольшие литералы, не более того. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба 1 минуту назад, Arlleex сказал: Тупо привычка грузить адреса и небольшие литералы в регистры, не более того. ...Или ограничение inline-асма, не позволяющего сделать LDR по PC+смещение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
token1993 0 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба И я так понимаю нету разницы как написать адрес (адрес0x400C_8000) через MOVW/MOVT можно так __ASM("MOVW R6, #0x8000"); __ASM("MOVT R6, #0x400C") а можно так __ASM("MOVW R6,#0x400C") __ASM("MOVT R6,#0x8000"); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 27 апреля, 2021 Опубликовано 27 апреля, 2021 · Жалоба Нет: MOVW R6, #0x8000 // R6 = 00008000 MOVT R6, #0x400C // R6 = 400C8000 а так результат будет несколько иной: MOVW R6, #0x400C // R6 = 0000400C MOVT R6, #0x8000 // R6 = 8000400C Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
token1993 0 27 апреля, 2021 Опубликовано 27 апреля, 2021 (изменено) · Жалоба А вообще в адресе вот это 0x400C и вот это 8000 ещё что то может значить ? Или эти чисто цифры которые нужны для обращения к адресу. Изменено 27 апреля, 2021 пользователем token1993 Не дописал букву Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться