sdcc на linux

Создание исполняемых модулей для электронных ключей SenseLock

sdcc на linux

Сообщение doca » Чт, 26 апр 2007 01:32

поставил sdcc на Gentoo Linux, подсунул библиотеки.

компилирую следующим образом:

sdcc -mmcs51 --model-large -o test.hex test.c -l sdcc_ses51 -L ses/large/

ошибок нет. при загрузке в SenseLock ругается на плохой код.

не подскажите где хомут?
doca
 
Сообщения: 10
Зарегистрирован: Чт, 12 апр 2007 06:05

Сообщение hijaq » Чт, 26 апр 2007 10:41

Честно говоря, sdcc версию под линукс мы еще не смотрели. А какой версией sdcc вы пользуетесь? Если 2.6.х, то попробуйте пока использовать 2.5.0.
hijaq
Site Admin
 
Сообщения: 213
Зарегистрирован: Пт, 06 апр 2007 14:50

Сообщение doca » Чт, 26 апр 2007 17:46

изначально поставил 2.6.х, попробую вашу рекомендацию и протестирую 2.5.0
doca
 
Сообщения: 10
Зарегистрирован: Чт, 12 апр 2007 06:05

Сообщение doca » Вс, 29 апр 2007 20:39

удалось сделать откат на версию 2.5.6, пока не работает.

экспериментирую со следующим кодом:
Код: Выделить всё
#include "ses_v3.h"

void main()
{
  BYTE ret = 0;
  time_t t;
  RTC_TIME_T cur;

  ret = _time(&t);

  if (ret != SES_SUCCESS)
  {
   
  }

  ret = _gmtime(&t, &cur);

_set_response(sizeof(RTC_TIME_T), (BYTE *) &cur);

_exit();

}


что удалось заметить - версия 2.5.0 на windows генерирует следующий фрагмент в ассемблерном листинге:
Код: Выделить всё
;--------------------------------------------------------
; external initialized ram data
;--------------------------------------------------------
   .area XISEG   (XDATA)
   .area CSEG    (CODE)
   .area GSINIT0 (CODE)
   .area GSINIT1 (CODE)
   .area GSINIT2 (CODE)
   .area GSINIT3 (CODE)
   .area GSINIT4 (CODE)
   .area GSINIT5 (CODE)

в то же время версия 2.5.6 на линуксе создает:
Код: Выделить всё
;--------------------------------------------------------
; external initialized ram data
;--------------------------------------------------------
   .area XISEG   (XDATA)
   .area HOME    (CODE)
   .area GSINIT0 (CODE)
   .area GSINIT1 (CODE)
   .area GSINIT2 (CODE)
   .area GSINIT3 (CODE)
   .area GSINIT4 (CODE)
   .area GSINIT5 (CODE)
   .area GSINIT  (CODE)
   .area GSFINAL (CODE)
   .area CSEG    (CODE)


как избавиться от использования HOME, GSINIT и GSFINAL - не нашел, может плохо искал.

если у кого есть какие соображения - пишите! очень хочется заставить это все работать под линуксом.
doca
 
Сообщения: 10
Зарегистрирован: Чт, 12 апр 2007 06:05

Сообщение Ivan Petrov » Пн, 30 апр 2007 12:14

doca писал(а):удалось сделать откат на версию 2.5.6, пока не работает...


Имена сегментов тут нипричем.
Я скомпилировал код версией 2.5, выложенной на сайте, и версией 2.6 с офсайта.
Основные различия - это разный порядок линковки библиотек, что не так важно, и разные параметры передаваемые при вызове функций.
Код: Выделить всё
; v2.5.x
xmov   dptr,#_main_t_1_1
mov   b,#0x01
lcall   __time
...


Код: Выделить всё
; v2.6.x
mov   dptr,#_main_t_1_1
mov   b,#0x00
lcall   __time
...

Сейчас попробую поправить параметры функций вручную и скомпилирую из асемблеа, чуть позже доложу о результатах.

SenseLock ругается на плохой код

Привожу параметры сервисной утилиты и ее реакицю, совпадает? Если у Вас чтото другое, то опишите проблему подробней.
Код: Выделить всё
Download:
  Dir_ID: \
  File_ID: 0010
  FileSize: ...
Execute:
  Ex_File_ID: [b]"\0010"[/b]
Result:
  Error: Out of code range (собрано под версией 2.6.x)
Execute:
  Ex_File_ID: [b]"0010"[/b]
Result:
  Error: Invalid file format (в этом случае я указал неверный путь).


Добавлено
Скомпилировал правленный файл ASM на 2.6.x, все запустилось.
похоже без патчей на сырки 2.6.x не обойтись.
Ivan Petrov
 
Сообщения: 30
Зарегистрирован: Пн, 30 апр 2007 11:53

Сообщение doca » Пн, 30 апр 2007 18:31

Код: Выделить всё
Result:
  Error: Out of code range (собрано под версией 2.6.x)

да, именно это.

как думаете - получится сделать патч для sdcc?
doca
 
