Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

char cur_pin_out=0;
...........
Вот скажыте,какая разница,между этими выражениями ??
этой---
cur_pin_out=0x00;
if(PIND!=(~(1<<cur_pin_out)))

и вот этой---

if(PIND!=(~(1<<0)))
....
Ато не работает чего то ((
Последний раз редактировалось Аlex Вт апр 10, 2012 00:39:42, всего редактировалось 1 раз.
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

какая разница,между этими выражениями ??
В одном случае - переменная, в другом - ноль.
Ато не работает чего то ((
Опять таинственные фразы...
Контактная информация:
Реклама
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

(unsigned char)~(1<<cur_pin_out)
а так работает ))
Последний раз редактировалось Аlex Вт апр 10, 2012 00:40:19, всего редактировалось 1 раз.
Причина: ---
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

Аlex писал(а):
какая разница,между этими выражениями ??
В одном случае - переменная, в другом - ноль.
Ато не работает чего то ((
Опять таинственные фразы...
Я имел ввиду что при одинаковых выражениях вида 1<<X, где Х -число(0),или переменная которой я присвоил 0, выдаёт разные результаты )
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

если хотите переменную использовать лучше применить маски
В поисках истины человек развивается.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

vitalik_1984 писал(а):если хотите переменную использовать лучше применить маски
Это как ??
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск

Сообщение Rimsky »

vitalik_1984 писал(а):в этом выражении еще и скобка лишняя похоже:-)

Код: Выделить всё

strncmp_P((const char*)data, *bru_600, 3))
а точно адрес первого элемента массива нужно передать в функцию?может нулевой?

Код: Выделить всё

Код:
strncmp_P((char const*)&data[1], PSTR("600"), 3)
Да, все Ок, работает. Нулевой элемент массива у меня для других целей.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Приветствую всех.
Такой вопрос. Имеем класс:

Собственно, объявление класса:

Код: Выделить всё

class SHUNT
{
private:
	........
	unsigned char			v_min;				// Min tension flag
	unsigned char			v_max;				// Max tension flag
public:
	SHUNT();
	~SHUNT();
	.........
	bool LoadShuntBypass(unsigned char *addr);
};
Реализация метода:

Код: Выделить всё

bool SHUNT::LoadShuntBypass(unsigned char *addr)
{
	if(addr[DATA_SIZE] != SH_BYP_SZ){return false;}    //  DATA_SIZE =0x02u ; SH_BYP_SZ = 0x03u
	v_min = addr[V_MIN];     // V_MIN = 0x03u
	v_max = addr[V_MAX];    // V_MAX = 0x04u
	return true;
}
Обращение к методу извне:

Код: Выделить всё

static unsigned char buff[32];
SHUNT sh2;
..................
..............//Принимаем пакет в буфер и проверяем на целостность.
..............
if(!(sh2.LoadShuntBypass(buff))){cout<<"BYPASS DATA CORRUPTED!"<<endl;} //После первичной проверки, извлекаем некоторые данные из пакета.
..
Правильно ли я делаю, или где-то накосячил?
Интересует именно правильность операций с массивом buff[32]
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Я хотел сказать если не хотите эту переменную использовать как само число, показывающее используемую ногу то можно использовать маску.Вообще маску можно использовать во многих случаях, особенно когда на том же порту используются ноги другого значения.В этом примере можно использовать любые три подряд ноги порта.
Спойлер

Код: Выделить всё


#define _BV(x) (1<<(x))
#define PIN1 1 
#define PIN2 2 
#define PIN3 3 
#define MASK_PINS (_BV(PIN1)|_BV(PIN2)|_BV(PIN3))  //формируем маску здесь и тремя строками выше

unsigned char cur_pin_out;    //Переменную обьявили
///___________Основной цикл
if(MASK_PINS&(cur_pin_out<<=1)){/*тут делаем что нужно*/} //Тут применили маску и заодно сдвинули cur_pin_out влево
      else {cur_pin_out=_BV(PIN1);} //Если кончились ножки(по маске), то заново.
 
А что конкретно вы хотели таким способом добиться? Поди сканировать клавиатуру,порты?
В поисках истины человек развивается.
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 347
Зарегистрирован: Сб фев 07, 2009 19:21:25

Сообщение БАТАРЕЙКУС »

Мужики помогите чем можете.
я программирую PIC18 с помощью мелкочиповского компилятора C18, и столкнулся проблемой я не как
не могу создать указатель на массив.
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

обоснуйте....
const rom char *pArrRom="12345";
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб

Сообщение AI_Disable »

urry писал(а):const rom char *pArrRom="12345";
Смахивает на какой-то бред. Если, конечно, это не очередные приблуды псевдо-си компиляторов.
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

:)
Вполне нормальная запись для MCC18.
Хотя можно и в 3 строчки.
near rom char * near_rom_ptr;
rom char rom_array[] = "ROM";
near_rom_ptr = &rom_array[0];
Последний раз редактировалось urry Ср апр 11, 2012 23:50:19, всего редактировалось 1 раз.
Контактная информация:
Прорезались зубы
Сообщения: 209
Зарегистрирован: Пт авг 27, 2010 18:05:09

Сообщение Transistor »

Ребята что ето за такая функция printf с чем к чему ету функцию подають разтолкуйте мне? Pic c CCS
П.С.Как будто на лсд экран оно не выдает :dont_know: (так как в ПК) куда она выводит свои значения.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар

Сообщение Кислый »

о_0
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

куда она выводит свои значения
В putch.

Код: Выделить всё

void putch(char);
Контактная информация:
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

Transistor писал(а):Ребята что ето за такая функция printf с чем к чему ету функцию подають[skip]
куда она выводит свои значения.
Насчет "куда" - Алекс уже сказал. Использует putc(...) библиотеки stdio.h как стандартный вывод. Переписываем его или пишем свой и помещаем в проект. Самописный "перекроет" библиотечный.
Ну, а насчет "с чем идять и подають" - это сходу в Википедрию. Если нет другой литературы. Функция весьма популярна, причем не только в Си.
С уважением,
Виктор.
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

DX168B писал(а):Приветствую всех.
Такой вопрос.
//////////////
buff[32]
Сразу скажу, что конструкция не работала. Почему, уже разобрался сам.
Спасибо за "помощь".....
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Прорезались зубы
Сообщения: 209
Зарегистрирован: Пт авг 27, 2010 18:05:09

Сообщение Transistor »

ut1wpr писал(а):Насчет "куда" - Алекс уже сказал. Использует putc(...) библиотеки stdio.h как стандартный вывод. Переписываем его или пишем свой и помещаем в проект. Самописный "перекроет" библиотечный.
Ну, а насчет "с чем идять и подають" - это сходу в Википедрию. Если нет другой литературы. Функция весьма популярна, причем не только в Си.
Я непонямаю как ета функция работает. Кстате открил я ету библиотеку и нефига там нет только perror от такая функция. Я знаю как ета функция работает на компе но как она работает в МК.
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

Приветствует!
Подскажите как понимать эту конструкцию:
while (!( SCS &0x00000040));
Если я правильно понимаю, то цикл висит до тех пор пока в регистре scs этот бит не будет равен 1?
И еще не совсем понятно как работает вот эта конструкция:
while( PLLSTAT & 0x000);

Подскажите пожалуйста!
STM32F4 Discovery + KEIL + Windows 7
Ответить

Вернуться в «Разные вопросы по МК»