Полная версия этой страницы:
Infineon и Keil
Всем привет. Никогда раньше не работала с ассемблером. Чайник еще тот)) А тут надо писать в Keil uVision3 на ассемблере. Микроконтроллер - XC167Cl 16 разрядный. Нигде нет даже примера на ассемблере,везде все по С. Помогите пожалуйста, люди добрые, кто чем может. Не имею никакого понятия что это и с чем едят. Пока пишу всякую ерунду. Может посоветуете какую-нибудь литературу. Желательно на русском, но на худой конец можно и на английском. Или пришлет кто-нибудь на почту шаблон программы. Я даже вступления не знаю. Вобщем я ничего не знаю,помогите! :-D
Цитата(Lalka @ Aug 16 2009, 21:48)

...помогите!...
Куда помогать? (в смысле e-mail)...
Да, и еще - не про ARM это. Надо бы во "Все остальные ...".
Цитата(Lalka @ Aug 16 2009, 21:48)

Всем привет. Никогда раньше не работала с ассемблером. Чайник еще тот)) А тут надо писать в Keil uVision3 на ассемблере. Микроконтроллер - XC167Cl 16 разрядный. Нигде нет даже примера на ассемблере,везде все по С. Помогите пожалуйста, люди добрые, кто чем может. Не имею никакого понятия что это и с чем едят. Пока пишу всякую ерунду. Может посоветуете какую-нибудь литературу. Желательно на русском, но на худой конец можно и на английском. Или пришлет кто-нибудь на почту шаблон программы. Я даже вступления не знаю. Вобщем я ничего не знаю,помогите! :-D
А зачем с ассемблером? Чужой код разгребать?
Вообще-то обычная практика - писать всё на Си и переделывать на ассемблере только те куски, которые на Си не получаются (обычно если не хватает скорости).
Кстати, для программирования на ассемблере Keil рекомендует скомпилировать исходник на Си с каркасами функций и переменными, получив на выходе компилятора файл на языке ассемблера. Потом править этот файл.
Ну а что касается литературы, то первоисточники - это C166S V2 Core User's Manual от Infineon и
руководства от Keil.
Потому что надо на ассемблере.
Еще, что такое [Rw]? Не могу понять как работает. Все время в памяти С0FA и новое число записать невозможно.И как записывать в память адресов большие числа? Больше FFFF не помещается,причем записывать в адрес можно только из регистра.Так задумано?
Как задать переменной конкретный адрес?
Shandy
Aug 18 2009, 06:22
Rw = это значит, что регистр 16-битный (word)
Чтобы разобраться с обозначениями, прочитайте описание системы команд (см. прикрепленный файл)
Возьмите за основу файл template.a66 из папки Keil\c166\asm. Он специально написан, чтобы использовать его как образец.
Цитата(Lalka @ Aug 18 2009, 08:46)

...как записывать в память адресов большие числа?
Почитайте про режимы адресации...
Цитата(Lalka @ Aug 18 2009, 08:46)

