Программирование SDK1.1

Учебный лабораторный комплекс SDK-1.1 на базе микроконтроллера ADuC812 с ядром MCS51 # RS-232C, I2C

Программирование SDK1.1

Сообщение frumkin » 29 апр 2008, 15:38

Вопросы. Возможно ли построить технологию отладки программ для SDK 1.1, включающую загрузку программы в стенд и ее реальное выполнение, на базе программного обеспечения фирмы Keil ? В частности, можно ли в качестве загрузчика использовать программу t167b ? Например, можно ли написать bat-файл, который включает запуск Keil (Keil сделает HEX-файл) и программы t167b (загрузит HEX-файл в стенд) ? В случае утвердительного ответа на первые два вопроса возникает следующий: Где найти подробную документацию на программу t167b, такую, чтобы точно понять ее идеологию и синтаксис команд (близкую по подробности документации фирмы Keil)?
frumkin
 
Сообщения: 1
Зарегистрирован: 29 апр 2008, 15:10

Re: Программирование SDK1.1

Сообщение Интегральный вычислитель » 29 апр 2008, 18:01

Вопросы. Возможно ли построить технологию отладки программ для SDK 1.1, включающую загрузку программы в стенд и ее реальное выполнение, на базе программного обеспечения фирмы Keil ?

Сложно сказать, если в имеете ввиду отладчик Keil ISD51, то возможно его код прийдется интегрировать в загрузчик стенда. У меня готовых решений на этот счет нет.
Если вам удасться это сделать (интегрировать ISD51 с загрузчиком по протоколу HEX-202), тогда ответом на ваши вопросы
В частности, можно ли в качестве загрузчика использовать программу t167b ?

Можно ли написать bat-файл, который включает запуск Keil (Keil сделает HEX-файл) и программы t167b (загрузит HEX-файл в стенд) ?

будет да.

Что касается документации...
Где найти подробную документацию на программу t167b, такую, чтобы точно понять ее идеологию и синтаксис команд (близкую по подробности документации фирмы Keil)?

Насколько я знаю, подробной документации по t167b нет, эта утилита изначально разрабатывалась для внутреннего применения и выложена была для обеспечения совместимости со старыми ПК (на базе DOS). Основные команды, используемые для работы со стендом SDK 1.1 описаны в руководстве пользователя http://embedded.ifmo.ru/sdk/sdk11/doc/sdk11_userm_v1_0_11.pdf

Сейчас для загрузки прошивок в SDK 1.1 и SDK 2.2 используется утилита m3p, работающая по другому протоколу. Я бы рекомендовал использовать её, вместо t167b. "Идеология" m3p и используемый в ней протокол описаны в http://embedded.ifmo.ru/sdk/sdk11/soft/gm3p/gm3p_user_manual.pdf

Реализация m3p с исходными кодами под платформу unix/linux доступна в репозитории http://194.85.162.173/repos/gm3p/

Исходные коды загрузчика, поддерживающего оба протокола (pm3p и hex-202) можно взять здесь http://194.85.162.173/repos/ul3/
I Have Seen The Truth And It Doesn't Make Any Sense
Аватара пользователя
Интегральный вычислитель
 
Сообщения: 561
Зарегистрирован: 02 апр 2008, 16:04
Откуда: из Леса

Re: Программирование SDK1.1

Сообщение NEW_M_A_N » 14 апр 2009, 20:36

Не вижу смысла создавать новую тему для моего вопроса. поэтому спрошу здесь...
Речь пойдет о таких регистрах как dpp, KB, SV и прочие регистры. сказано что для доступа к регистрам типа KB, SV и регистрам параллельного порта необходимо в регистр DPP поместить номер страницы памяти. С этим возникла проблема. Я программирую на ассемблере в среде keli mVision. Каким образом мне заставить ассемблер понимать эти символьные имена регистров? С dpp я разобрался... а вот с остальными доехать не могу. Подскажите.
Месиво из электроники, математики, электротехники, ТАУ и программирования это есть круть!!=)
Аватара пользователя
NEW_M_A_N
 
Сообщения: 5
Зарегистрирован: 10 апр 2009, 09:50

Re: Программирование SDK1.1

Сообщение kluchev » 15 апр 2009, 00:54

NEW_M_A_N писал(а):Каким образом мне заставить ассемблер понимать эти символьные имена регистров? С dpp я разобрался... а вот с остальными доехать не могу. Подскажите.


Через макросы, видимо.

dpp - регистр процессора ADuC 812, находится в адресномпространстве самого процессора .
KB и SV - регистры ПЛИС, находятся в XRAM.

В dpp пишете номер страницы, далее обращаетесь по адресам внешней памяти (XRAM) к регистрам ПЛИС.

В стенде SDK-1.1 взаимодействие с периферией осуществляется с помощью микросхемы ПЛИС MAX8064 (MAX8128), которая служит расширителем портов. Благодаря такой реализации стенд имеет 7 дополнительных регистров, отображаемых во внешнее адресное пространство контроллера.

Поскольку регистры-расширители отображены на начало 8-ой страницы внешней памяти стенда (адреса 080000H:080007H), то для доступа к ним необходимо переключиться на 8-ю страницу. Для переключения страниц памяти в ADuC812 предусмотрен регистр DPP, в который помещается номер текущей активной страницы. Далее необходимо определить адрес внутри страницы регистра-расширителя с которым предполагается работа(для этих целей следует воспользоваться указателем unsigned char xdata* pointer).

В синтаксисе C51 (компилятор SDCC) возможна следующая реализация описанного драйвера


Код: Выделить всё
#include "aduc812.h" //стандартный заголовочный файл ADuC812

#define MAXBASE   8 //номер страницы, в которую отображены порты-регистры ПЛИС

//определение соответствия принятых символьных обозначений и адресов
#define KB          0x0
#define DATA_IND    0x1
#define EXT_LO      0x2
#define EXT_HI      0x3
#define ENA         0x4
#define C_IND       0x6
#define SV          0x7

//функция-драйвер для записи информации в требуемый регистр-расширитель
//Вход: pointer - адрес порта-регистра (можно воспользоваться определёнными выше константами)
//Вход: val - записываемое значение
void write_max(unsigned char xdata* pointer, unsigned char val) {
   unsigned char oldDPP=DPP;

   DPP=MAXBASE;
   *pointer=val;
   DPP=oldDPP;
}

//функция-драйвер для чтения информации из требуемого регистра-расширителя
//Вход: pointer - адрес порта-регистра (можно воспользоваться определёнными выше константами)
//Выход: Считанный байт информации
unsigned char read_max(unsigned char xdata* pointer) {
   unsigned char oldDPP=DPP, val=0;

   DPP=MAXBASE;
   val=*pointer;
   DPP=oldDPP;

   return val;
}
В споре рождается коллективное заблуждение, а истиной мы его называем для краткости
Аватара пользователя
kluchev
 
Сообщения: 995
Зарегистрирован: 04 апр 2008, 13:31
Откуда: SPb

Re: Программирование SDK1.1

Сообщение NEW_M_A_N » 15 апр 2009, 04:27

Ну C я слава богу тоже знаю. но мне кажется контроллеры программировать на таких тяжелых языках это изврат.=)) Не в обиду. Ладно. разберусь как нибудь...=) Спасибо и на этом. хоть адреса для макроопределений теперь знаю.=)
Месиво из электроники, математики, электротехники, ТАУ и программирования это есть круть!!=)
Аватара пользователя
NEW_M_A_N
 
Сообщения: 5
Зарегистрирован: 10 апр 2009, 09:50

Re: Программирование SDK1.1

Сообщение kluchev » 15 апр 2009, 09:01

NEW_M_A_N писал(а):Ну C я слава богу тоже знаю. но мне кажется контроллеры программировать на таких тяжелых языках это изврат.=)) Не в обиду. Ладно. разберусь как нибудь...=) Спасибо и на этом. хоть адреса для макроопределений теперь знаю.=)


На что тут обижаться? :D Я работаю в области встроенных систем с конца восьмидесятых годов и у меня есть некоторый опыт.

К сожалению, готового примера на ассемблере под рукой у меня нет. Последний раз на ассемблере для MCS51 я программировал больше 10 лет назад.

Производительность современных микроконтроллеров довольно высока, их стоимость низка, а вот стоимость разработки ПО очень высока. Кроме того, сроки разработок сильно поджимают. Исходя из этого использование ассемблера для программирования - не оправданное ничем расточительство.
В споре рождается коллективное заблуждение, а истиной мы его называем для краткости
Аватара пользователя
kluchev
 
Сообщения: 995
Зарегистрирован: 04 апр 2008, 13:31
Откуда: SPb

Re: Программирование SDK1.1

Сообщение NEW_M_A_N » 15 апр 2009, 16:45

kluchev писал(а):
NEW_M_A_N писал(а):Производительность современных микроконтроллеров довольно высока, их стоимость низка, а вот стоимость разработки ПО очень высока. Кроме того, сроки разработок сильно поджимают. Исходя из этого использование ассемблера для программирования - не оправданное ничем расточительство.


