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

свежак:

 

для ARM

http://klen.org/Files/DevTools/kgp_arm_eabi_20100509.7z

наконецто решена проблема с увеличением кода при использовании операции деления для типа uint64_t (в код прилазила обработка исключений, разматывание стека даже)

 

Наконец-то в одном месте собрались Jtag-программатор, я и отлажтиваемое устройство...

 

Получаю от линкера

undefined reference to `__aeabi_llsl'

- в коде в указанном месте сдвиг 64-х битной переменной влево.

 

Закоментировал.

 

Часть кода заработала. В целом проект не заработал (прпрывания не запустились, что-ли?).

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


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

Наконец-то в одном месте собрались Jtag-программатор, я и отлажтиваемое устройство...

 

Получаю от линкера

undefined reference to `__aeabi_llsl'

- в коде в указанном месте сдвиг 64-х битной переменной влево.

 

Закоментировал.

 

Часть кода заработала. В целом проект не заработал (прпрывания не запустились, что-ли?).

 

че за процессор?

кусок кода который глюк производит с неразрешенной ссыдлкой. посмотрю. я на делениях только проверял.

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


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

AT91SAM7S64, ARM mode, проект (tc1*.zip) я выкладывал.

Объём (от yagarto) стал меньше процента на 3-4.

- в коде в указанном месте сдвиг 64-х битной переменной влево.

Код вот:

 

void prog_dds1_ftw(const uint_least64_t * value, unsigned char freqpow, unsigned char ddsmult)
{
    uint_least64_t val;
    if (freqpow != 0)
    {
        val = * value << freqpow; // собственно эта строка
        value = & val;
    }


}

 

А что насчёт прерываний скажете? Похоже на то, что не возвращается или не входит в прерывание. Можете сказать, какие регистры надо сохранять? (у меня ассемблерный кусок обработчика такой):

 

IRQHandler:

/* Save interrupt context on the stack to allow nesting */
        sub     lr, lr, #4
        stmfd   sp!, {lr}
        mrs     lr, SPSR
        stmfd   sp!, {r0, lr}

/* Write in the IVR to support Protect Mode */
        ldr     lr, =AT91C_BASE_AIC
        ldr     r0, [r14, #AIC_IVR]
        str     lr, [r14, #AIC_IVR]

/* Branch to interrupt handler in Supervisor mode */
        msr     CPSR_c, #ARM_MODE_SVC
        stmfd   sp!, {r1-r3, r4, r12, lr}
        mov     lr, pc
        bx      r0
        ldmia   sp!, {r1-r3, r4, r12, lr}
        msr     CPSR_c, #ARM_MODE_IRQ | I_BIT

/* Acknowledge interrupt */
        ldr     lr, =AT91C_BASE_AIC
        str     lr, [r14, #AIC_EOICR]

/* Restore interrupt context and branch back to calling code */
        ldmia   sp!, {r0, lr}
        msr     SPSR_cxsf, lr
        ldmia   sp!, {pc}^

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

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


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

2_Genadi Zawidowski

 

void prog_dds1_ftw(const uint_least64_t * value, unsigned char freqpow, unsigned char ddsmult)
{
    uint_least64_t val;
    if (freqpow != 0)
    {
        val = * value << freqpow; // собственно эта строка
        value = & val;
    }


}

 

я проверил сдвиг на lpc2103 - сдвиг работает, и __aeabi_llsl не использует, покажите ключи компиллера котрыми исходник компиляте

c прерываниями разбирайтесь сами - компиллер тут не причем.

смотрим в вашу функцию

value = & val;

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

по моему разумению это сразу две ошибки в одной строчеке

 

2_oll

да пока такая перспектива не просматриватся. а нада оно вообще? нужен ли вообще stm8?

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


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

да пока такая перспектива не просматриватся. а нада оно вообще? нужен ли вообще stm8?

Извиняюсь что не в тему - поясню.

У нас тут такая бодяга с AVR - цены, например mega48 возросли в 3 раза ~2.75$. Ищу альтернативу. Мое мнение - STM8 подходящая замена AVRам (для 5-ти вольтовых устройств).

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


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

klen, я привёл кусок функции. Естественно, никаких возвратов указателей из функции не происходит.

Ключи компилятора в том проекте, что Вы уже один раз исследовали.

 

На всякий случай выделяю минимальный код:

 

 

unsigned long long v;
unsigned char n;

int main(void)
{


        v <<= n;
        v >>= n;

        return 0;
}

 

Ключевм моментом являетмся неконстантный счётчик сдвигов.

 

arm-kgp-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi -g -gdwarf-2 crt_sam7s.s -o crt_sam7s.o

arm-kgp-eabi-gcc -c -mcpu=arm7tdmi -Os -gdwarf-2 -fomit-frame-pointer -Wall -Wstrict-prototypes -DNDEBUG=1 -MD -MP -MF .dep/main.o.d -I . -I.. main.c -o main.o

arm-kgp-eabi-gcc ./crt_sam7s.o ./main.o -mcpu=arm7tdmi -nostartfiles -T./sam7x64_rom.ld -Wl,-Map=tc1_rom.map,--cref,--no-warn-mismatch -lm -o tc1_rom.elf

./main.o: In function `main':

C:\user\test/main.c:9: undefined reference to `__aeabi_llsl'

C:\user\test/main.c:10: undefined reference to `__aeabi_llsr'

collect2: ld returned 1 exit status

make.EXE: *** [tc1_rom.elf] Error 1

 

вы присваиваете константному указателю

Вобще-то указатель не константный, а указатель на константу...

 

Разница вот:

 

const char * cp;

и

char * const pc;

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

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


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

2_Genadi Zawidowski

я посмотрю в чем дело.

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


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

2_Genadi Zawidowski

я посмотрю в чем дело.

посмотрел, действительно ... наверно это я накосячил когда libgcc для ликвидации unwind. буду рыть. я троху изменил метод сборки libgcc скорее всего сдвиги копилятся но изза ошибки в скрипте они забылись прилинковатся к libgcc

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


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

klen, спасибо Вам за сборку для arm.

А не имеется ли оной для Ubuntu?

имеется

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


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

свежак для arm, я полагаю окончательно решен вопрос с ликвидацие unwind кода при делении uint64_t, и вообще с uint64_t, все должно быть хорошо.

http://klen.org/Files/DevTools/kgp_arm_eabi_20100525.7z

 

свежак для мипсов

http://klen.org/Files/DevTools/kgp_mips_elf_20100525.7z

 

свежак для авыэров

http://klen.org/Files/DevTools/kgp_avr_20100525.7z

 

свежак для mingw32

http://klen.org/Files/DevTools/kgp_mingw32_20100525.7z

суда помимо самого компиллера, runtime lib и win32 api lib я собрал и положил:

libglew32 - пригодится для программирования трехмерной графики на OpenGL

libelf - работа с ELF бинарниками

libpthreads - POSIX потоки лоя масдая

libftd2xx - работа с USB-моcтами FT2232/FT485/....

libexpat - работа с XML

libiconv,libcharset - i18

QT-4.7 не положил - зело жирная, не влезет :)

 

2_Genadi Zawidowski

косяки которые Вы обраружили повидимуму ликвидировал, Ваш примерчик собирается, я его для опыта немного модифицировал - добавил деление

запускал на lpc2103 и stm32f103rbt6 - вычисления без ошибок

volatile unsigned long long v;
volatile unsigned char n;

int main(void)
{
  v <<= n;
  v >>= n;
  v /= n;
  return 0;
}

вот выход:

arm-kgp-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi -g -gdwarf-2   crt_sam7s.s -o crt_sam7s.o
arm-kgp-eabi-gcc -c -mcpu=arm7tdmi -Os -gdwarf-2 -fomit-frame-pointer -Wall -Wstrict-prototypes  -DNDEBUG=1 -fdata-sections -ffunction-sections -MD -MP -MF .dep/main.o.d -I . -I.. main.c -o main.o
arm-kgp-eabi-gcc ./crt_sam7s.o ./main.o -mcpu=arm7tdmi -nostartfiles -T./sam7x64_rom.ld -Wl,-Map=tc1_rom.map,--cref,--no-warn-mismatch  -Wl,-gc-sections -lm  -o tc1_rom.elf
d:/kgp/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.6.0/../../../../arm-kgp-eabi/bin/ld.exe: tc1_rom.elf: warning: allocated section `.data' not in segment
arm-kgp-eabi-size tc1_rom.elf
   text    data     bss     dec     hex filename
   1968      76    2224    4268    10ac tc1_rom.elf
arm-kgp-eabi-objcopy -O ihex  tc1_rom.elf tc1_rom.hex

а в чем прикол засовывания стеков в bss?

 

 

2_Vasen

сборка arm на x86_64-linux-gnu

компиллер http://klen.org/Files/DevTools/ubuntu64/kg...m_eabi.tar.lzma

архив с библами котрые потребуются компиллеру http://klen.org/Files/DevTools/ubuntu64/lib.tar.lzma

это както криво - пока я пакеты делать не собираюсь

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


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

я дико извиняюсь, уважаемый klen, но ваша сборка для AVR чем отличается от WinAVR-20100110 ? просто я никогда не следил за развитием версий и т.п., но раз все хвалят ваши сборки - хочется и мне попробовать :)

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


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

я дико извиняюсь, уважаемый klen, но ваша сборка для AVR чем отличается от WinAVR-20100110 ? просто я никогда не следил за развитием версий и т.п., но раз все хвалят ваши сборки - хочется и мне попробовать :)

 

я дико извиняюсь, уважаемый ARV, но просто я никогда не следил за развитием WinAVR и т.п.

если бе3 шуток то наверно не лучше и не хуже, а ИНАЯ.

1. всегда собирается из SVN транк-ветки. я называю свою сборку 'свежак' потому что свежее trunk нет ничего по определению ( в эту свежесть входять естественно и самые свежие косяки )

2. собираю со всеми доступными фичами короые получается собрать и запустить( также если получается в проблемных случаях найти ошибки поравить/доделать). Ну например имеет ли winAVR поддержку оптимизаторов Graphite и LTO? в моих сброках они работают (ответ на вопрос о их полезности и умении ими воспользоватся для AVR неочевиден - нада пробывать, для армов видно покрайней мере что код изменяется при их применении )

3, avr-libc тоже самая свежая + мои собственные правки, обычно добавки новых устройств. Правильнее былобы напрямую добавлять свое творчество в репозиторий avr-libc.... но все как всегда откладывается на завтра...

4, при сборке я эксперементирую с ключами компиляции libgcc libc и тд в попытке выжать максимум из текущей реализации компиллера

5. может и хвалят мои сборки для армов, но про avr это Вам представляется подтвердить.

 

и так, я лично охарактирезовал это все так; WinAVR прочие - более стабильные, моя более интересная. Если вы дружите с асмом, хотите повыжимать из компиллера байты и проценты скорости, интересуетесь не только результатом но и процессом - моя сборка для ВАС, если вам нужен скомпилированный результат то наверно надо проверить какой подойдет. Лично мои проекты ессесено собраны моими сборками - работют в железе и не жужжат, оди такой вотовот пдымется в воздух на аппарате тежелее воздуха ;) железяка будет стоять в критическом месте, так что я как сапер в этом случае ;).

 

ну и последнее - найдете косяг в кодогенерации и кому взывать о помощи? будите в багзилу писать.... или Эрику, через полгода может вселенная услышит. а в нашем ыварианте будем разбиратся - на форуме людей много умных, Толик Соколов aka aesok опятже в наших рядах(правда этот паразит кудато пропал и шифруетсо;) мож женился? )

 

ну вот примерно как то татк

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


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

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

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

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

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

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

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

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

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

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