...Как задать переменной конкретный адрес?
В сегменте данных директива "ORG".
А как работать с массивами?
Я задаю массив:
?NC?HELLO SECTION DATA WORD 'NCONST'
MASS DW 11,22,33,44,...
?NC?HELLO ENDS
потом хочу брать эти числа по одному и записывать в регистр
MOV R1,MASS
MOV R2,MASS+2
MOV R3,MASS+4
...
Что можно взять вместо +2,+4... и инкрементировать?
...сдалась и перешла на Си...
Правильно ли я поняла, что для работы с файлами нужен файл AR166.h? Что-то его у меня нету. Может у кого-нибудь есть?
Люди! Кричу о помощи! Мне действительно нужно работать с массивами в ассемблере и с файлами на Си в uVision-е! С меня требуют, а я понятия не имею почему компилятор не распознает FILE. Да еще это оценочная версия, всего 8К, 98% процентов я уже заполнила. Не подскажете, где и как можно приобрести полную версию, где заодно будет и библиотека AR166.h ? Ооошинама надеюсь на помош!!!
Я обычно пишу на Си потом рассматриваю листинг ассемлера и если есть необходимость оптимирую в ассемблере.
Для XC16x нужно с сегментами быть внимательным и, как и для любого другого проца, знать адресацию и регистры
(или хотя бы знать где читать

.
Определите пожалуйста, что есть "файл" в Вашем случае (например в смысле определения из Википедии). Может тогда ситуация станет понятнее... А файл "AR166.H" - это из кейловой операционки ARTX-166.
файл - всмысле обычный файл
#include<stdio.h>
FILE *fopen(),*f;
void main(void)
{
f=fopen("c:\my_file.txt","w");
printf("Enter the word: ");scanf("%s",&word);
fclose(f);
printf("File created!");
}
...
f=fopen("c:\my_file.txt","a");
...
f=fopen("c:\my_file.txt","r");
...
prgjz,я не очень понимаю для чего эти сегменты,что это такое вообще. Знаю только, что NCONST - это ROM, а NDATA - это RAM. Не могли бы вы немного пояснить или посоветовать литературу?
И неужели никто никогда не работал с массивами в ассемблере?
могу посоветовать прикреплённый файл где очень хорошо описана структкра XC167. Если ваш массив должен находится во встроенной памяти то это будет намного просче. Через сегменты адрессуются встроенная флеш и/или память подключенная к наружней шине EBC.
Во встроенной памяти всё просто:
MOV R5, Value
MOV R6, Index
MOV R4,R6 ;
SHL R4,#01H ; если ваш массив 16бит #01h, для 32бит #02h, для 8бит эту и предидущюю строчку не надо
MOV [R4+MyArray],R5 ; собственно запись в массив
Для подключенной памяти тоже самое (почти

MOV R5, Value
MOV R6, Index
MOV R4,R6 ;
SHL R4,#01H ; если ваш массив 16бит #01h, для 32бит #02h, для 8бит эту и предидущюю строчку не надо
EXTS #SEG (MyArray),#01H ; указваем сегмент запрещаем до заключения следуещей
; 1ной операции прерывания иначе сегмент может измениться
MOV [R4+#SOF(MyArray)],R5 ;запись в массив с учётом сегмента
Желаю удачи!
Извеняюсь, что то не получается с загрузкой...
По этому линку вы найдёте C166S V2 Core User's Manual (c166sv2um.pdf):
http://www.infineon.com/cms/en/product/cha...112ab6b3ae30781
Спасибо огромное! Не могу поверить, что кто-то ответил

Только сейчас увидела. Надеюсь, теперь разобраться будет легче.
АААхахахааа! Я наконец разобралась с массивами! Спустя столько месяцев! Хочу похвастаться!

Там все оказалось намного проще! В сегменте данных пишем название массива DW и вводим массив чисел. Массив автоматически записывается по адресу 0хС000. Можно между массивами (чтобы их разделить) написать ORG 100(500... что хотим) и они будут записываться с адреса 0хС100(0хС500... и т.д.). Моему счастью нет границ! Повысили
У меня с микроконтроллерами 80C166 связаны интересные воспоминания. Моя первая задача на профессиональном поприще была переписать на Си программу для платы на основе 80C166. Существующая программа была слеплена на ассемблере и была непригодна для существенных изменений. В распоряжении был софт Keil для C166. Кстати, плата не позволяла вести внутрисхемную отладку. Также она не позволяла делать побайтовую запись в ОЗУ, что практически исключало использование стандартной библиотеки. Спросить что-либо было не у кого. Хорошо, что хоть схема была.
Помню, что прочитал руководство по 80C166 от корки до корки, включая Instruction Set Reference. Поскольку это был мой первый микроконтроллер, было очень интересно. Также прочитал руководство по Keil. Вопросов практически не возникало - документация написана великолепно. Ну а всякие полезные советы можно найти на сайте Keil в разделе Knowledgebase.
Так что мой Вам совет: читайте руководства.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.