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

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


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

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 раз.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Секреты депассивации литиевых батареек FANSO EVE Energy

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

Реклама: АО КОМПЭЛ, ИНН: 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
Ссылка на комментарий
Поделиться на другие сайты

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 пользователей онлайн

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

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