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

Как реализовать uint64_t на IAR под STM8? Как оказалось нету такого типа в нём. А unsigned long long не помог, создаёт 32 бита видимо.

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


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

21 минуту назад, IgorAVR2 сказал:

а 64 бита нету.

дык создать класс int64 и переопределить операторы +- и т.д.

Не ?

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


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

8 minutes ago, megajohn said:

дык создать класс int64 и переопределить операторы +- и т.д.

Не ?

А как это на практике?

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


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

4 часа назад, IgorAVR2 сказал:

А как это на практике?

На практике: вспомнить как в школе умножали, делили в столбик. Или сейчас уже в школе так не делают? Сразу на калькуляторах? Тогда печалька... :cray:

PS: Ну надеюсь хоть гуглом в школе учат пользоваться?

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


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

4 часа назад, IgorAVR2 сказал:

А как это на практике?

 

вот набросок, дальше сами
 

#include "..\My_uint64.hpp"

static My_uint64  m1, m2, m3;

    m1 = "0123456789ABCDEF";
    m2 = "FEDCBA9876543210";
    m3 = m1 + m2;

 

My_uint64.hpp

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


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

54 minutes ago, megajohn said:

вот набросок, дальше сами

просто интересно, а иар вот такое объявление через строки догадается соптимизировать и сразу нужную константу в память положит, или будет честно в рантайме строку по байтам разбирать?

ну и вместо unsigned char data[8]; можно было uint32_t data[2]; сделать, библиотечная арифметка для 32х разрядов будет быстрее чем очередной велосипед.

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


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

47 минут назад, _pv сказал:

библиотечная арифметка для 32х разрядов будет быстрее чем очередной велосипед.

у меня под рукой только AVR и библиотечная это просто ADD ADC ADC ADC ....  Так что велосипед может использовать как библиотечные реализации так и ваши.

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


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

1 час назад, _pv сказал:

можно было uint32_t data[2]; сделать, библиотечная арифметка для 32х разрядов будет быстрее чем очередной велосипед.

STM8 - 8 битное ядро.

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


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

stm8 ядро конечно восьмибитное, но вот у iarа для него библиотеки арифметики для uint32_t вполне есть, и при наличии оных переписывать умножение/сложение двух 64х разрядных чисел руками как массив 8ми битных чисел вместо умножений/сложений пар uint32 идея так себе.

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


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

1 минуту назад, _pv сказал:

stm8 ядро конечно восьмибитное, но вот у iarа для него библиотеки арифметики для uint32_t вполне есть, и при наличии оных переписывать умножение/сложение двух 64х разрядных чисел руками как массив 8ми битных чисел вместо умножений/сложений пар uint32 идея так себе.

Почему? Чем она хуже сложения массива 32-битных чисел? И уж точно складывать сразу в нативной разрядности будет однозначно быстрее использования ненужной прослойки.

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


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

5 hours ago, jcxz said:

На практике: вспомнить как в школе умножали, делили в столбик. Или сейчас уже в школе так не делают? Сразу на калькуляторах? Тогда печалька... :cray:

PS: Ну надеюсь хоть гуглом в школе учат пользоваться?

К сожалению нам в школе запрещали калькулятором пользоваться.

А теперь и сыну его не даю. А как там сейчас в школе учат я уже не знаю, уже несколько лет как домашку не проверяю - 9 класс, сам учиться! Насчёт гугла обязательно спрошу.

 

5 hours ago, megajohn said:

 

вот набросок, дальше сами
 


#include "..\My_uint64.hpp"

static My_uint64  m1, m2, m3;

    m1 = "0123456789ABCDEF";
    m2 = "FEDCBA9876543210";
    m3 = m1 + m2;

 

My_uint64.hpp

Спасибо, буду вникать.

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

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


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

10 часов назад, _pv сказал:

но вот у iarа для него библиотеки арифметики для uint32_t вполне есть, и при наличии оных переписывать умножение/сложение двух 64х разрядных чисел руками как массив 8ми битных чисел вместо умножений/сложений пар uint32 идея так себе.

вы не понимаете следующего.

библиотечная функция даст ADD ADC ADC ADC для младшего 32битного, и тоже само для старшего 32битного. Но как вы сделаете CARRIER от младшего к старшему ?

я про это ADD ADC ADC ADC  -> ADD ADC ADC ADC

вот как раз самописная и обеспечит

ADD ADC ADC ADC ADC ADC ADC ADC ADC

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

 

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


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

4 hours ago, megajohn said:

вот как раз самописная и обеспечит

ADD ADC ADC ADC ADC ADC ADC ADC ADC

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

естественно, если правильно написать, то будет быстрее, я про тот код на С что в Вашем примере.

не уверен, что так как оно написано на С, скомпилируется именно в ADD ADC ADC ADC ADC ADC ADC ADC ADC

// правильней делать асмовские вставки, но мне было лень

если бы ТС мог он бы таких вопросов не задавал.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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