• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
mazzi

Компилятор SDCC для MCS51

4 сообщения в этой теме

mazzi    3

Недавно передо мной встала необходимость заиметь бесплатный компилятор с языка Си для микроконтроллеров MCS51. Поиски в интернете привели к очень интересному проекту SDCC. Этот компилятор не имеет собственной среды разработки и я использовал его напрямую из командной строки, а затем я написал простенькие "батники". Через пару часов я уже полюбил эту вещь и всячески рекомендую всем, кто хочет иметь прекрасный, и что для многих немаловажно, бесплатный инструмент.

Сайт с которого я скачал дистрибутив http://sdcc.sourceforge.net/ .

После инсталляции компилятор у меня расположился здесь C:\SDCC\

Программу я начал писать здесь D:\tmp\SDCC\

Для начала я попробовал написать пробную программку для микроконтроллера AT89C2051. У меня получилось что то вроде этого в файле main.c:

//-------------------------------------------------------------------

#include "C:\sdcc\include\mcs51\at89x051.h"

//-------------------------------------------------------------------

typedef unsigned char uchar;   
typedef unsigned long ulong;

//-------------------------------------------------------------------

#define LED P1_7

//-------------------------------------------------------------------

uchar st_led=1;
ulong t_led =0L;

//-------------------------------------------------------------------
void main(void) {

   while(1) {
      if(st_led) LED=1; 
      else       LED=0;
      t_led++;
      if     (t_led<100000L) st_led=0;
      else if(t_led<200000L) st_led=1;
      else    t_led=0;
   }
}

Затем я написал батник go.bat со следующим содержимым:

c:\sdcc\bin\sdcc.exe  main.c

Запустил батник и получил несколько результирующих файлов:

Содержимое папки после удачной компиляции
18.07.2017  09:30               752 main.c     - это файл с исходным кодом. 
18.07.2017  09:33             8 623 main.asm   - результат работы на ассемблере.
18.07.2017  09:33               584 main.ihx   - файл с прошивкой. Нужно только поменять расширение на HEX.
18.07.2017  09:33               221 main.lk    - не разбирался, что это такое.
18.07.2017  09:33            24 383 main.lst   - полный листинг вместе с объектным кодом.
18.07.2017  09:33            17 613 main.map   - карта памяти, куда и что ложится. 
18.07.2017  09:33             1 192 main.mem   - карта использования оперативной памяти.
18.07.2017  09:33             4 905 main.rel   - не разбирался, что это такое.
18.07.2017  09:33            24 383 main.rst   - похоже на файл lst
18.07.2017  09:33            39 294 main.sym   - значения символов. Переменных, констант и т.д.

Прошив микроконтроллер полученной прошивкой, я получил мигалку.

Затем я переделал свой старый рабочий проект написанный ранее в Keil, и - о, чудо, всё сразу заработало!

Считаю данный компилятор годной заменой дорогим и платным компиляторам. Рекомендую всем. Надеюсь в дальнейшем найти IDE оболочку для более комфортной работы.

Следует сказать, что помимо MCS51 компилятор поддерживает также другие платформы. Это Мотороловские HC08, Микрочиповские PIC14, PIC16, а также Зилоговские Z80, Z180.

Всем удачи и хорошего дня!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
ARV    268
Только что, mazzi сказал:

Надеюсь в дальнейшем найти IDE оболочку для более комфортной работы.

Eclipse + SDCC plugin или другие плугины (не в курсе их количества и разновидностей).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mazzi    3

@AVR, а вы себе ставили Eclipse + SDCC ?

Изменено пользователем mazzi

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    268

От 51-го семейства я давно отошел в сторону... Поэтому не ставил. Но зато многие годы пользуюсь Eclipse и AVR-GCC (SDCC - это разновидность GCC) с AVR-плугином :) Не могу не радоваться такой связке. Думаю, что и связка Eclipse + SDCC не будет ужасной.

Изменено пользователем ARV

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: formvit
      Научно-медицинской фирме требуется инженер-электронщик-программист.
      Полная неделя 9:00 - 18:00.
      ст. м. Авиамоторная.
      Основная деятельность - разработка и программирование устройств на мк STM-32.
    • Автор: metallic
      Итак, после прочтения вводной документации и изучения архитектуры PIC-контроллеров среднего уровня, пришел к выводу, что для применения в радиолюбительской среде и для штучного изготовления устройств, ассемблер имеет мало смысла, т.к. достаточно сложен и запустан по сравнению с Си. У Си есть свои недостатки: это более громоздкая и соответственно более медленная программа, в сравнении с ассемблером, но как я уже сказал, любительское штучное изготовления устройств - это не массовый выпуск, где надо экономить на всем. Не хватило памяти? - не беда, возьмем контроллер побольше, да потолще В общем, решил я, что на Си писать проще, быстрее и комфортнее.
      В качестве компилятора выбрал ccs (ну просто в книге на его примере рассказывалось о Си). Попробовал сделать на базе контроллера 16F84A свою первую программу типа "hello world", по традиции мигание светодиодами (зеленый горит 2 сек, гаснет, мигает три раза красный и так по кругу), все получилось, с некоторыми оговорками (подробности ниже).
      Теперь к вопросам.
      1. Правильно ли я выбрал компилятор или есть что-то более религиозно верное?
      2. Стоит ли использовать специфические конкретно для этого компилятора фичи, вроде #byte, #bit и т.д.? Т.к. многие, как я понял, ругают за использование этого функционала. Сам из минусов я вижу только отсутствие переносимости Си программ между компиляторами, в которых нет таких директив.
      3. Как я понял, при написании своей первой программы, Си в контроллерах "не полноценный"? Конкретно столкнулся со следующей проблемой: компилятор ругался на цикл for, говорил, что эта часть кода не будет иметь эффекта, и действительно, после прошивки красный светодиод не моргал, см. скриншот. Т.е. получается чиклы for не поддерживаются? Т.к. после того как заменил его на цикл while - все заработало:

      #include <main.h> void main() { while(true) { output_high(LED_GREEN); delay_ms(2000); output_low(LED_GREEN); int i = 3; delay_ms(500); while(i > 0){ output_high(LED_RED); delay_ms(500); output_low(LED_RED); delay_ms(500); i--; } } }
      4. И последний вопрос. Все же для общего развития хотел попробовать написать эту же программу на асме, пытаюсь создать проект в мплаб, указываю компилятор стандартный (см. 2 скрин) и получаю ошибку как на третьем скрине, что я делаю не так?