allsettingsdone 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Не могу понять как создавать и работать с переменными разного размера в ассемблере в Keil. Директивы DB, DW, DD выдают ошибку(похоже на то, что Keil их вообще не знает), BYTE, WORD, DWORD - то же самое. Как я понял директивы GBLL, GBLS, GBLA создают (в RAM?) переменную и далее ей можно придать значение используя SETA, SETL, SETS, но при попытке повторно сохранить значение этой переменной получаем ошибку при компиляции, да и не понятно где именно в памяти Keil разместит переменную. Можно конечно сделать так Var0 EQU 0x(адрес переменной в памяти), но есть ли другие(более удобные) способы ? И как вообще принято это делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Директивы DB, DW, DD выдают ошибку(похоже на то, что Keil их вообще не знает), BYTE, WORD, DWORD - то же самое. DCB, DCW, DCWU, DCD, DCDU.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
allsettingsdone 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба DCB, DCW, DCWU, DCD, DCDU.... Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF Затем уменьшаю на 1 ( MOV32 R0, #test0 SUB R0, #1) Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба http://infocenter.arm.com/help/index.jsp?t...b/Bcfihdhj.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF Затем уменьшаю на 1 ( MOV32 R0, #test0 SUB R0, #1) Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта? мне всегда помогало написать код на С, а потом поглядеть дизассемблер после компиляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF Затем уменьшаю на 1 ( MOV32 R0, #test0 SUB R0, #1) Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта? DCWU это и есть "выделение" памяти. Вы не сообщили, зачем именно ассемблер, но одним из лозунгов ARM при введении Cortex и ПО к нему (CMSIS, периферийных библиотек производителей) было типа "no assembler". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Вы не сообщили, зачем именно ассемблер Уже спрашивали там. Ответ получился сумбурный и ни разу не убедительный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Вы не сообщили, зачем именно ассемблер Сообщал недели две назад. Объясняли. Не помогает. Ну хочет человек пробежаться по граблям. Не будем мешать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Не могу понять как создавать и работать с переменными разного размера в ассемблере в Keil Документацию надо читать -- там всё написано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
allsettingsdone 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба DCB, DCW, DCWU, DCD, DCDU.... Похоже что так всё работает, спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 4 февраля, 2014 Опубликовано 4 февраля, 2014 · Жалоба Сообщал недели две назад... с такими скоростями... первый проект выйдет когда чипы на cortex-m3 перестанут выпускаться :bb-offtopic: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romas2010 1 12 февраля, 2014 Опубликовано 12 февраля, 2014 · Жалоба Вот допустим я делаю счетчик, пишу test0 DCWU 0xFFFF Затем уменьшаю на 1 ( MOV32 R0, #test0 SUB R0, #1) Её сохранять обратно в память таким образом? - STR R0, [#test0] ? Компилятор выделит память под 4 байта? Компилятор выделит 2 байта...более того,если вы этой командой перезапишете значение переменной test0,то потом 3 дня будете рвать на себе волосы,пытаясь понять,почему вдруг соседние 2 байта тоже вдруг перезаписываются... Давайте исходить из следующих аксиом 1) не надо из ассемблера делать фетиш и тотем...программа на ассемблере размером более 100 строк непонятна уже даже ее автору 2) без ассемблера никуда-потому что самый лучший оптимизатор-это твоя собственная голова.Ни одному компилятору не понять прелестей некоторых команд и режимов адресации. Отсюда выявляется золотая середина- оформленные в оболочку С-функций короткие подпрограммы,выполняющиеся быстрее эквивалентного С-кода хотя бы в 3 раза. Учим матчасть Keil->help->mVision help-> embeded assembler,instruction set,assembler user guide,compiler guide и пр. Пишем короткие программы,циклы,условия,компилируем,входим в симулятор,и наблюдаем в окне Disassemble,что,собственно говоря,получилось, разбираемся,как компилятор получает доступ к переменным,к полям структур,работу с указателями,как передать в функцию параметры и пр.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 12 февраля, 2014 Опубликовано 12 февраля, 2014 · Жалоба 2) без ассемблера никуда-потому что самый лучший оптимизатор-это твоя собственная голова.Ни одному компилятору не понять прелестей некоторых команд и режимов адресации. С оговорками. Голова может оптимизировать ограниченный объём кода. В "среднем по больнице" современные компиляторы выигрывают всегда. Ну и самое главное: оптимизация реально требуется крайне редко. Обычно это прихоть новичков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 14 февраля, 2014 Опубликовано 14 февраля, 2014 · Жалоба С оговорками. Голова может оптимизировать ограниченный объём кода. В "среднем по больнице" современные компиляторы выигрывают всегда. Ну и самое главное: оптимизация реально требуется крайне редко. Обычно это прихоть новичков. Имеется в виду оптимизация, которую делает компилер, или кодер, используя асм-вставки в си коде? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 14 февраля, 2014 Опубликовано 14 февраля, 2014 · Жалоба Имеется в виду оптимизация, которую делает компилер, или кодер, используя асм-вставки в си коде? И то, и другое. Хотя сейчас работаю над программой, которая при нулевом уровне оптимизации уже не лезет в флеш. Для внутрисхемной отладки компилирую с оптимизацией по размеру, а потом отлаживаемый файл перекомпилирую с нулевой оптимизацией, чтобы влезло :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться