Перейти к содержанию
    

Извиняюсь, немного по другой теме наблюдение.

Касательно программной эмуляции плавучки (у меня cortex-m3) заметил "баг" в newlib::sqrtf:

 

sqrtf тянет за собой несколько функций double-арифметики (ddiv и тд). Следы приводят сюда:

http://sourceware.org/cgi-bin/cvsweb.cgi/s...amp;cvsroot=src

#ifdef _IEEE_LIBM
       return __ieee754_sqrtf(x);
#else
       float z;
       struct exception exc;
       z = __ieee754_sqrtf(x);
       if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
       if(x<(float)0.0) {
           /* sqrtf(negative) */
           exc.type = DOMAIN;
           exc.name = "sqrtf";
           exc.err = 0;
           exc.arg1 = exc.arg2 = (double)x;
           if (_LIB_VERSION == _SVID_)
             exc.retval = 0.0;
           else
             exc.retval = 0.0/0.0;
           if (_LIB_VERSION == _POSIX_) 
             errno = EDOM;
           else if (!matherr(&exc)) {
             errno = EDOM;
           }
           if (exc.err != 0)
             errno = exc.err;
           return (float)exc.retval; 
       } else
           return z;
#endif

Реализация корня __ieee754_sqrt(f) обвёрнута в какой-то ужас :) - мне он не нужен, поэтому я просто заменил <math.h> на свой "mysqrt.h" (другой математики я не использую):

#ifndef GUARD_MYSQRT_H
#define GUARD_MYSQRT_H

#ifndef USE_IEEE_SQRT
#include <math.h>
#else
// to call __ieee754_sqrt(f) directly from newlib
extern "C" double __ieee754_sqrt(double x); 
extern "C" float __ieee754_sqrtf(float x); 

static inline double sqrt(double x)
{
	return __ieee754_sqrt(x);
}
static inline float sqrtf(float x)
{
	return __ieee754_sqrtf(x);
}
#endif

#endif

При использовании только float-математики размер проекта снизился на 2-3Кб (точнее уже не помню).

 

Проверялось на самых последних свежаках kgp и последнем yagarto.

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


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

После масштабной доработки проекта, прошивка перестала запускаться. Виснет на этапе вызовов конструкторов.

Добавил болтливости в отладочный UART и вот что получил:

0: Constr_Task started!
0: start 0x1323cc, end 0x1323dc
0: Constr: 0x11ab4d
0: Constr: 0x11cd85
0: Constr: 0x11f5d5
0: Constr: 0x125c05
0: Starting 0x11ab4d

Как видно, адреса почему-то не выровнены, как так могло случиться? :cranky:

 

Контроллер sam7x, gcc из последнего свежака. Никаких сторонних либ. Стартап полностью свой.

 

Куда копать? :smile3046:

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


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

Куда копать?
В сторону .map. А код, небось, в thumb-режиме? Младший бит используется как индикатор thumb, по нему команда BX переключает режимы. Так что я не вижу тут криминала, если только конструкторы вызываются через BX, а не через MOV в PC.

 

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


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

неа... нифига оно не чисто: log10 всякую мутату из newlib. так всегда бывает.... нафига ему у __impure_ptr ? чтоб сообщить о коде ошибки или еще чтото а оно нам нужно?

...

Теперь log10 не требует errno. Спасибо.

...

 

Это было для lpc1768, там помогло.

 

Щас проект на атмеловском sam7x.

