Jump to content

    

IAR STM8 - uint64_t

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

Share this post


Link to post
Share on other sites

#include <stdint.h>

не помогает?

Share this post


Link to post
Share on other sites

Нету там такого типа, все остальные есть для STM8, а 64 бита нету.

Share this post


Link to post
Share on other sites
21 минуту назад, IgorAVR2 сказал:

а 64 бита нету.

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

Не ?

Share this post


Link to post
Share on other sites
8 minutes ago, megajohn said:

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

Не ?

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

Share this post


Link to post
Share on other sites
4 часа назад, IgorAVR2 сказал:

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

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

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

Share this post


Link to post
Share on other sites
4 часа назад, IgorAVR2 сказал:

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

 

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

#include "..\My_uint64.hpp"

static My_uint64  m1, m2, m3;

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

 

My_uint64.hpp

Share this post


Link to post
Share on other sites
54 minutes ago, megajohn said:

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

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

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

Share this post


Link to post
Share on other sites
47 минут назад, _pv сказал:

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

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

Share this post


Link to post
Share on other sites
1 час назад, _pv сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 минуту назад, _pv сказал:

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

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

Share this post


Link to post
Share on other sites
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

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

Edited by IgorAVR2

Share this post


Link to post
Share on other sites
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

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

 

Share this post


Link to post
Share on other sites
4 hours ago, megajohn said:

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

ADD ADC ADC ADC ADC ADC ADC ADC ADC

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

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now