-
Junior user
Проект "lcs_ide"
ну, хорошо. Начнем.
Имеем практически не изученный компилятор SDCC, который "теоретически" нам подходит.
Он бесплатен, лицензия позволяет создавать закрытый код.
Нужно сделать оболочку в которой было бы удобно создавать проекты для микроконтроллеров фирмы Analog Devices (серии 800) имеющих ядро Intel 8052.
В принципе, в последствии, список должен быть расширен для МК SiLabs и Atmel, также имеющих ядро процессора 8052.
Результатом работы среды программирования LCS 8051 IDE + SDCC должен быть файл в формате HEX, который будет загружаться в МК загрузчиком - по нажатию кнопки Download на панели инструментов.
Симуляторы, Эмуляторы, Дебаггеры и прочие "штучки" пока не планируем. Это в перспективе.
Верхний ряд меню закладок должен иметь вид:
1. File
2. Edit
3. Search
4. Project
5. Tool
6. Debug
7. Options
8. Window
9. Help
Последний раз редактировалось Friendly; 30.03.2013 в 18:15.
-
Я думаю имеет смысл перенести тему в раздел "Проекты участников форума".
-
По проекту: вкладки не проблема, они нарастут сами по ходу разрбаботки, самое сложное это подключение компилятора и реализация модульной системы, а так же реализация линковки, аутентификации и сборки программ. Нужна спецификация на компилятор.
-
Junior user
Когда этот проект будет закончен, тогда можно будет туда переложить.
Сейчас он находится в разделе "Встраиваемые технологии" + "8052", что наиболее точно определяет сферу применения.
Пмсм, сейчас это наиболее правильно.
Хотя мне всеравно - можно и туда его положить сразу. Мне, так то, без разницы где он будет лежать.
-
Junior user
Вот так выглядел файл конфигурации программы C Free 5, когда я подключил к нему досовский компилятор ICC8051.
Можно по аналогии сделать.
<Builder name="C51" type="8052" version="1.0">
<IncPaths>
<Path>C:\C8051\include\</Path>
<Pattern>*\include\</Pattern>
</IncPaths>
<LibPaths>
<Path>C:\C8051\lib</Path>
<Pattern>*\lib</Pattern>
</LibPaths>
<ExePaths>
<Path>C:\C8051</Path>
<Pattern>*\</Pattern>
</ExePaths>
<AutoDetect>
<Path>C:\C8051\</Path>
<Reg>\SOFTWARE\CodeBlocks|Path</Reg>
<Reg>\SOFTWARE\Microsoft\Windows\CurrentVersion\Un install\MinGW_is1|Inno Setup: App Path</Reg>
<Reg>\SOFTWARE\Microsoft\Windows\CurrentVersion\Un install\MinGW|InstallLocation</Reg>
</AutoDetect>
<CompilerOptions>
<Category name="Memory model">
<Option value="-mt" desc="Select memory model: tiny [-mt]"/>
<Option value="-ms" desc="Select memory model: small [-ms]"/>
<Option value="-mc" desc="Select memory model: compact [-mc]"/>
<Option value="-mm" desc="Select memory model: medium [-mm]"/>
<Option value="-ml" desc="Select memory model: large [-ml]"/>
<Option value="-mb" desc="Select memory model: banked [-mb]"/>
</Category>
<Category name="Debugging">
<Option value="-b" desc="Make object a library module [-b]"/>
<Option value="-P" desc="Generate PROMable code [-P]"/>
<Option value="-u" desc="Function return stack expansion [-u]"/>
<Option value="-g0" desc="Disable object code type-info [-g0]"/>
<Option value="-gA" desc="Depreaciate K&K-style function [-gA]"/>
</Category>
<Category name="Warnings">
<Option value="-e" desc="Disable warnings’ [-e]"/>
</Category>
<Category name="Optimization">
<Option value="-z" desc="optimize for size (default) [-z]"/>
<Option value="-s" desc="optimize for speed [-s]"/>
</Category>
<RawOptionsDebug enabled="1">
<Default></Default>
<User>-ml -P -i -g -x</User>
</RawOptionsDebug>
<RawOptionsRelease enabled="0">
<Default></Default>
<User>-ml -P -i -g -x</User>
</RawOptionsRelease>
</CompilerOptions>
<LinkerOptions>
<LibsDebug enabled="1">
<Default></Default>
<User><Lib>C:\C8051\lib\CL8051L.R03</Lib></User>
</LibsDebug>
<LibsRelease enabled="0">
<Default></Default>
<User><Lib></Lib></User>
</LibsRelease>
<RawOptionsDebug enabled="1">
<Default></Default>
<User>-z -x -B</User>
</RawOptionsDebug>
<RawOptionsRelease enabled="0">
<Default></Default>
<User>-z -x -B</User>
</RawOptionsRelease>
</LinkerOptions>
<Configs>
<BuildLog enabled="1">$(PrjDir)\Build.log</BuildLog>
<LibExt>r03</LibExt>
<ObjExt>r03</ObjExt>
<ResExt>hex</ResExt>
</Configs>
<Commands msghandler="Dm.mhr">
<Command name="ICC8051" io="1" rdos="0" sys="0">
<Program enabled="1">ICC8051.exe</Program>
<Parameter enabled="1"> $(CompilerOptions) $(FileName) -I$(IncPaths) -a $(ExePaths)work\dolly5.S03 -l $(Paths)dolly5.lst</Parameter>
<FileExt enabled="1">c</FileExt>
<Target>$(ExePaths)work\dolly5.s03</Target>
<TargetType>s03</TargetType>
<CurrentDir>$(FilePath)</CurrentDir>
<EnvVar></EnvVar>
<MsgID>Compiling....$(FILENAME)...#81001</MsgID>
</Command>
<Command name="A8051" io="1" rdos="0" sys="0">
<Program enabled="1">asm.bat</Program>
<Parameter enabled="0"> </Parameter>
<FileExt enabled="1">s03</FileExt>
<Target>$(ExePaths)work\dolly6.r03</Target>
<TargetType>r03</TargetType>
<CurrentDir>$(FilePath)</CurrentDir>
<EnvVar></EnvVar>
<MsgID>Asm..........#81003</MsgID>
</Command>
<Command name="Linker" io="1" rdos="0" sys="0">
<Program enabled="1">XLINK.exe</Program>
<Parameter enabled="1"> $(ExePaths)work\dolly6.r03 -f $(ExePaths)xcl\LNK8051.xcl $(LinkerOptions) -l $(ExePaths)work\dolly7.lst -o $(ExePaths)work\$(Name).hex</Parameter>
<FileExt enabled="1">r03</FileExt>
<Target>$(ExePaths)work\$(Name).hex</Target>
<TargetType>hex</TargetType>
<CurrentDir>$(FilePath)</CurrentDir>
<EnvVar></EnvVar>
<MsgID>Linking........#81004</MsgID>
</Command>
</Commands>
<Actions>
<Action name="Compile" depend="1">
<File><Command>"ICC8051"</Command></File>
<Project>
</Project>
<MsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)\nGenerated $(Target)#81005</MsgID>
<ErrMsgID>Complete Compile $(FileName): $(Error) error(s), $(Warning) warning(s)#81006</ErrMsgID>
<PreAction></PreAction>
<PostAction con="0"></PostAction>
</Action>
<Action name="Build" depend="0">
<File> <Command>"ICC8051""A8051""Linker"</Command>
</File>
<Project>
</Project>
<MsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)\nGenerated $(Target)#81007</MsgID>
<ErrMsgID>Complete Build $(TargetName): $(Error) error(s), $(Warning) warning(s)#81008</ErrMsgID>
<PreAction></PreAction>
<PostAction con="0"></PostAction>
</Action>
<Action name="Make" depend="1">
<File>
</File>
<Project>
<Command>"ICC8051""A8051""Linker"</Command>
</Project>
<MsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)\nGenerated $(Target)#81009</MsgID>
<ErrMsgID>Complete Make $(TargetName): $(Error) error(s), $(Warning) warning(s)#81010</ErrMsgID>
<PreAction></PreAction>
<PostAction con="0"></PostAction>
</Action>
</Actions>
</Builder>
-
Junior user
Так выглядели строки командных файлов (.bat) для запуска в пакетном режиме:
компилятора:
icc8051.exe -ml c:\c8051\c\dolly4.c -P -i -g -x -Ic:\c8051\include\ -a c:\c8051\work\dolly5.s03 -l c:\c8051\work\dolly5.lst
ассемблера:
a8051.exe c:\c8051\work\dolly5, c:\c8051\work\dolly6.lst, c:\c8051\work\dolly6.r03, X, F, W, S
линкера:
XLINK c:\c8051\work\dolly6.r03 -f c:\c8051\xcl\lnk8051.xcl -z -x -B -l c:\c8051\work\dolly7 -o c:\c8051\work\dolly8.hex
Поочередное выполнение файлов и ничего больше кроме этого.
Дэфис с буквой это команда (ключ) компилятора.
Если любой пакетный "инструмент" (компилятор, ассемблер, линкер) запустить с со специальным ключом, типа "-?" (могут быть разные) то сам компилятор (ассемблер, линкер) выдает распечатку свих команд в текстовом режиме.
У них у всех свой формат входных и выходных данных, которые описываются при вызове - это даже в самых самых виндовых продуктах внутри всеравно так работает.
На пример, для линкера XLINK первый параметр путь и имя файла в формате соотв. результатм работы ассемблера .r03 (c:\c8051\work\dolly6.r03)
Путь -f c:\c8051\xcl\lnk8051.xcl указывает на файл с раширением .xcl в котором лежат инструкции для линкера.
Путь -o c:\c8051\work\dolly8.hex это путь куда будет положен результат работы, этот формат понимает программатор и этот файл может быть загружен в МК.
Содержание файла "lnk8051.xcl":
__________________________________________________ ___________
-! -LNK8051.XCL-
Командный файл для XLINK 4.2x для использования с
компилятором Си 8051 V4.xx. Модель памяти может
быть -mt, -ms, -mc, -mm или -ml.
Запуск: XLINK <об'ектный файл(ы)> -f lnk8051
Первое: укажем ЦПУ -!
-c8051
-! Выбор банка рабочих регистров [0,8,10 or 18] -!
-D_R=0
-! Разместить сегменты "bit" (всегда с нуля, если не нужно резервировать
битовую память для других целей) -!
-Z(BIT)C_ARGB,BITVARS=0
-! Разместить сегменты "data". Начальный адрес не должен быть
меньше, чем _R+8 (адрес используемого банка рабочих регистров + 8).
Следует также оставить место, если используются функции interrupt
с атрибутом "using". Например, если _R=0 и определена функция-
прерывание "using [1]", то начальный адрес должен быть 10h. -!
-Z(DATA)C_ARGD,D_UDATA,D_IDATA=8
-! Разместить сегменты "idata" (обычно загружаются после "data") -!
-Z(IDATA)C_ARGI,I_UDATA,I_IDATA,CSTACK
-! Разместить сегменты "xdata" на начальный адрес внешнего ОЗУ данных.
Это об'явление не является ошибочным, даже если применена модель
памяти, не использующая внешнее ОЗУ данных. -!
-Z(XDATA)C_ARGX,X_UDATA,X_IDATA,ECSTR,RF_XDATA=0
-! Разместить все сегменты, находящиеся в ПЗУ памяти программ (обычно с 0) -!
-Z(CODE)INTVEC,RCODE,D_CDATA,I_CDATA,X_CDATA,C_ICAL L,C_RECFN,CSTR,CCSTR,CODE,CONST=0
-! Выбор форматизатора для функций printf/sprintf (см. приложение к
описанию компилятора Си -!
-e_small_write=_formatted_write
-! Выбор форматизатора для функций scanf/sscanf (см. приложение к
описанию компилятора Си -!
-e_medium_read=_formatted_read
-! Загрузить библиотеку, соответствующую использовавшейся при
компиляции модели памяти -!
C:\C8051\OBJ\CL8051L -! or cl8051s, cl8051c, cl8051m, cl8051t -!
-! Опция включения отладочной информации в выходной файл -!
-FMPDS-I
__________________________________________________ ______________________
Все эти настройки можно задавть в IDE с использованием "красивых кнопеней" - но результатом работы IDE всеравно будет этот файл. Потому как линкеру "начихать" - какого у вас цвета кнопки. Линкеру подавай в нужном фомате все данные.
Последний раз редактировалось Friendly; 30.03.2013 в 17:14.
-
Junior user
Если внимательно посмотреть в файле конфигурации C Free 5, то там просто ключи вставляются вместо понятных человеку строк в нужных местах IDE.
<CompilerOptions>
<Category name="Memory model">
<Option value="-mt" desc="Select memory model: tiny [-mt]"/>
<Option value="-ms" desc="Select memory model: small [-ms]"/>
<Option value="-mc" desc="Select memory model: compact [-mc]"/>
<Option value="-mm" desc="Select memory model: medium [-mm]"/>
<Option value="-ml" desc="Select memory model: large [-ml]"/>
<Option value="-mb" desc="Select memory model: banked [-mb]"/>
Можно пока потренироваться на ICC8051, т.к. есть пример и все настроено в пакетном режиме.
В SDCC все то же самое - но возможно в качестве ключей используются другие буквы или их комбинации.
По аналогии легко перетащить все.
<Parameter enabled="1"> $(CompilerOptions) $(FileName) -I$(IncPaths) -a $(ExePaths)work\dolly5.S03 -l $(Paths)dolly5.lst</Parameter>
$(ExePaths) - также подставляется IDE путь на заданную директорию, папку где хранятся экзэшники компилятора.
$(Target) - директория куда помещается результат работы - т.е. HEX файл. $(TargetName) - имя этого файла.
$(IncPaths) - адрес директории INC где хранятся файлы конфигурации микроконтроллеров. Когда в проекте выбираем фирму изготовитель МК, то соответственно подставляется путь на папку где лежат файлы описывающие МК этой фирмы. Когда мы выбираем определенный МК, например ADUC848, то в конец этого пути прописывается имя файла "ADUC848.H" - цепь замкнулась.
Ну и так далее.
Т.е. сама по себе IDE ничего не делает - просто "тасует" то что мы выбираем и вставляет в нужные места.
Конструкция Parameter enabled="1" обозначает что эта строка применяется.
Если Parameter enabled="0" - то строка игнорируется. Это очень удобно.
Последний раз редактировалось Friendly; 30.03.2013 в 17:30.
-
Junior user
В закладке File обычно бывает:
1. New Ctrl+N
2. Open Ctrl+O
3. Close Ctrl+F4
5. Save Ctrl+S
6. Save all
7. Save as...
8. Print Ctrl+P
9. Print Setup...
10. Exit
Конечно можно их тасовать и по другому называть, но функционально это должно быть.
-
Junior user
В закладке Edit обычно бывает:
1. Undo Ctrl+Z
2. Cut Ctrl+X
3. Copy Ctrl+C
4. Paste Ctrl+V
-
Junior user
Тут лежит описание компилятора, ассемблера, линкера - на русском языке, кстати.
http://rfcd.ru/forum/showthread.php?...FF-%CC%CA-8051
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума