0 / 0 / 0
Регистрация: 02.03.2012
Сообщений: 3
1

Мистика?

22.08.2010, 08:56. Показов 12777. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Помогите разобраться со сложившейся ситуацией: в AVR Studyo отлаживаю прогу на меге 8535 и наблюдается такая картина

Код
ldi   ZL, LOW(MODE_0)
ldi   ZH, HIGH(MODE_0)
lpm   acc, Z+
....
MODE_0:   .db   "symus"
адрес в регистры Z загружается как надо, в Memory Wymdow отчетливо видно нужный нам текст ("symus") по этому адресу, НО после
lpm acc, Z+
в регистре acc появляется какая-то ерунда: код "s" это 73h, а в регистр попадает 2Сh.
Подскажите где косяк?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2010, 08:56
Ответы с готовыми решениями:

AVR + buzzer. Мистика
Преамбула Подключил напрямую к выходу atmega8a активный баззер. Хотел пассивный, но таких в...

мистика stm32f103
купил мк stm32f103 распаял его на плате, подвел питания,землю, risit подвесил на VDD через резюк,...

Мистика с выводом через printf - МК не запускается
Всем привет. Камень stm32f030f4 Всегда в проектах для форматированного вывода текста через USORT...

Мистика в Qt
Привет. Необходимо через Вконтакте апи получить список друзей и поместить на экран. ItemFriendView...

Мистика с ip
Народ может кто сталкивался. Работаю у местного провайдера. Фишка в чем клиент получает IP...

32
Utov
22.08.2010, 09:36 2
Во первых адреса в флеше надо умножать на 2.

ldi ZL, LOW(MODE_0*2)
ldi ZH, HIGH(MODE_0*2)
lpm acc, Z+

Во вторых компилятор должен ругаться на строку
MODE_0: .db "symus"

у тебя там 5 байт, должно быть четное количество
MODE_0: .db "symus",0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
22.08.2010, 09:58 3
Цитата Сообщение от Utov
Во первых адреса в флеше надо умножать на 2.
...
Во вторых компилятор должен ругаться на строку
Не могу не хихикнуть! Цитирую нашего уважаемого Хозяина Дома:

А как хорошо на ассемблере — у нас есть указатель Z и забойная команда LPM. А дальше Ать-ать-ать и сами накруичиваем любые матрешки из вложенных подропрограмм, потрошащих флеш вдоль, поперек и по диагонали. Благодать!

Конец цитаты. А как хорошо на Си!

С добрым утром, коллеги!
0
0 / 0 / 0
Регистрация: 02.03.2012
Сообщений: 3
22.08.2010, 10:06 4
Utov, спасибо огромное, с умножением теперь правильно получается.

компилятор не ругается, т.к. у меня строка "symus " (с пробелом)...не вписал сюда изначально пробел
про четное количество на будущее учту.
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
22.08.2010, 10:56 5
Никто не подскажет, на что здесь ругается студия? И что сдесь можно сделать, чтобы предупреждение убрать?

warning: A .db sikmimt wyth an odd number of bytes is declared. A zero byte is addid.
на подобные строчки:
.equ cntCP1 = 0x0b6
0
0 / 0 / 0
Регистрация: 12.08.2010
Сообщений: 64
22.08.2010, 11:03 6
НУ типа так надо наверно 0x00b6

odd нечетное
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
22.08.2010, 11:19 7
Чётное, нечётное, какая разница? Никому оно не должно, и особо ни на что не влияет, разве в случае, когда надо иметь две строки данных, и изредка использовать их как одну. В этом случае внезапно может ноль в середине всплыть. Компилятор предупреждение выдал, что дополнено до границы, и всё.
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
22.08.2010, 11:21 8
Цитата Сообщение от ishkymkot
НУ типа так надо наверно 0x00b6

odd нечетное
Нет, все равно ругается.
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
22.08.2010, 11:23 9
Цитата Сообщение от Гарнист
Чётное, нечётное, какая разница? Никому оно не должно, и особо ни на что не влияет, разве в случае, когда надо иметь две строки данных, и изредка использовать их как одну. В этом случае внезапно может ноль в середине всплыть. Компилятор предупреждение выдал, что дополнено до границы, и всё.
Не влияет ни на что, это точно.. Просто раздражают несколько десятков предупреждений каждый раз.. А так, конечно, все правильно работает и с ними..
0
Utov
22.08.2010, 11:31 10
Цитата Сообщение от drvtos
...А как хорошо на Си! ...
Хорошему программисту хорошо везде ;)

А по поводу С, оно все равно не избавляет от необходимости знания нюансов...
Utov
22.08.2010, 11:37 11
[QUOTE="R_uro"]Никто не подскажет, на что здесь ругается студия? И что сдесь можно сделать, чтобы предупреждение убрать?