Ну что касается производственных масштабов возможно. Хотя знаете. Когда приходится считать клики с 5 энкодеров одновременно, при чем не через таймер, чтоб постоянно вычислять скорость, определять направление, при этом при необходимости уходить на прерывания и успеть вернуться, пока не пришел следующий клик с энкодера. Да при этом обрабатывать данные с других датчиков и т.д. Тут С не как не катит. код должен быть очень и очень оптимальным. и по занимаемой памяти и по колличеству выполняемых команда и по количеству тактов. Для таких лучше ассемблер.

А если такая разработка как у вас. бутлоадер и мал мал операционная система, то да. для таких проектов ломать голову с ассемблером не стоит... производительность не сильно нужна.

Of top: А ваш коллега что то не торопиться отвечать. По ходу мне придется херить все что в ПЛИС есть, а потом самому все востанавливать с необходимыми мне изменениями.
Месиво из электроники, математики, электротехники, ТАУ и программирования это есть круть!!=)
Аватара пользователя
NEW_M_A_N
 
Сообщения: 5
Зарегистрирован: 10 апр 2009, 09:50

Re: Программирование SDK1.1

Сообщение Соратник слонопотама » 15 апр 2009, 16:53

NEW_M_A_N писал(а):Of top: А ваш коллега что то не торопиться отвечать. По ходу мне придется херить все что в ПЛИС есть, а потом самому все востанавливать с необходимыми мне изменениями.

сначала неплохо бы проверить свою почту
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Re: Программирование SDK1.1

Сообщение NEW_M_A_N » 15 апр 2009, 17:01

Соратник слонопотама писал(а):
NEW_M_A_N писал(а):сначала неплохо бы проверить свою почту


Э... 5 минут назад небыло... А я еще аж с субботы жду...=) Спасибо огромное!
Месиво из электроники, математики, электротехники, ТАУ и программирования это есть круть!!=)
Аватара пользователя
NEW_M_A_N
 
Сообщения: 5
Зарегистрирован: 10 апр 2009, 09:50

Re: Программирование SDK1.1

Сообщение kluchev » 15 апр 2009, 17:12

NEW_M_A_N писал(а):Ну что касается производственных масштабов возможно.


Другие масштабы обсуждать не вижу смысла, так как мы готовим инженеров, а не радиолюбителей. У инженеров масштабы являются производственными по определению.
В споре рождается коллективное заблуждение, а истиной мы его называем для краткости
Аватара пользователя
kluchev
 
Сообщения: 995
Зарегистрирован: 04 апр 2008, 13:31
Откуда: SPb

Re: Программирование SDK1.1

Сообщение Babylon » 11 май 2009, 21:58

Не имея лицензии на программу Keil uVision, какими другими (желательно бесплатными) программами можно производить сборку проекта на языке Ассемблера и С, и последующую компиляцию в hex-файл?
Babylon
 
Сообщения: 5
Зарегистрирован: 11 май 2009, 21:49

Re: Программирование SDK1.1

Сообщение A.Sukhoy » 12 май 2009, 00:14

Можно использовать компилятор SDCC
Аватара пользователя
A.Sukhoy
 
Сообщения: 182
Зарегистрирован: 08 апр 2008, 17:53

Re: Программирование SDK1.1

Сообщение Babylon » 12 май 2009, 11:50

SHR писал(а):Можно использовать компилятор SDCC

Поставил, но что то мало понятного. Множество файлов и как дальше собирать проект и преобразовывать его в hex не понятно. Может кто подскажет? Или может уже есть инструкция?
Babylon
 
Сообщения: 5
Зарегистрирован: 11 май 2009, 21:49

Re: Программирование SDK1.1

Сообщение A.Sukhoy » 12 май 2009, 14:27

Посмотрите страницу с документацией на SDK, на ней есть простейшие примеры и руководства пользователя. SDK-1.1
Можно посмотреть этот документ. В нем затронут вопрос настройки инструментария для работы со стендом (SDCC+cygwin+eclipse)
Аватара пользователя
A.Sukhoy
 
Сообщения: 182
Зарегистрирован: 08 апр 2008, 17:53

Re: Программирование SDK1.1

Сообщение Babylon » 21 май 2009, 00:18

Что то плохо понял как собрать проект.
1. Сначала пишу код и сохраняю его например как file.c
2. Потом как вы выше писали в командной строке пишу
Код: Выделить всё
sdcc file.c -o file.hex --code-loc 0x2100 --xram-loc 0x6000 --stack-loc 0x80

