twobytes_isONEinstruction: .db 0x01, 0x02 ; twobytes_isONEinstruction = PC
Метка - не более и не менее, чем константа, численно равная адресу инструкции в памяти, а не "условному номеру полуинструкции".
В середину массива(строки из констант) нельзя обратится таким способом, ибо туда нельзя поставить метку. Можно попытаться вычислить смещение от ближайшей метки, но это в ряде случаев будет неудобно.
если вопрос стоит "можно ставить метку или нельзя" - согласен, нельзя, но не потому, что в середину массива, а потому что "предыдущая строка не завершена" (запятая стоит), т.е. ошибка синтаксиса
но вроде бы речь шла об адресации и доступе побайтно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
.cseg ; надеюсь все понимают, что речь идёт именно о flash-е у avr-ок :-)
numbers0: .DB 0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110 /*0*/
numbers1: .DB 0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000 /*1*/
numbers2: .DB 0b01000010, 0b01100001, 0b01010001, 0b01001001, 0b01000110 /*2*/
numbers3: .DB 0b00100001, 0b01000001, 0b01000101, 0b01001011, 0b00110001 /*3*/
Вроде как всё красиво. Метки подряд, директивы .db подряд. Однако, в строке определяются 5 байт, нечётное количество. И как уже было сказано, метка во флэше указывает на адрес машинного слова, которое, в рассматриваемом случае, равняется 2-ум байтам. Соответственно, метки будут выровнены на слово. Т.е. между метками будет не 5, а 6 байт. И чтобы последовательно перебирать байты последовательно идущими метками по 5 байт надо пропускать 6-й.
Т.е. нельзя поставить метку непосредственно на нечётный байт во флэще.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
думаю, и никому не надо
программист, считающий, что экономия нескольких байтов за счет выравнивания спасет его программу, вполне способен вместо указания метки в виде символьного идентификатора использовать макрос с соответствующими вычислениями
ну а если кто-то не понимает, о чем я только что сказал - то ему о выравнивании и задумываться не придется
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Gudd-Head, это уже не метка. А речь шла именно и них. Это вычисление адреса, которое решает проблему меток на нечётные адреса.
ARV писал(а):использовать макрос с соответствующими вычислениями
Ну, да. Вариантов уж точно не один.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Если необходимо обращаться к байтам по метке, то выравнивание не страшно, переносить объявление на несколько строк не нужно. Если же необходимо вычислять адрес, как, например, адрес начала битовой маски символа, то тут и метки в середину сувать бессмысленно.
Лично я вообще такие объявления, размером по полкилобайта и более генерю с помощью самописной пограммы в виде набора .dw директив произвольной (задаваемой мною) длины и форматирования (запятые, пробелы, табуляция). Код выглядит красиво, нет проблем с выравниванием, автоматизация и лёгкость заменяемости на лицо.
Узял новый комп с win8 (64), поставил тудыть AVRST4, все робе все нормально, но есть один затык...
У меня есть папка с проектами, в этой папке достаточно ветвисто расположены разные проекты, так вот я раньше (win7 32 стояла) тыкал в нужной папке на файл проекта, запускался AVRST4 открывал автоматом этот проект и я начинал работать...
Теперь же я тыкаю файл проекта, стартует AVRST4, но проект не цепляет... как будто я просто запустил чистый AVRST4... Единственное что открывается проводник предлагающий либо создать новый проект, либо открыть один из тех что открывались раньше...
Меня это как то напрягает... приходится в открывшемся проводнике опять рыться в путях к нужному проекту и уже тут его открывать...
Кто что может сказать по лечению этого недуга? Мож какие настроечки надо покрутить?
Проверил Studio 4.19 win8.1 (64) при "тыканье" на файл проекта (расширение .aps), проект открывается как и положено. Проверял и в проводнике и тотал командере. Не помню может менял права папки, вход выполнен администратором.
WinAvr кочевряжится - не работает, читал есть пути решения проблемы. Заморачиваться не стал - поставил атмеловский тулчеин, работает.
STK500 программатор работает.
папка где у меня находятся все проекты - глянул права такие же как и у всех остальных
посмотрел вывод консоли кракозябр нет, но и размер не показывает:
когда на вин7 был WinAVR секция была, значит размер и не должно с тулчейном показывать.
Меня пока не парит - новые проекты для авров вряд ли уже буду создавать, установил чтоб была возможность старые проекты поддержать.