Сообщения: 10
Зарегистрирован: Чт, 12 апр 2007 06:05

Сообщение Ivan Petrov » Пн, 30 апр 2007 19:09

doca писал(а):как думаете - получится сделать патч для sdcc?


Думаю, обязательно получится, но на это уйдет какоето время.
Тут либо нарушение соглашения о вызовах, либо его модификация. Но в отличии от GCC, SDCC не так хорошо задокументирован изнутри, прийдется разбиратся с ним.

Вот директ линк на все снапшоты SDCC, пока патча нет, используйте версию 2.5
http://sourceforge.net/project/showfile ... oup_id=599
Ivan Petrov
 
Сообщения: 30
Зарегистрирован: Пн, 30 апр 2007 11:53

Сообщение Ivan Petrov » Вт, 01 май 2007 11:12

Код: Выделить всё
diff -uNr ./sdcc-20070430-4781/src/mcs51/main.c ./sdcc/src/mcs51/main.c
--- ./sdcc-20070430-4781/src/mcs51/main.c   2007-01-07 22:18:12.000000000 +0500
+++ ./sdcc/src/mcs51/main.c   2007-05-01 04:06:56.000000000 +0600
@@ -738,7 +738,7 @@
     1, 2, 2, 4, 1, 2, 3, 1, 4, 4
   },
   /* tags for generic pointers */
-  { 0x00, 0x40, 0x60, 0x80 },      /* far, near, xstack, code */
+  { 0x01, 0x40, 0x60, 0x80 },      /* far, near, xstack, code */
   {
     "XSTK    (PAG,XDATA)",      // xstack_name
     "STACK   (DATA)",           // istack_name


С версии SDCC 2.6.x изменены внутренние соглашения о вызовах. Немодифицированная версия со старыми библиотеками SES51 на ключе работать не будет. Приведенный выше патч приводит дескриптор FAR PTR к виду совместимому с ядром SenseLock. Данный патч был протестирован только на модели LONG и только на коде приведенном как пример в данной ветке. Для официальной рекомендации патча нужно провести расширенное тестирование, поэтому просьба ко всем участникам форума потестить, и баги вывалить в данную ветку. Паралельно будет рассмотрена возможность переноса библиотек под версию 2.6.x, чтобы исключить модификацию кода программы третьей фирмы.

P.S.
Патч создан для последнего снапшота с офсайта.
Ivan Petrov
 
Сообщения: 30
Зарегистрирован: Пн, 30 апр 2007 11:53

Сообщение doca » Сб, 05 май 2007 18:41

спасибо за патч, работает! если обнаружу какие-то ошибки - отпишусь здесь.

конечно, было бы здорово перенести всю библиотеку под последнюю версию sdcc.
doca
 
Сообщения: 10
Зарегистрирован: Чт, 12 апр 2007 06:05

Сообщение hijaq » Сб, 05 май 2007 19:14

Обязательно перенесём!
hijaq
Site Admin
 
Сообщения: 213
Зарегистрирован: Пт, 06 апр 2007 14:50

Обновление версии бесплатного компилятора SDCC до 2.6.0

Сообщение doca » Пт, 18 май 2007 19:58

спасибо за новую версию sdcc для windows, уже начал качать.

проверю как пойдет на linux.
doca
 
Сообщения: 10
Зарегистрирован: Чт, 12 апр 2007 06:05

Сообщение hijaq » Пт, 18 май 2007 23:15

Я думаю, проблем никаких быть не должно. На всякий случай обращаю внимание, что при компиляции надо добавить опцию --no-xinit-option (кажется так, в демо проекте она есть в makefile'е).

p.s. Там уже 2.7.0 на подходе =)
hijaq
Site Admin
 
Сообщения: 213
Зарегистрирован: Пт, 06 апр 2007 14:50

Сообщение doca » Пт, 18 май 2007 23:33

все это просто замечательно.

скажите, а каковы шансы добавить XA в sdcc?
doca
 
Сообщения: 10
Зарегистрирован: Чт, 12 апр 2007 06:05

Сообщение hijaq » Сб, 19 май 2007 01:43

К сожалению, в ближайшее время скорее всего никаких. Но если вдруг появится какой-либо компилятор для XA2 помимо Rkit'а - мы сразу же сообщим об этом.
hijaq
Site Admin
 
Сообщения: 213
Зарегистрирован: Пт, 06 апр 2007 14:50

sdcc на linux

Сообщение webalekVet » Сб, 22 сен 2018 10:41

Перехожу с avr на stm8l.
Работаю в ubuntu.
Связка stm8l linux sdcc openocd stm8_gdb eclipse заработала.
Если у кого такая же связка, подскажите, пожалуйста, работают ли у вас breakpoints в eclipse?
Спасибо.
[url="http://hd-wallpapersfd.info/category/animals/"]HD Wallpapers[/url]
webalekVet
 
Сообщения: 3
Зарегистрирован: Вт, 11 сен 2018 22:47
Откуда: Czech


Вернуться в Исполняемые модули

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

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

cron