Но это без использования make, следовательно вопрос, а в каком случае тогда нужно использовать make и надо ли вообще???
3. Преобразовываю HEX в BIN
в прогамме m3p пишу
Код: Выделить всё
hb166 file.hex file.bin

4. Загрузка в стенд
в прогамме m3p пишу
Код: Выделить всё
lfile load.m3p


Вроде бы ни чего сложного, если я правильно выше написал последовательность действий!? Но у вас на сайте выложены примеры исходников. И вот тут становится мало что понятного, когда в одном архиве много файлов и что куда не понять человеку которые только начинает осваивать это дело.
Напишите пожалуйста пошаговые действия, на конкретном примере скаченного с вашего сайта (см.вложение!). Что и как собирать и загружать??

С помьщью SDCC можно компилировать ассемблеровский код??
Для чего нужен Cygwin???
Вложения
звуковым излучателем.rar
(4.36 Кб) Скачиваний: 290
Babylon
 
Сообщения: 5
Зарегистрирован: 11 май 2009, 21:49

Re: Программирование SDK1.1

Сообщение A.Sukhoy » 21 май 2009, 01:23

make — утилита, автоматизирующая процесс преобразования файлов из одной формы в другую. Чаще всего это компиляция исходного кода в объектные файлы и последующая компоновка в исполняемые файлы или библиотеки.
Утилита использует специальные make-файлы, в которых указаны зависимости файлов друг от друга и правила для их удовлетворения. На основе информации о времени последнего изменения каждого файла make определяет и запускает необходимые программы.


В общем и целом если у вас есть трудности в понимании работы make, то можно обойтись без него. Можно заменить его .bat файлом для сборки проекта. Если make не нужен, то и Cygwin тогда тоже, так как основной смысл его использования это получить утилиту make.

В выложенном архиве, присутствуют только заголовочные файлы и функции работы со звуком и ПЛИС. Нет main файла где бы все это использовалось.
Самый простейший пример выглядит вот так. Это вывод в последовательный порт "Hello world!". Нужны только файлы из директорий src и include и файл load.m3p для загрузки в стенд. Остальные используются для сборки проекта.

По поводу load.m3p. Так как пример проекта делался для linux, то в файле load.m3p нужно исправить строчку
Код: Выделить всё
    9600 openchannel /dev/ttyS0


на

Код: Выделить всё
    9600 openchannel com<номер com порта к которому подключен SDK>
Аватара пользователя
A.Sukhoy
 
Сообщения: 182
Зарегистрирован: 08 апр 2008, 17:53

Re: Программирование SDK1.1

Сообщение Babylon » 23 май 2009, 12:51

Код: Выделить всё
В общем и целом если у вас есть трудности в понимании работы make, то можно обойтись без него. Можно заменить его .bat файлом для сборки проекта.

А какие команды .bat файл должен додержать?

С помьщью SDCC можно компилировать ассемблеровский код??
Babylon
 
Сообщения: 5
Зарегистрирован: 11 май 2009, 21:49

Re: Программирование SDK1.1

Сообщение A.Sukhoy » 23 май 2009, 15:39

А какие команды .bat файл должен додержать?


В .bat файл пишет строчку для компиляции проекта, ну и можно преобразование в bin файл. Можно и без .bat файла обойтись, он нужен просто для того чтобы команды не писать каждый раз.

С помьщью SDCC можно компилировать ассемблеровский код??


Код на ассемблере можно компилировать утилитой asx8051 как я понял
Аватара пользователя
A.Sukhoy
 
Сообщения: 182
Зарегистрирован: 08 апр 2008, 17:53

Re: Программирование SDK1.1

Сообщение Babylon » 31 май 2009, 11:35

Выложите пожалуйста кому не жалко для образца программы для СДК 1.1!!! Которая что нито выводит на ЖКИ или например светодиоды мигают!?
Не могу сам разобраться как это запрограммировать(((
Babylon
 
Сообщения: 5
Зарегистрирован: 11 май 2009, 21:49

Re: Программирование SDK1.1

Сообщение kluchev » 01 июн 2009, 19:30

Babylon писал(а):Выложите пожалуйста кому не жалко для образца программы для СДК 1.1!!! Которая что нито выводит на ЖКИ или например светодиоды мигают!?
Не могу сам разобраться как это запрограммировать(((


FAQ: viewtopic.php?f=2&t=2
В споре рождается коллективное заблуждение, а истиной мы его называем для краткости
Аватара пользователя
kluchev
 
Сообщения: 995
Зарегистрирован: 04 апр 2008, 13:31
Откуда: SPb

След.

Вернуться в SDK 1.1

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1