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

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


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

for(i=8;i<=10;i++)printf("%i ",i/10);

Как и положено, выводит 0 0 1. Так как 8 / 10 = 0 (ост. 8) ; 9 / 10 = 0 (ост. 9) ; 10 / 10 = 1 (ост. 0). Ост. - остаток от целочисленного деления.

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

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

Да, этот вариант правильный. Варианты someProcedure2,3 можно было бы исправить arr+i*sizeof(struct someStruct). Потому что по смыслу i - числовое значение, а не структура.

Кроме того, стоило объявить i явно, и массив делать одномерным, а не двумерным.

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

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

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

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

Простите, Шарик, вы балбес
Варианты someProcedure2,3 можно было бы исправить arr+i*sizeof(struct someStruct). Потому что по смыслу i - числовое значение, а не структура.

Грешно издеваться над больным. Простите я не знал. :umnik2:

Ну не уж-то трудно проверить свою "мысль" на практике, чтобы не засорять другим мозги ?!

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

можно было бы исправить arr+i*sizeof(struct someStruct)

Пофиг, в случае, если arr - указатель на структуру. Приращение этого указателя на единицу увеличивает адрес в указателе на sizeof.

Теперь сами догадайтесь, почему данная запись является ошибочной.

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Ок, согласен, arr+i*sizeof() - глупость, оно не работает, в отличие от оригинала. Признаю, что не полностью понимаю указатели в Си.

Но все равно, с объявлением array как двумерного массива, оно вряд ли заработает.

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

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

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Спасибо всем :)

Ещё интереснй вопрос назрел

есть код

while(1){

struct{
uint16_t SomeVar;
uint8_t SomeVar2;
} __attribute__((packed)) myStruct;

print(myStruct.SomeVar);

myStruct.SomeVar=1;
myStruct.SomeVar2=2;

}

что будет выводить print() ?

Ps. У меня сейчас нет ничего под рукой чтобы самому скомпилировать и проверить :(

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Ps. У меня сейчас нет ничего под рукой чтобы самому скомпилировать и проверить :(

Вот это вообще зачетно :crazy: .

Вам поговорить не с кем? так вам в соц сети! :buba:

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

просто на этой машине ничего нет, кроме редактора текстового, с подсветкой ))

тем более результат может зависить от архитектуры и компилятора...

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

А что будет, если белую и пушистую кошку возрастом 2 года скинуть с 16-ого этажа ?

У меня просто сейчас кошки нет под рукой, а узнать очень хочется. Да и 16-ого этажа у меня тоже нет под рукой :(

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

Нет на машине ничего - поставьте, в чём проблема ?

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

Но все равно, с объявлением array как двумерного массива, оно вряд ли заработает.

И опять мимо, будет работать как часики.

На мой взгляд, проще было бы воспользоваться он-лайн компилятором (если уж нет возможности установить на ПК), чем выяснять подобное на форуме. И не ищите сложности там где их нет.

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

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

Нет на машине ничего - поставьте, в чём проблема ?

не могу, прав нет...

тут на самом деле даже без разницы что будет-то ) важно - инициализируется ли структура в цикле при каждой итерации или будет "мусор"...

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

инициализируется ли структура в цикле при каждой итерации
В упор не вижу инициализации. Вижу только объявление перед выводом.

И для чего пример с такими извращёнными типами, как структуры ? Можно было бы привести пример с обычным интом. Или Вы - любитель изощрённости (Или извращения, не знаю как лучше) ? :)

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

пример из проекта (у меня там массив на самом деле, в структуре).

и как раз инициализация структур вызывает проблемы, отсюда и вопрос - как себя компилятор поведет в такой ситуации. Например, инкремент указателей умеет же он "вычислять"...

а так, я пока везде нули через memset() записываю при каждой итерации...

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

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

Есть часы, есть переменные

// переменные часов
char hour, minut;
// а тут настраиваю условия, когда откл или вкл нагрузку
char hour_on, minut_on, hour_off, minut_off;

Типа я все что надо, записал в эти переменные и в while опрашиваю их

while
{
if (hour_on == hour)
{
 if (minut_on == minut)
 {
  // Писать 1 в епром
  //  ON
 }
}

if (hour_off == hour)
{
 if (minut_off == minut)
 {
  //Писать 0 в епром
  //  OFF
 }
}
}

Эта ботва работает, но когда в епроме, к прмеру 0(OFF), типа свет пропал, и появился после того как иф должен уже был переписать на единичку, то ничего естественно не изменяется. Точно так же и 1 на 0 не перепишет. Оно и не может переписать при таком коде. Что скажете??? Как мудрить дальше? :umnik2: Ну не обвешиваться же мне батарейками, должен быть выход...

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

Ничего не понятно. Какой свет, какой еепром ? И причём тут свет и еепром ?

Поконкретнее объясните проблему, без всяких внешних факторов (свет пропал, кнопку нажали, ...).

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

Чтобы подробно объяснить, надо вывалить весь код. Прочесть программу и понять что я имею ввиду. Грубо говоря, это суточный таймер. Данные с DS1307 пишутся в переменные, а я потом сравниваю их со своими переменными.

Надо включать и выключать нагрузку в заданное время. И "ОНО" работает. Но...

К примеру,

В 20:00 нагрузка включилась, а должна отключиться завтра в 6:00 , но с пяти до семи, не было света и когда свет появляется, нагрузка остается включенной до 20:00 а потом и до 6 следующего дня. Потому что в 6:00, контроллер не работал чтобы сравнить переменные отключения с текущими часами и записать 0 в епром.

Вот так как то...

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

и когда свет появляется, нагрузка остается включенной
А почему она включается, когда появляется "свет" ? 7-00 же больше 6-00 и меньше 20-00. С какой стати ей включаться ?

Обычное условие на больше-меньше, и проблема решена.

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

Нет не решена. У меня нагрузка включается, просматривая что там в епроме. Если 1, то включено. Соответственно чтобы выключить, надо черкануть туды ноль. А его никто не записал, ибо в 6:00 контроллер был выключен. Затея с больше меньше была сразу, но тогда переход времени через 00:00 все испортил. Можно сделать так. в 20:00 вкл а в 23:59 выкл, а потом в 00:00 вкл и в 6:00 выкл, но как быть с этой минутой?? Да и память уже заканчивается 97,1% чтобы добавлять еще какую нить функцию чтобы сама вычисляла переход через 00:00

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

Совершенно не понятно для чего тут нужен еепром. Имеем два времени (от и до). Если текущее время попадает в этот диапазон - нагрузка включена, иначе - выключена.

Просто проверяем каждую секунду на попадание в диапазон и всё.

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

А как тогда через 0:00 перейти? Если после 0:00 мои условия стают ложью, а я жду их как истина.

while
{
if (hour_on <= hour)
{
 if (minut_on <= minut)
 {
  //  ON
 }
}
if (hour_off <= hour)
{
 if (minut_off <= minut)
 {
  //  OFF
 }
}
}

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

Я запутался. По этому и пришел спрашивать. Кроме этого алгоритма, у меня еще гора всякого там ветвления и таймеров, и если тут что то менять, то и по программе надо делать коррективы. Жуть. Как вообще люди пишут по 100 кб прошивки :unsure:

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

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

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

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

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

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

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

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

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

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

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

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