igorle
Свой-
Постов
337 -
Зарегистрирован
-
Посещение
Весь контент igorle
-
Си
igorle ответил Буратино тема в Программирование
Вы код кернела линукса видели? Там goto почти в каждом файле. Обычно используется как error handling Для переменной цикла нет ничего лучше стандартной i, j или k. Посмотрите в том-же кернеле. У меня нет под линукса под рукой, но если вы можете, посмотрите результат вывода строк grep -rw for . | grep -w i | wc -l grep -rw for . | grep -w counter | wc -l и расскажите нам, каких циклов вы нашли больше - с переменной цикла i, или counter. Вы демострируете нежелание понять, почему Си работает так как он работает. Вы не слышите, что вам говорят ТРИ человека, но при этом именно остальных обвиняете в упертости и косности. Я думаю, что язык Си просто не подходит для тех задач, которые вы решаете по ходу своей работы. И это корень ваших проблем. Вы будете смеяться, но прекрасное "как он дышит так и пишет, не стараясь угодить" - к программистам тоже относится. Лучше пишите, как считаете правильным. -
часовой кварц для STM32F103
igorle ответил igorle тема в ARM, 32bit
Я пока не получил мои борды, так что своего опыта не имею. Но из теории я понял, что RTC может стартовать даже вообще без кварца. На внутренней RC цепочке. Просто нестабильным будет. Не может быть, что иногда кварц не заводится, но пользователь этого не замечает? -
Олимпиада программистов
igorle ответил igorle тема в Программирование
Чтобы почуствовать разницу, забегите вот этот код: static void foo(char *str) { printf("%p\n", str); } int main(void) { foo(NULL); foo("\0"); return 0; } После этого попытайтесь объяснить, почему ваше утверждение неверно. По поводу всего остального. Я подписал обязательство, согласно которому, если станет известно что я консультирую участников конкурса Холы, то я должен буду вернуть полученую от них приемию. А я премию уже потратил на детальки. Так что дальше - самостоятельно. Адью :) -
Олимпиада программистов
igorle ответил igorle тема в Программирование
Ну, некоторые пишут, чтобы получать лулзы, глядя как люди рвут на себе волосы "Код работает" - это совсем не аргумент. Надо не код, который один раз сработает с данным примером, а код, который будет работать в библиотеке. Он будет вызываться миллионы раз как с короткими, так и мегабайтными строками. void str_cpy (char **a, char *b) { *a = b; } Кто сказал что сорс будет существовать после вызова функции? Может быть я работаю с буфером, потом копирую строку и снова пишу в буфер. Или освобождаю буфер. Что будет с сохраненным значением? void str_cat (char **a, char *b){ int _size1 = strlen(b); int _size2 = strlen(*a); Функция может быть вызвана для неинициализированного дестинейшена. strlen для NULL - крэш char * tmp = NULL; tmp = realloc(tmp, _size1 + _size2 + 2); Зачем вызывать реаллок для NULL? Зачем двойка добавлена? memmove(tmp , *a, _size2); memmove(tmp + _size2, b, _size1); *a = tmp; } Старое значение *a перетерто. Память, на которую указывала *a - потеряна. Результирующая строка не ограничена нулем. -
Олимпиада программистов
igorle ответил igorle тема в Программирование
Проблема общения в виртуале - никогда не уверен - человек шутит, или серьезно. Ваш вариант выглядит как троллинг. Вы действительно хотите комментариев к этому коду? -
Си
igorle ответил Буратино тема в Программирование
Спасибо. Теперь сравните с c = !!a ^ !!b; Допустим, мы разбираем чужой код. Понятно что ксор - не самоцель, а промежуточный результат. Может быть даже - аргумент функции. Какой вариант выберете теперь? Кстати, это меня сын недавно научил, когда я вслух посетовал на то, что нету логического ксора. Сыну восемнадцать, но он уже профессионал. И такие конструкции для него - кирпичики. Он над ними не думает. Повторюсь - это сродни английскому. Если ты его знаешь - ты думаешь "что написать". А если "со словарем" - то все силы уходят на "как правильно выразить мою, такую умную мысль" -
Си
igorle ответил Буратино тема в Программирование
Код в студию. Мы же программисты, и Си - наш язык. Компактный код - легче понять. Но этому надо научиться. Не зазорно не знать. Зазорно не желать знать. Цель не усложнить жизнь, и уж тем более не унизить Вас. Цель - заинтересовать Вас и тех, кто следит за этой веткой, узнать Си чуть поглубже. Прочуствовать его. Это как на машине. Сначала по прямой ехать трудно, а потом ты начинаешь чуствовать ее, и иногда можешь даже использовать занос с пользой. И начинаешь ездить свободно, и все внимание - только на дорожную ситуацию. Если после нашей дискуссии вы перестаните писать слово профессионал в кавычках - значит мы не зря потратили время :) -
Си
igorle ответил Буратино тема в Программирование
Все эти знания важны, чтобы во время программирования думать не о языке, а об алгоритме. Для этого надо говорить на языке свободно, а не со словарем. Тогда не будешь зависать над вопросами - чему равно (-3)%10 Чтобы лучше понять друг друга, попрошу Вас написать несколько строк кода. Есть три переменны типа int - a,b,c; В языке Си есть логические И и Или (&& ||), но нет логического XOR. Вам потребовалось сделать так, чтобы "с" была ксором от a и b. Как вы это напишите в Вашем проекте? -
Си
igorle ответил Буратино тема в Программирование
Все мы консервативны и держимся за свои привычки. Интересно наблюдать за человеком, который первый раз видит двойной восклицательный знак: int a, b; a = 27; b = !!a; Многие сначала офигевают, и спорят, что это невозможно понять. А через время смотришь - сами так писать начинают. Привыкли. Кстати, я проверял скомпилированный код для трех случаев: b = !!a; b = a ? 1 : 0; if (a) b = 1; else b = 0; Во всех трех случаях gcc дает одинаковый результат. -
Си
igorle ответил Буратино тема в Программирование
Да, это я сглупил. Дважды. Объявил восемь символов, а использовал только 4 (маска 0x3). Я хотел написать вот так: printf("\x1b[1D%c", "|/-\\|/-\\"[++idx & 0x7]); Но следовало так, как Вы говорите: printf("\x1b[1D%c", "|/-\\"[++idx & 0x3]); Массив не задан a[5]. Массив задан, например, a[10]. Здесь демонстрировалось, что a[5] и 5[a] дает одинаковый результат. Вопрос "зачем" здесь не логичен. Правильнее спрашивать - "почему". Понятно, что Кениган и Ритчи не говорили "а давай мы здесь впиндюрим такую фичу". Нет, но они говорили - смотри как изящно можно реализовать оператор квадратные скобки". И то, что теперь на Си конечный (машинный) код получается гораздо лучше, чем большинство могут написать на Ассемблере - заслуга изящества Си -
Си
igorle ответил Буратино тема в Программирование
2 ARV - Пробелы можно добавить вокруг & - [++idx & 0x3] Обычно взгляд автоматически парсит такие строки, но в общем - принимаю. Здесь пробелы не повредят. Сейчас поправлю. - Не надо жрать исходники. a[5] и 5[a] - не самоцель. Это демонстрация того как работает оператор [ ]. Если Вам это не интересно - то это нормальная позиция для ремесленника, но странная для творческого человека. Хотя знаете, мне сын доказывал, что привычка понимать суть - вредная привычка, так как мешает двигаться вперед быстро. Может быть Вы и правы. Работает - ну и хрен с ним. - Эта ветка не про то, как решить конкретную проблему, а про то, как работает Си. Поэтому демострации могут и должны быть утрированы. Типа - вложенных блоков с автоматической переменной с тем же именем. Так как наглядно демонстрирует область определения переменной. - Насчет "попытки возвыситься" - извините что доставил Вам неудобство. -
Си
igorle ответил Буратино тема в Программирование
Да, например, можно вызывать эту функцию внутри медленного цикла. Пользователь будет видеть, что процесс идет: static void fan(void) { static char idx; printf("\x1b[1D%c", "|/-\\|/-\\"[++idx & 0x3]); } Должно работать на стандартной консоли (не проверял, может быть ошибка в коде сдвига курсора на одну позицю влево) И это уже не демо, а реальный код. -
Си
igorle ответил Буратино тема в Программирование
Господа toweroff и ARV Вы путаете понимание языка и применение. Например, вы должны понимать как работает arr[5] должны так писать Вы должны понимать, как работает *(arr +5), но писать так должны только в некоторых, специальных случаях Вы никогда не должны писать такой код: int main(void) { int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int i; for (i = 0; i <10; i++) printf("%d ", i[arr]); printf("\n%d\n", 5[arr]); return 0; } Но неплохо бы понимать, как и почему это работает. Ну а если вы не поволяете людям объяснять как и почему работает 5[arr], мотивируя тем, что так писать нельзя, то я с вами не согласен. -
Олимпиада программистов
igorle ответил igorle тема в Программирование
Ничего удивительного. Когда я говорю "никто не смог", я имею ввиду - из России/Украины никто не смог решить. В целом - они в эту игру играют уже год. Список победителей за это время есть на их сайте. -
Си
igorle ответил Буратино тема в Программирование
Чтобы пример стал более наглядным, я предлагаю переписать его так: #include <stdio.h> int main(void) { int i=1; { int i=2; { int i=3; printf("%d\n", i); } printf("%d\n", i); } printf("%d\n", i); return 0; } 2 ARV - ну это же дается не как рабочий код, а как демонстрация того, как работает язык Си. -
Олимпиада программистов
igorle ответил igorle тема в Программирование
Я обещал не комментировать и никак иначе не помогать участникам. Так что, извините. Скажу только, что направление правильное, но пока что это не годится. Сплетнями поделться могу. Я спросил организаторов, как идут дела. Они сказали, что отказались от идеи предлагать удаленную работу программистам из России/Украины. Но от своих обязательств по олимпиаде не отказываются. И если кто сможет решить задачу, то премию получит. Пока никто не смог. -
Си
igorle ответил Буратино тема в Программирование
Это очень странный, и в моем понимании - неправильный код. На всякий случай проверил - как и ожидалось, компилятор обругал меня за повторную декларацию. В классическом Си все автоматические переменные должны декларироваться в начале блока. Некоторые диалекты Си и классический С++ позволяют объявлять переменные в любом месте. Но я считаю, что это плохая привычка. -
NTC терморезистор
igorle ответил addi тема в Схемотехника
Вот ключ к Вашему успеху: b = Ln(Rt1/ Rt0) / (1/T1 – 1/T0) b - Для Вашего термистора B57964S0202 равен 3560 T0 - температура 273+25 Rt0 - сопротивление при температуре T0 - 2000 Ом в Вашем случае T1 - текущая температура в Кельвинах Rt1 - сопротивление при текущей температуре Пользуясь этой формулой, вы можете выразить T1 через Rt1 или наоборот. Одна десятая градуса - это вы погорячились. У меня выход делителя Резистор - Термистор идет на ADC. Вместо того, чтобы считать экспоненту в коде, я просто храню таблицу значений, при температуре от нуля до 110 градусов (мой диапазон) с шагом один градус. И по этой таблице нахожу ближайшую температуру. Поэксперементируйте, убедитесь что вычисления совпадают с таблицей и с Вашими реальными измерениями. -
можно ли отлаживать код stm32f103 на stmf303?
igorle ответил igorle тема в ARM, 32bit
Спасибо огромное. Эта та самая страничка, о существовании которой я подозревал, но не мог найти. Мой путь несравнимо хуже. Я убил на него массу времени. А здесь все под рукой. -
можно ли отлаживать код stm32f103 на stmf303?
igorle ответил igorle тема в ARM, 32bit
Это то что я ищу. Мне не надо готовую ссылку. Меня поражает, что я не могу найти ее сам :( Я этим уже несколько дней занимаюсь :( Я не нашел кнопки "Design Resources". Есть слева замечательная панел "Resources", откуда я пытаюсь начать плясать. Можно вот отсюда показать, как дойти до библиотеки? Спасибо за терпение. Мне кажется, что я зашел в каждый список под каждой закладкой под Resources и искал слово periph. Не нашел библиотек :( СТОП! Нашел!!!! Стыдно, но оставлю здесь этот пост. Вдруг еще кому пригодится: Идем Sowtware -> STM32 Firmware (49) -> STM32F10x standard peripheral library Может это на сайте глюк? Помню что вчера под "STM32 Firmware" меньше айтемов было.... Или я вчера был слеп.... -
можно ли отлаживать код stm32f103 на stmf303?
igorle ответил igorle тема в ARM, 32bit
Понятно. Я как раз понял, что поскольку там 4 гига адрессного пространства, то они хорошо подумали и раскидали регистры так, чтобы потом не пришлось их двигать. И поэтому я понял что совместим именно код, причем скомпилированный... Видимо, мой недостаточный американский сказался. У меня в планах джентельменский набор начинающего эмбедера: - GPIO - ADC - PWM - USB as file system - USB as COM Все это я планирую использовать на 103-м. Судя по вашим ответам - лучше дождаться моих бордов и уже на них упражняться? Еще вопрос. Стыдно, но я не нашел на сайте st.com, где скачать последнюю версию StdPeriph_Lib. Вроде бы должна быть версия 3.5. -
можно ли отлаживать код stm32f103 на stmf303?
igorle опубликовал тема в ARM, 32bit
Я взялся за изучение STM32. Почитав теорию, развел небольшую пробную плату под stm32f103, отослал в производство и заказал детали. Плата прибудет через две-три недели. Пока упражняюсь с кодом. И вот тут засада. Я читал, что вся линейка кортексов совместима. То есть все, что написано для меньшего варианта, заработает и на большей версии. У меня есть stm32f3discovery. Если я пишу код для f303 - все работает. Если пишу для 103 и прожигаю в discovery - не бежит :( Вопрос - так должно быть, или я туплю? Достаточно ли инициализации, которую я делаю для 103-го, для того, чтобы использовать в 303-м функциональность 103-го. -
Си
igorle ответил Буратино тема в Программирование
У Вас все правильно. С остальными ораторами я не согласен. realloc - не нужен, так как Вам не нужны старые данные, и поведение реаллока отличается при недостатке памяти. А передача параметров по ссылке к Си отношения не имеет. -
Eagle и чистая земля.
igorle ответил igorle тема в В помощь начинающему
Я хочу отделить "чистую" землю от всей остальной земли. При этом я не хочу добавлять элемент "резистор 0 Ом". Результат представляю себе вот так: Точка G будет находиться в непосредственной близости от источника питания. -
Организация библиотек в Eagle
igorle ответил igorle тема в В помощь начинающему
Совет принят. Поменял на всем дизайне - результат понравился. А что для пинхедеров используете (как пины, так и розетки)? Я беру или pinhead, или con-lstX, Но там пады или длинные, или восьмиугольные.