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

Непонятности В Повторном Использовании Переменных Picc


denkop

Рекомендуемые сообщения

Растолкуйте пожалуйста поведение кода:

#include <htc.h>
#include <stdlib.h>
#include "lcd.h"

__CONFIG(WDTDIS & UNPROTECT & MCLRDIS & INTOSCIO);

#define _XTAL_FREQ 4000000UL;

void main() {
CMCON=0x07;
ADCON0=0b10001101;
ADCON1=0b01110000;
ANSEL=0b00001000;
TRISA=0b11111111;
TRISC=0;
PORTA=0;
PORTC=0;

unsigned int buf1;
unsigned short long buf2;
unsigned char * ss[];

lcd_init();

while (1)
{
//__delay_ms(1);
GODONE=1;
while (GODONE);

buf1=(ADRESL+ADRESH*256)*5;
buf2=buf1%1024;
buf2*=100;
buf2/=1024;
buf1/=1024;

lcd_goto(0);

lcd_puts("U=");
itoa(ss,buf1,10);
lcd_puts(ss);
lcd_puts(".");
itoa(ss,buf2,10);
lcd_puts(ss);
lcd_puts("V ");

lcd_puts("I=");
itoa(ss,buf1,10);
lcd_puts(ss);
lcd_puts(".");
itoa(ss,buf2,10);
lcd_puts(ss);
lcd_puts("A");
//lcd_goto(0x40); // Go to next line
//lcd_puts(ss);
}
}

На экране должен увидеть два одинаковых значения, но по непонятной причине, после первого использования buf1 и buf2 в функции itoa они портятся, чем и как непонятно :(

post-172770-0-22043000-1373929890_thumb.jpg

Пробовал использовать sprintf вместо itoa, ситуация не меняется, при первом вызове sprintf получаю нормальные значения, при втором опять мусор какой то..

sprintf(ss, "U=%d.%02dV", buf1, buf2) - здесь норм

....

sprintf(ss, "I=%d.%02dA", buf1, buf2) - здесь мусор уже (..

Подскажите пож, что не так делаю..

Заранее благодарен! Прошу сильно не пинать, это мой первый, тренировочный, проект на пиках :thank_you2:

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Под МК на си не работал, но если чисто так посмотреть, у вас есть некий указатель на массив ss:

unsigned char * ss[];

И в то же время нигде не видать его "инициализации". Получается, что указатель указывает непонятно на что, и соответственно ваш буфер находится в неизвестно каком месте памяти и явно что-то ещё с этим местом связано... хотя точно не скажу, куда оно может показывать и что там ещё может мешаться.

Попробуйте заменить на это (задать явный размер и положение массива)

unsigned char ss[15];

(размерность с запасом чуток)

Не могу точно сказать, как itoa на это среагирует, но скорее всего всё нормально соберётся.

*если не получится, есть ещё пару возможных вариантов.

Изменено пользователем tcoder
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Спасибо люди добрые :thank_you2: ! Открыли глаза) Си ещё в универе учил, потом с паскалевским синтаксисом в делфи, на котором щас работаю, совсем мозг отупел)

unsigned char ss[9];
unsigned char * pp;
.....
pp=ss;
.....
itoa(pp,buf1,10);
.....

denkop, itoa принимает указатель на массив char, а у Вас что ?

все верно:

extern char * itoa(char * buf, int val, int base);

а у нас указатель на массив указателей ^_^

Изменено пользователем denkop
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ага, значит дело всё же в отсутствии массива было в том числе. Интересно, А если так сделать:

unsigned char ss[11];
.....
itoa(&ss,buf1,10);
.....

Заработает? (просто любопытно сравнить с обычным си). А также можно & попытаться от ss убрать в itoa... тоже интересно, что получится.

*тоже считаю паскаль неудачным языком с точки зрения синтаксиса.

Изменено пользователем tcoder
Ссылка на комментарий
Поделиться на другие сайты

Ага, значит дело всё же в отсутствии массива было в том числе. Интересно, А если так сделать:

unsigned char ss[11];
.....
itoa(&ss,buf1,10);
.....

Заработает? (просто любопытно сравнить с обычным си). А также можно & попытаться от ss убрать в itoa... тоже интересно, что получится.

*тоже считаю паскаль неудачным языком с точки зрения синтаксиса.

Если не использовать символ "&", компилер ругается варнингом, что то там Illegian integer pointer conversion с символом "&" проблем нет

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...