Так напишите на Си ,компильните asm - вот Вам и диплом.MS24 писал(а):Да с СИ я достаточно хорошо знаком. Просто условие диплома написать на асемблере.
Ассемблер (ASM) для AVR в вопросах и ответах
- Реклама
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
Это как? ))ILYAUL писал(а):Так напишите на Си ,компильните asm - вот Вам и диплом.
А как он потом будет объяснять плоский код без комментариев и структуры? Нет, пожалуй такую программу сдавать будет слишком палевно.
Как предыдущий дипломник , код которого ему и подпихнули. Повидимому он его тоже писал за днь до диплома . Либо сесть и изучить asmAlexeyslav писал(а):А как он потом будет объяснять плоский код без комментариев и структуры? Нет, пожалуй такую программу сдавать будет слишком палевно.
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
Ребят, ASM не вызывает во мне ужаса, я уж за свою жизнь привык изучать вещи которые мне нужны на один раз )) Мне просто не понятно. я написал программу, сам составил схему, сам спаял работающую плату, на это мне сказали лишь, что это слишко м просто, ты должен изучить работу всего микроконтроллера, понять все как работает и програ должна быть на асемблерре. На си никак не подходит. Вот начрук и заставляет меня именно с этой прошивкой мучатся (
- Реклама
- Сообщения: 12
- Зарегистрирован: Пн дек 14, 2009 07:06:51
Помогите разобраться
VendorStringDescriptor:
.db (VendorStringDescriptorEnd-VendorStringDescriptor)*4-2,3
VendorStringDescriptorEnd:
Как понимать выражение в скобках?
VendorStringDescriptor:
.db (VendorStringDescriptorEnd-VendorStringDescriptor)*4-2,3
VendorStringDescriptorEnd:
Как понимать выражение в скобках?
Как число вычисляемое из констант.
- Сообщения: 12
- Зарегистрирован: Пн дек 14, 2009 07:06:51
VendorStringDescriptorEnd- нет такой константы, это метка
А какая разница? Метка - такая же константа (число)
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
Ребят. может кто нибудь объяснить?
ldi ZH,high(data*2)
ldi ZL,low(data*2)
ldi XH,high(0x0100)
ldi YH,high(0x0100)
ldi XL,low(0x0100)
ldi temp,0x0c
load:
lpm
st X+,R0
adiw ZL,0x01
dec temp
brne load
ldi XH,high(0x0100)
ldi XL,low(0x0100)
data:
.db 0x15,0x24,0x36,0x42,0x53,0x01,0x71,0x83,0x92,0xA6,0xB4,0x65
ldi ZH,high(data*2)
ldi ZL,low(data*2)
ldi XH,high(0x0100)
ldi YH,high(0x0100)
ldi XL,low(0x0100)
ldi temp,0x0c
load:
lpm
st X+,R0
adiw ZL,0x01
dec temp
brne load
ldi XH,high(0x0100)
ldi XL,low(0x0100)
data:
.db 0x15,0x24,0x36,0x42,0x53,0x01,0x71,0x83,0x92,0xA6,0xB4,0x65
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
а поподробнее можно, как это работает? ))ILYAUL писал(а):Из Flash загружается SRAM
Код: Выделить всё
ldi ZH,high(data*2) ;загрузка адреса флеша в Z регистр
ldi ZL,low(data*2)
ldi XH,high(0x0100) ;загрузка адреса ОЗУ в X регистр
ldi YH,high(0x0100) ;и зачем-то в Y...
ldi XL,low(0x0100)
ldi temp,0x0c ;видимо количество байт (счетчик)
load: ;цикл копирования данных из флеша в ОЗУ
lpm ;загрузка из флеша (адрес в Z) в R0
st X+,R0 ;сохранение в ОЗУ (адрес в Х, пост инкремент)
adiw ZL,0x01 ;инкремент адреса в Z
dec temp ;уменьшаем счетчик байт
brne load ;цикл пока счетчик не обнулился
ldi XH,high(0x0100) ;восстанавливаем X
ldi XL,low(0x0100)
data:
.db 0x15,0x24,0x36,0x42,0x53,0x01,0x71,0x83,0x92,0xA6,0xB4,0x65 ;а это константа во флеше, которую и копируют в ОЗУ
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
О спаибо вам великий мудрый кот!!! Никак в асемблере не могу разобраться ) На си все гораздо проще )
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
- Сообщения: 12
- Зарегистрирован: Пн дек 14, 2009 07:06:51
А как узнать числовое значение данных меток?ploop писал(а):А какая разница? Метка - такая же константа (число)
Для чего так сделали ,не проще былобы взять константу?
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Да я бы не сказал, скорее это зависит от того на что вначале присел..... Вот мне так кажется что ассемблер намного легче (килобайты отскакивают тока так) а в Си еще те заморочки бывают.....MS24 писал(а):Никак в асемблере не могу разобраться ) На си все гораздо проще )
Вот то что мне помогло, глянь, вдруг прорыв произойдет.....
http://www.nikolaew.org/avr_old/u3.htm
http://www.nikolaew.org/avr_old/u4.htm
А для каких целей? Можно посмотреть в выходном файле компилятора (обычно .list файл).А как узнать числовое значение данных меток?
Конкретно в этом примере вторая метка нужна для того, чтобы вычислить объём кода между ними:
VendorStringDescriptorEnd-VendorStringDescriptor
Т.е. компилятор молча вычислит это и превратит в число, и вручную вычислять ничего не придётся.
Поясню:
Код: Выделить всё
1. .db (VendorStringDescriptorEnd-VendorStringDescriptor)*4-2,3
2. .db (VendorStringDescriptorEnd-VendorStringDescriptor)*4-2,3,4,5,6,7Получились зачатки простейшей одноклеточной файловой системы.
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
Ребят, я пишу программу для работы шагового двигателя, мне препод дал исходник другого студента, который зачем-то выводит в порт вот такие вот значениея, вы не можете мне объяснить что это вооще такое?
.db 0x15,0x24,0x36,0x42,0x53,0x01,0x71,0x83,0x92,0xA6,0xB4,0x65
.db 0x15,0x24,0x36,0x42,0x53,0x01,0x71,0x83,0x92,0xA6,0xB4,0x65


