Jump to content
    

Преобразование Int в строку на LCD (ICCAVR7)

51 minutes ago, James D. said:

unsigned long

Обычно == uint64_t

Share this post


Link to post
Share on other sites

Я только начал Си изучать, так что мне unsigned long привычнее (понятнее), чем uint64_t.

Edited by James D.

Share this post


Link to post
Share on other sites

3 hours ago, James D. said:

Я только начал Си изучать, так что мне unsigned long привычнее (понятнее), чем uint64_t.

ну как наступите несколько раз на грабли что размеры int и long могут произвольно меняться в зависимости от архитектуры процессора и даже от компилятора. так сразу stdint.h станет понятнее и привычнее.

стандарт вроде гарантирует только что размер char <= short <= int <= long, поэтому иногда встречаются и 16-ти битные char и 16-ти битные int.

Share this post


Link to post
Share on other sites

Подскажите еще, как подправить этот код, чтобы вывести число в 16-ричном виде? Я хочу вывести на LCD1602 значение регистра TWSR.

Если в TWSR 0xA0, то нужно вывести A0, а сейчас у меня на экране 160. Неудобно вручную переводить.

void IntToStr(unsigned long val, char str[])//Перевод числа в строку ASCII символов
{
	//~~~~~~~~~~~~~~~~~~~~~~~
	signed char i = 0, j = 0;
	unsigned int digits[11];
	//~~~~~~~~~~~~~~~~~~~~~~

	while (val)
	{
		digits[i] = val % 10; i++; val = val / 10;
	};
	i--;
	while ( i >= 0 )
	{
		str[j] = (digits[i]+ 0x30); j++; i--;
	};
	str[j] = 0x00;

 

Share this post


Link to post
Share on other sites

On 9/21/2023 at 2:16 PM, James D. said:

Подскажите еще, как подправить этот код, чтобы вывести число в 16-ричном виде?

void IntToStr(unsigned long val, char str[])//Перевод числа в строку ASCII символов

 

В это функции никак.

Или писать под это дело отдельную функцию, либо пользоваться универсальной библиотечной sprintf

Share this post


Link to post
Share on other sites

42 минуты назад, _pv сказал:
const char hex[] = "0123456789ABCDEF";
str[0] = hex[(TWSR>>4) & 0x0F];
str[1] = hex[(TWSR   ) & 0x0F];

Вообще-то: static const char hex[] = "0123456789ABCDEF";

Ведь надеюсь - догадываетесь, что вопрошающий так и вставит это в функцию как есть, не задумавшись?  :sarcastic:

Share this post


Link to post
Share on other sites

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

Вообще-то: static const char hex[] = "0123456789ABCDEF";

Ведь надеюсь - догадываетесь, что вопрошающий так и вставит это в функцию как есть, не задумавшись?  :sarcastic:

Учитывая особенности архитектуры AVR, это не сэкономит ОЗУ и строка окажется в ней все равно...

Надо еще добавить квалификатор progmem добавить, ну и чтение через специальную функцию-макрос.

Share this post


Link to post
Share on other sites

On 9/21/2023 at 5:04 PM, Arlleex said:

Учитывая особенности архитектуры AVR, это не сэкономит ОЗУ и строка окажется в ней все равно...

Надо еще добавить квалификатор progmem добавить, ну и чтение через специальную функцию-макрос.

Свежие IAR для AVR сами кажется умеют const  во flash складывать и все особенности обращения скрывать под капотом.

Share this post


Link to post
Share on other sites

7 минут назад, Arlleex сказал:

Учитывая особенности архитектуры AVR, это не сэкономит ОЗУ и строка окажется в ней все равно...

Надо еще добавить квалификатор progmem добавить, ну и чтение через специальную функцию-макрос.

Может быть. С AVR не работал никогда - особенностей их компиляторов не знаю. Впрочем и вопрошающий не указал про какой компилятор идёт речь. А ваш progmem рассчитан видимо на определённый компилятор.

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

Share this post


Link to post
Share on other sites

13 часов назад, dimka76 сказал:

Свежие IAR для AVR сами кажется умеют const  во flash складывать и все особенности обращения скрывать под капотом.

Сомнительно. Объекты const должны обеспечивать взятие адреса и находиться в том же адресном пространстве, что и остальные объекты памяти. А flash (progmem) в AVR -- это другое, отдельное адресное пространство.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...