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

Язык СИ для микроконтроллеров


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

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

странно что компилятор вообще выдает какой-то код... вы отключили оптимизацию?

при включенной оптимизации компилятор вообще не создает переменную, тк оная ни с чем не взаимодействует....

1:				 #include <pic.h>
2:				 #include <htc.h>
3:				
4:				 void main (void)
5:				 {volatile  char Bb;
6:				
7:				
8:				   Bb++;
  7FE    0AF0	 INCF 0x70, F
9:				 }
  7FF    2800	 GOTO 0

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

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

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

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

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

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

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

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

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

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

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

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

Добрый день. Прошу Вашей помощи. Вот функция:

ompriyom()
{
char x;
TMR0=133;
T0IF=0;
T0IE=1;
flagyt0=0;
for (x=1;x<8;)
 {
 while (1==flagyt0)
  {
   TMR0=133;
   if (RA3==0)
 dan &=~(1<<1);
   else
 dan |=(1<<1);

  x++;
  dan<<=1;
  flagyt0=0;
  }

 }
T0IE=0;
}

Переменная dan - char, глобальная. Хай тек никак не хочет компилировать if else и выдает сообщение:variable "_dan" is not used. В чем тут беда?

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

пример описания битов:

volatile	 unsigned char FLAG 		 @ 0x20;

volatile	 unsigned int shet_cicle ; //счетчик

volatile bit flag_1mc			 @ (unsigned)&FLAG*8+0;
volatile bit flag_time_imp	 @ (unsigned)&FLAG*8+1;
volatile bit flag_time_pause	 @ (unsigned)&FLAG*8+2;
volatile bit flag_imp1_OK	 @ (unsigned)&FLAG*8+3;
volatile bit flag_pause1_OK         @ (unsigned)&FLAG*8+4;
volatile bit flag_imp2_OK	 @ (unsigned)&FLAG*8+5;
volatile bit flag_pause2_OK        @ (unsigned)&FLAG*8+6;
volatile bit flag_eror		 @ (unsigned)&FLAG*8+7;

следует уточнить, что название переменной содержащих биты должно быть с заглавной буквы

иначе компилятор воспринимает всю переменную как бит....

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

  • 1 месяц спустя...

Доброго времени суток.

Прошу помощи при написании программы (хай тек) часов объявляю шаблон структуры:

struct  dannie
{
unsigned ed_sek:4;
unsigned des_sek:4;
unsigned ed_min:4;
unsigned des_min:4;
unsigned ed_has:4;
unsigned des_has:4;
};

Далее объявляю сами структуры:

struct  dannie hasi @ 0x30,budilnik1 @ 0x33, budilnik2 @ 0x36;

Далее, что для hasi, что для budilnik1 будут производиться схожие операции, целесообразно применять функции, но вот как в функции указать что операция будет происходить с конкретной структурой?

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

А зачем явные адреса ? Почему такое недоверие к линкеру ? Не забывайте о том, что линкеру будет пофигу на то, что Вы для себя зарезервировали эти адреса, для него они будут незарезервированные !

как в функции указать что операция будет происходить с конкретной структурой?

hasi.ed_sek = 1;
budilnik1.des_min = 5;
.....
.....

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

Через указатель.


//-------------------------------------------
typedef struct{
 unsigned    ed_sek:4;
 unsigned    des_sek:4;
 unsigned    ed_min:4;
 unsigned    des_min:4;
 unsigned    ed_has:4;
 unsigned    des_has:4;
}t_dannie;

typedef        t_dannie    *p_dannie;
t_dannie    hasi, budilnik1, budilnik2;
//-------------------------------------------


//-------------------------------------------
void func(p_dannie  data){
data->ed_sek=0;
data->des_sek=0;
data->ed_min=0;
data->des_min=0;
data->ed_has=0;
data->des_has=0;
}
//-------------------------------------------


..............
..............
..............

func(&budilnik1);    // Обнуляем данные будильника №1

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

То есть объявляю функцию:

void inc_secunda(struct  dannie*);

Вызов функции делаю так:

inc_secunda(&hasi);

А сама функция:

void inc_secunda(hasy_dan)
{
hasy_dan.ed_sek++;
if (hasy_dan.ed_sek==10)
{
 hasi.des_sek++;
 hasi.ed_sek=0;
}
}

Но что то не так ругается.

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

Спасибо Alex.

С этим кусочком разобрался. А вот другая запара - почему хай тек так компилирует:

Код на С:

...
if (razrad==0b01000000)
razrad=1;
else
razrad<<1;
}

Дизасемблер:

...
103:				 if (razrad==0b01000000)
0EF 087A	 MOVF 0x7a, W
0F0 3A40	 XORLW 0x40
0F1 1D03	 BTFSS 0x3, 0x2
0F2 28DC	 GOTO 0xdc
104:				 razrad=1;
0F3 3001	 MOVLW 0x1
105:				 else
106:				 razrad<<1;
107:			 }

И if не так откомпилировал и else обрабатывать не хочет.

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

А что по Вашему делает эта строка ?

razrad<<1;

Правильно, абсолютно ничего, поэтому компилятор ее и выбросил.

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

какое действие ему (компилятору) делать ?

Не понял вопроса. Не корректно записал, надо так :

razrad=(razrad<<1);

?

Так так тоже не то:

 if (razrad==0b01000000)
  razrad=1;
 else
 razrad=(razrad<<1);
}

103:				 if (razrad==0b01000000)
  0EF    087A	 MOVF 0x7a, W
  0F0    3A40	 XORLW 0x40
  0F1    1D03	 BTFSS 0x3, 0x2
  0F2    28F6	 GOTO 0xf6
104:				  razrad=1;
  0F3    3001	 MOVLW 0x1
  0F4    00FA	 MOVWF 0x7a
  0F5    28DC	 GOTO 0xdc
105:				 else
106:				 razrad=(razrad<<1);
  0F6    1003	 BCF 0x3, 0
107:			    }

А если вообще по программе, то razrad участвует как аргумент функции, которая вызывается выше данного участка кода.

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

Так так тоже не то:
Почему ? Не работает что-ли ?

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

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

Вы в дизасм особо не всматривайтесь, проверьте сначала на работоспособность.

Убедил, меня первый вариант на дизасм заставил посмотреть, потом я только на него и орентировался. РАБОТАЕТ. Спасибо.

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

По поводу:

какое действие ему (компилятору) делать ?
Не понял вопроса.
Переменную то он сдвинул, результат есть, а куда его(этот результат) деть, он не знает. Точнее, ему не скомандовали.
Ссылка на комментарий
Поделиться на другие сайты

Никак не пойму, почему переменная route всегда = 0

Или это протеус тупит.

#define WORD unsigned short int
/***********************************/
void PrepareRpmData(WORD wRpm)
{
WORD route;
route=wRpm/500;

/****************************/

по идее должна быть равна целой части числа.

пробовал floor() та же беда.

явное приведение типов тоже пробовал.

Компилю в CodeAVR

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

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

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

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

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

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

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

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

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

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

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

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