реклама на сайте
подробности

 
 
> поясните принцип действия, матчасть :)
Kail
сообщение Feb 3 2007, 21:18
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 3-08-06
Пользователь №: 19 285



Изучая доку на RealView ASM V. 3.0, решил углубить свои знания в асме и пописать на нем. И как обычно стали вылезать впросы, которые не приходят в голову, когда пишешь на С и все опции проекта, почти без изменений из Keil'a.
Вот код:
Код
    
    AREA Strcopy, CODE, READONLY
            ENTRY
start
            ldr        r1, =srcstr    ; Pointer o first string
            ldr        r0, =dststr    ; Pointer to second string
            ldr        r3, =45        ; load 45
            ldr        r4, =0x40000004; load addres of RAM
            str     r3, [r4]    ; store 45 in RAM
            bl         strcopy        ; Call subroutie to do copy
stop
            b        stop        ;    make loop
strcopy
            ldrb    r2, [r1], #1; load byte and update address
            strb    r2, [r0], #1; Store byte and update address
            cmp        r2, #0        ; check for zero terminator
            bne        strcopy        ; keep going if not
            mov        pc, lr        ; return

            AREA Strings, DATA, READWRITE
srcstr        DCB "First string - source",0
dststr        DCB "Seconf string - destination",0
            END


Вот листинг линкера
Код
  
    Strcopy                                  0x00000000   Section       56  source1.o(Strcopy)
    source1.s                                0x00000000   Number         0  source1.o ABSOLUTE
    Strings                                  0x40000000   Section       50  source1.o(Strings)
    srcstr                                   0x40000000   Data          22  source1.o(Strings)
    dststr                                   0x40000016   Data          28  source1.o(Strings)
................................................................................
.........................................
    Total RO  Size (Code + RO Data)                   56 (   0.05kB)
    Total RW  Size (RW Data + ZI Data)                52 (   0.05kB)
    Total ROM Size (Code + RO Data + RW Data)        108 (   0.11kB)


Вот вопрос: в процессе отадки в симуляторе кейла, гляжу на адреса ОЗУ, т.е. 0x40000000. А там ничего нету. И кстати часть кода, которая должна копировать строку не работает. Точнее срабатывает один раз, находит нуль и все! Специально написал ряд инструкций, чтобы записать число 45 в ОЗУ. Все работает, в окне просмотра памяти вижу записанное мной число! Как я понимаю Total ROM Size (Code + RO Data + RW Data) - размер образа программы, который будет размещен во флэш. А Total RO Size - та область памяти, которую непосредственно будет считывать процессор и последовательно выполнять комманды (не учитывая прыжков и проч.). Но вот никак не могу понять как Total RW Size перебертся из Total ROM Size в ОЗУ, где ей и место. И почему вобще код копировани строки не работает???

Не хватает мне знания курса "Архиктура ЭВМ", который читают на специальностях, связанных с программированием. Всегда осовные вопросы возникают на грани взаимодействия памяти и процессора. Почему alligment, почему разные инструкции могут работать только с разными данными и проч. Приходится информацию доставать по крупицам, причем под x86. А потом додудывать под arm.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kail
сообщение Feb 4 2007, 15:55
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 3-08-06
Пользователь №: 19 285



А кто по вашему выполняет стартовый код? Тот же процессор, и в функцию main входить вполне не обязательно. может я вообще харкорный прогер и пишу все на чистом асме. Код этот почти целиком из мануала на armar. Код линкуется под LPC2106, озу по адресу 0x40000000. И есть кусок кода, который я специально втсавил сам, чтобы проверить работу с памятью. Число 45 записывается по адресу 0x40000004. После выполнения этого участка, вижу в памяти записанное число. Причем, если адрес в сырце ввести другой, например 0x300000000, Симулятор вполне обоснованно ругается на ошибкудоступа памяти, ибо ОЗУ там нету.
Такое у меня ощющение, что код представленный в мануале, просто не рабочий. Ведь DCD только лишь резервирует место в ОЗУ, но ничего туда не записывает. Необходимо еще вставить код, который перепишет из ROM строки в RAM, а потом уже запускать копирование строк. Вообще-то стыд и позор для arm писать мануалы с неработающим кодом, может я все-таки не прав и чего-то недопонмаю?
Go to the top of the page
 
+Quote Post
Petka
сообщение Feb 5 2007, 11:36
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Kail @ Feb 4 2007, 15:55) *
Такое у меня ощющение, что код представленный в мануале, просто не рабочий. Ведь DCD только лишь резервирует место в ОЗУ, но ничего туда не записывает. Необходимо еще вставить код, который перепишет из ROM строки в RAM, а потом уже запускать копирование строк. Вообще-то стыд и позор для arm писать мануалы с неработающим кодом, может я все-таки не прав и чего-то недопонмаю?

для компилятора СИ есть несколько сегментов памяти. один из них должен быть обнулён перед запуском основной программы, другой должен быть заполнен уже заранее заданным содержимым (скопирован из ПЗУ в ОЗУ). Вот как раз эти инициализирующие действия и выполняет sturtup. Поэтому DCD как раз инициализирует ячейку, только в ПЗУ, которую потом надо будет скопировать ОЗУ.
Go to the top of the page
 
+Quote Post
Kail
сообщение Feb 5 2007, 14:06
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 3-08-06
Пользователь №: 19 285



Цитата(Petka @ Feb 5 2007, 11:36) *
для компилятора СИ есть несколько сегментов памяти. один из них должен быть обнулён перед запуском основной программы, другой должен быть заполнен уже заранее заданным содержимым (скопирован из ПЗУ в ОЗУ). Вот как раз эти инициализирующие действия и выполняет sturtup. Поэтому DCD как раз инициализирует ячейку, только в ПЗУ, которую потом надо будет скопировать ОЗУ.


Но я ведь не использую компилятор СИ. Все на ассемблере написано. А вообще, я разобрался, спасибо.
Asm - рулит полюбас!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 17:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016