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

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


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

Ну не расстраивайтесь так :D ну такой я балбес. Бывает, вроде задача понятна и ясна... И на первый взгляд, все просто и легко. А упрешься в какую то ерунду, и сидишь, такой :o смотришь как этот самый на новые ворота...

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

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

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

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

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

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

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

Как ни странно, не совсем согласен: не зная, что конкретно искать, найти именно булеву алгебру в Си довольно сложно. Я сам удивился, когда не нашел на первой странице гугля. Так что дам более подробный совет - почитайте Кернигана и Ричи.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

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

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

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

не согласен...

справочник по Си-> операции -> логические операции

понятно что Кернигани Ричи это икона... , но логические операции даже у горемыки Шпака описаны....

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

Неужели Вы думаете, что такой запрос очевиден для новичка? Ответ на конкретный вопрос по "&&" найти, конечно, нетрудно, но лучше пусть читают хорошую, проверенную икону литературу.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Неужели Вы думаете, что такой запрос очевиден для новичка?
Конечно очевиден, но не для лентяев. Читать литературу по языку - святое дело для начинающего. А при чтении, на все эти вопросы сами по себе найдутся ответы.

Только вот людям нужно всё побыстрее, думают что Си - какой то волшебный и всемогущий язык. Написал одно слово, которое подскажут на форуме, и у тебя готовое устройство.

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

Си - волшебный и всемогущий язык?! Да его чуть ли не низкоуровневым считают, то ли дело php, c#, java, basic, arduino даже (и пофиг, что это всего лишь с++, а не самостоятельный язык).

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Да его чуть ли не низкоуровневым считают

Ну вообще то, я это и имел ввиду :) Я его не считаю великим и всемогущим. К чему для меня эти разъяснения ? :)
Ссылка на комментарий
Поделиться на другие сайты

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

Кстати, вот уж какой язык можно считать всемогущим, так это ассемблер. Машинные коды это все-таки не язык программирования, хотя они еще чище ассемблера.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Ow_Reset(&PORTA, 2);						 // Onewire reset signal
   Ow_Write(&PORTA, 2, 0xCC);				   // Issue command SKIP_ROM
   Ow_Write(&PORTA, 2, 0x44);				   // Issue command CONVERT_T
   Delay_us(120);
   Ow_Reset(&PORTA, 2);
   Ow_Write(&PORTA, 2, 0xCC);				   // Issue command SKIP_ROM
   Ow_Write(&PORTA, 2, 0xBE);				   // Issue command READ_SCRATCHPAD
   Delay_ms(750);
   temp =  Ow_Read(&PORTA, 2);
   temp = (Ow_Read(&PORTA, 2) << 8) + temp;
   mini_temp = (char)((temp & 0xFFF) >> 4 )   ;

подскажите, что сделать после этого, что бы при отрицательной температуре выводился минус на LCD и значение было с запятой. Вот так например -25,5

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

Объявить temp как знаковую 2-х байтовую переменную. Уложить в неё оба принятых байта. Теперь в ней лежит температура, умноженная на разрешение датчика, учитывая знак.

А далее уже всё просто. Проверяем переменную на отрицательность. Если отрицательна, рисуем знак минуса, инвертируем знак у переменной (temp=-temp;) и выводим её на дисплей.

Кстати, Вы в курсе, что после преобразования температуры, датчику нужно послать ресет, затем skip rom (либо команду выбора конкретного датчика с его ID), затем команду чтения температуры, а уже после этого принимать байты ?

Видимо, не в курсе. В таком случае, думаю, будет не обидным послать Вас в гугл читать документацию по 1-Wire и датчику DS1820.

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

  • 2 недели спустя...

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

В общем, наиндусил вот такой участок кода:

while (1)
{
 if (PINB&1&!(OCR2==255)) //если нажата кнопка 1
 {
  OCR2=OCR2+51; //увеличение сигнала на 1/5
  indicate ();
  _delay_ms(500);
 }
 if (PINB&2&!(OCR2==0)) //если нажата кнопка 2
 {
  OCR2=OCR2-51; //уменьшение сигнала на 1/5
  indicate ();
  _delay_ms(500);
 }
}

Первый if в Proteus'e выполняется отлично, второй - только если убрать &!(OCR2==0). С чем это может быть связано?

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

наверно с незнанием синтаксиса языка Си.... или нет?

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

  • 3 недели спустя...

Здравсвуйте, подсажите someProcedure, someProcedure2 и someProcedure3 - это одно и тоже?

struct someStruct {
uint8_t someVal;
};

struct someStruct array[x][y];

void someProcedure(struct someStruct* arr){
arr[i].SomeVal=1;
}

void someProcedure2(struct someStruct* arr){
(*(arr+i)).SomeVal=1;
}

void someProcedure3(struct someStruct* arr){
(arr+i)->SomeVal=1;
}

И ещё хотел спросить, в какую сторону округляется результат деления числа самого на себя. Тоесть, при делении например 10/10 не получу ли я 9 при приведении результата к int ?

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

Здравсвуйте, подсажите someProcedure, someProcedure2 и someProcedure3 - это одно и тоже?

Нет, someProcedure написана правильно, а someProcedure2 и someProcedure3 одинаковы друг с другом. Все вместе они будут одинаковы только в том случае, когда отдельные элементы someStruct в массиве выровнены побайтно и размер одного элемента равен одному байту, что в общем случае не гарантируется языком.

И ещё хотел спросить, в какую сторону округляется результат деления числа самого на себя. Тоесть, при делении например 10/10 не получу ли я 9 при приведении результата к int ?

Не округляется ни в каком случае. Для целочисленных аргументов выполняется целочисленное деление с отбрасыванием дробной части, для дробных аргументов - дробное деление в пределах точности типа данных. Вообще, довольно странный вопрос.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Конечно-конечно, пользуйтесь одинаково. Только, когда пройдетесь по граблям, не говорите, что не предупреждали. В отличие от BerZerKku, я свою позицию обосновал.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

мм насколько я помню, инкрементация указателя прибавляет к адресу размер типа этого указателя..?

А в адресном пространстве памяти массив всегда хранится последовательно...?

дошло, правильно так

(*(arr++)).SomeVal=1;
(arr++)->SomeVal=1;

На счет деления, где-то я сталкивался с такой проблемой

for(int i=1;i<=10;i++)
print((int)i/10); // по идее должно выводить нули везде, кроме последнего - 10...

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

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

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

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

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

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

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

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

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

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

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

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