Возникла острая необходимость освободить как можно больше ОЗУ. Опять всплыла тема errno для log10 :(

Больше 1к в трубу.

 

Кусок map файла:

/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libm.a(lib_a-sf_round.o)
                              obj/common/OS/common.o (roundf)
/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libm.a(lib_a-wf_log10.o)
                              obj/cpu/param.o (log10f)
/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libm.a(lib_a-ef_log10.o)
                              /usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libm.a(lib_a-wf_log10.o) (__ieee754_log10f)
/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libm.a(lib_a-ef_log.o)
                              /usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libm.a(lib_a-ef_log10.o) (__ieee754_logf)

...

/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libc.a(lib_a-errno.o)
                              /usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libm.a(lib_a-wf_log10.o) (__errno)
/usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libc.a(lib_a-impure.o)
                              /usr/local/arm/bin/../lib/gcc/arm-kgp-eabi/4.8.0/../../../../arm-kgp-eabi/lib/thumb/libc.a(lib_a-errno.o) (_impure_ptr)

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

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


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

после долгого залегания на дне всплываем!

 

свежак для ARM . хост linux x86_64

 

http://klen.org/Files/DevTools/linux-x86_6..._64-20130623.7z

сильно вштырило от прочтения судового дневника Федора Конюхова (http://www.konyukhov.ru/) который Он вел при одиночной кругосветке в Северном море - Antarctica Cup Race Track 2008 . Оказывается один человек может по неделе и более не спать! практически не есть! управлятся с 30 метровой океанской яхтой имеющей 750м2 парусного вооружения. в это трудно поверить но это факт. Данной сборке я дал имя этого отважного человеа , что можно увидеть по ключикам -v.

 

теперь компиллер будет иметь ветку 4.9 транка

 

некоторые соображения ипредложения:

после расковыривания проекта отладчика BlackMagic, переделки прошивки и изготовленя тестовых платок отладчика полностью перешел на новый отладчик (на фотке отладчик слева , справа таргет)

kgp_gdb_dprobe.jpg

мне понравилось

1. Хорошо написанный GDB сервер который крутится на микроконтролере отладчика. причем писал граматный чел - все канонично без костыликов.

2. реализован интерфейс по SWD и JTAG. с момента его изготовления пробывал для проверки JTAG, с тех пор пользуюсь только SWD

3. осцылограф и отладка отладчика :) показали что скорость заливки в флеш таргета определяестя исключительно скоростью флеша таргета. на осцилограмме видно скорость SWD на порядки выше скорост прошивания.

4. По субъективным ощушениям в связи с высокой скоростью стало лучше отлаживатся - отладчик за "более сложные" точки останова в состоянии зацепится. после связки openocd + gdb это сильно ощушается.

5. имеется уже реализованный UART - можно обеспечит вывод через него отладочную инфу с таргета. я не использую эту возможность потому что делаю сразу USB композит на девайсе и через USB организую консоль. если случится девайс без вывода USB (что трудно представить) но эта фича будет незаменима.

6. ну и главное - поскольку проект открыйтый - можно порезвится :)

а) добавил штырьки на отладчик и две команды - включить/выключить питание USB_VBUS и +3,3v. это позволит питать маленькие девайсы от самого отладчика

(gdb) target extended-remote /dev/ttyACM0

Remote debugging using /dev/ttyACM0

(gdb) mon help

General commands:

version -- Display firmware version info

help -- Display help for monitor commands

jtag_scan -- Scan JTAG chain for devices

swdp_scan -- Scan SW-DP for devices

targets -- Display list of available targets

morse -- Display morse error message

connect_srst -- Configure connect under SRST: (enable|disable)

ldo -- Power 3.3v output: (enable|disable)

usb_vbus -- Power USB_VBUS(5v) output: (enable|disable)

traceswo -- Start trace capture

б) добавил на плату 4 вывода для заводки на отладчик аналоговых сигналов на АЦП + вывода сигналов с ЦАП + 8 линий GPIO(на фотке виден ряд из 8 PLC2.54 штырьков)

 

последний пункт - хочется сделать не просто отладчик а более умное устрйство. в USB композит отладчика доюавить интерфейс аналогового и цифрового обмена с таргетом. на стороне хоста по мимо собсно отладки через отладчик еще писать и читать в этот интерфейс. с помощью программы на хосте эмулировать например объект управления отлаживаемого устойства. К примеру Вы пишете прошивку для контроллера серво привода - но сервопривод на полигоне, размером с грузовик .... а отлаживатся хочется дома или в шезлонге на берегу речки. в таком случае необходимо будет только на хосте написть прогу реализующую динамическою модель сервопривода и замкнуть входы и выходы цепи обратной связи через отладчик ( GPIO/ЦАП/АЦП.UART ). Я планирую на стороне хоста сделать микрофреймворк который позволит на Lua быстро создавать эмуляторы того к чему девайс будет подключен в реальности.

 

в связи описанным забил на OpenOCD

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


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

если случится девайс без вывода USB (что трудно представить) но эта фича будет незаменима.

Отчего? GSM - модем, например. Вешалка, конечно, но в особо извращенных случаях... всё, молчу. :)

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

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


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

Отчего? GSM - модем, например. Вешалка, конечно, но в особо извращенных случаях... всё, молчу. :)

я имел ввиду мои таргеты, ну если GSM то конечно UART пригодится. но у всех их уже USB в комплекте тоже.

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


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

свежак для arm хост x86_64

http://klen.org/Files/DevTools/linux-x86_6...30728-ARCHIM.7z

 

 

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


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

свежак для arm хост x86_64

www.klen.org/Files/DevTools/linux-x86_64/arm-kgp-eabi-linux-x86_64-20131006-АНГКАЯНРАНАЙ.7z

 

а ваще ктонибудь использует? мож сизисов труд?

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


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

Я в основном переключился на gcc-arm-embedded, но часто использую kgp как проверочный вариант.

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


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

Я в основном переключился на gcc-arm-embedded, но часто использую kgp как проверочный вариант.

в чем профицит? интересно для сравнения.

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


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

в чем профицит? интересно для сравнения.

Основное соображение такое: более широкая база пользователей => есть надежда на лучшую протестированность.

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


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

Основное соображение такое: более широкая база пользователей => есть надежда на лучшую протестированность.

на выходе различия существенны, их характер?

интересно, потому что я только свежаком проекты собираю.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...