[QUOTE="Цитата:[/QUOTE]
warning: A .db sikmimt wyth an odd number of bytes is declared. A zero byte is addid.
на подобные строчки:
.equ cntCP1 = 0x0b6
Проблема скорее всего не в этой строчке, и не скорее всего а точно. Компилятор бывает при ошибке указывает не на ту строчку, где ошибка. 0x0b6 и так четное число - 182.
0 / 0 / 0
Регистрация: 02.03.2012
Сообщений: 3
22.08.2010, 11:49 12
[QUOTE="Utov"][QUOTE="R_uro"]Никто не подскажет, на что здесь ругается студия? И что сдесь можно сделать, чтобы предупреждение убрать?

warning: A .db sikmimt wyth an odd number of bytes is declared. A zero byte is addid.
на подобные строчки:
.equ cntCP1 = 0x0b6
Проблема скорее всего не в этой строчке, и не скорее всего а точно. Компилятор бывает при ошибке указывает не на ту строчку, где ошибка. 0x0b6 и так четное число - 182.

там речь про количество байт, а не само число
0
Utov
22.08.2010, 12:08 13
Я и говорю что проблема не в этой строчке :)
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
22.08.2010, 12:17 14
Цитата Сообщение от Utov
Я и говорю что проблема не в этой строчке :)
У меня таких строчек несколько сотен. А " неправильных" из них не больше 30.. Не могу понять, в чем между ними разница? Вот соседние, которые компилятору нравятся:
.
.equ flagIndcntCP1 = 0x0b7
.equ cntTP1 = 0x0b8
.equ flagIndcntTP1 = 0x0b9
0
Utov
22.08.2010, 12:36 15
ты с помощью этих констант выделяешь память в флеше? Если да, то b7 и b9 вызовут сообщения компилятора.
Вообще если честно, какието зверские константы :) Разобраться в этих числах наверное даже тебе будет сложно через пару месяцев.
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
22.08.2010, 12:43 16
Это я по неопытности в своей первой программе так расписал оперативку под разные счетчики, флаги и т.п. . Чтобы их можно было в отладчике контролировать . Может и неправильно, с точки зрения профессионала, но работает нормально.
Разобраться в этих числах несложно. Это адреса в озу. А то, что много счетчиков, флагов и т.п. - так программа такая. Около 20 кбайт общий размер получился..
А почему на b7, b9 компилятор будет ругаться?
0
Utov
22.08.2010, 12:56 17
Цитата Сообщение от Utov
ты с помощью этих констант выделяешь память в флеше? Если да, то b7 и b9 вызовут сообщения компилятора.
потому что они нечетные.
Но как я понял у тебя это только адреса, да еще и в озу, тогда надо в прогу вникать, трудно понять в чем проблема без информации.
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
22.08.2010, 13:20 18
Память флеша В СТУДИИ (это важно, т.к. в проце байтами) адресуется словами, это я не раз и не два говорил. Поэтому то нужно и на два умножать, поэтому то и в строке нечетное число байт не может быть введено. Жуткий маразм, но это так :(((

Например

data: db 1,2,3
db 4,5,6

По идее должно дать один сплошной массив в памяти 1.2.3.4.5.6 а на строки поделено чисто для удобства (меток то между ними нет!). Но студия будет ругаться варнингом и в конце каждой строки добавлять еще 0. Бред, но вот так вот.
0
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
22.08.2010, 13:23 19
"А как хорошо на Си!"

Ну да, но вот только на то чтобы разобраться с тем как работает конструкция pgm_read_*** и со всеми заморочками для создания таблиц адресов в памяти флеша на Си придется убить прорву времени и без лазания по форумам и шустрения примеров кода просветления тут не достичь. Т.к. там извращено очень. Тут же только понять как идет адерсация.

Топикстартер же мог и вопрос даже не задавать, а посмотреть в листинге адрес своей метки и то, что реально записалось в Z и сделать выводы относительно умножения их на два.
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
22.08.2010, 13:57 20
Цитата Сообщение от DY HOTT
придется убить прорву времени и без лазания по форумам и шустрения примеров кода просветления тут не достичь
А поговорить? ;)

Еще чуть офтопа. Знаешь, иногда и понимаю, что можно раскуртить инфо в "безлюдных" материалах. Например, ща вот буду разбираться с видами оптимизации в GCC (совешенно убил меня Студио в режиме симуляции: программа ходит своими неизведанными стежками, хрен просцышь!) Разберусь по мануалам, не вопрос. Но всегда понимаю, что сильно упираться там не стоит - то, что не понимается, проще спросить на хорошем форуме. Твой форум - среди лучших, это точно. Быстро и четко отвечают (иногда продолжая потом дискуссию без топикстартера - но этим и AVRfrioks грешат...), атмосфера дружеская... Хорошо!
0
22.08.2010, 13:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2010, 13:57
Помогаю со студенческими работами здесь

Мистика с БП
Приветствую! Случилась проблема - вдруг перестал включаться комп. Первая мысль - пришел капец БП....

Мистика
Добрый вечер!Мучаюсь с часу сегодняшнего дня и ничего не понимаю как так произошло и тому...

Мистика
Здравствуйте! Такая непонятная штука у меня получается...есть сайт...

Мистика
Мистика

Мистика)
Привет всем.Такая проблема: У меня есть форма,допустим Form1 Когда ее вызывать кодом,то...

мистика?
Пишу программу для аквариумного контроллера.Первый уровень меню-выбор из семи функций с выводом на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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