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

LiVit

Members
  • Постов

    170
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные LiVit

  1. 22 минуты назад, Nilas сказал:

    Убрал static и без extern-а стало все работать.

    т.е., вы не знаете, зачем применяется static?
    Зачем вы его вообще используете, если не знаете смысла? Тупо копипастите?

    Рекомендую определять новый тип:

    typedef union{ 
        uint16_t nast_byte[DATA_SIZE];
        struct {
            int16_t data1;
            int16_t data2;
        }struc;
    }MyDataType;

    Тогда в программе можете объявить любое количество переменных типа MyDataType и обращаться к этим переменным как к union. Более того, вы сможете присваивать их значения друг другу:

    	MyDataType a = {0}, b = {0};
    	
    	a.struc.data1 = 1;
    	a.nast_byte[1] = 2;
    	
    	b = a;

     

  2. Всё смешалось - люди, кони... При чем здесь куб и кейл? На кайле пишут не только для ST-мок. И ужас-ужас, для каких нибудь китайских армов нет куба. И ведь пишут без проблем. 

    Ребятки, уровень вхождения в программирование армов очень высокий. Это не ранние пики и аврки. Там пару строчек из мануала прочёл и программу-моргалку написал и запустил на раз-два. 

    Если вам для какой-нибудь ерунды - юзайте ардуину. 

    Если собрались профессионально работать - осваивайте профессиональные инструменты. Кайло запустить не сложно, было бы желание. 

  3. 6 часов назад, Dr. West сказал:

    Цанговые панели вообще не подойдут.

    Наоборот - только на цанговые и надежда. Обломать весь пластик и впаять только пины.
    Если постараться - будет красиво

  4. 22 часа назад, MechanicV сказал:

    думаю наколдовать вроде как универсальной  функции для обработки структур

    Правильно. Так и надо делать.
    Потом эту штуку из проекта в проект таскать и все. Просто по месту допиливая

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

    20 часов назад, ChePay сказал:

    Ведь и экраны могут быть разными. И клавиатура может быть по разному реализована.

    Ну и что? Основная обработка должна быть одинаковой.
    А драйвер для клавиатуры можно допилить для конкретного устройства, как и драйвер дисплея.
    У меня примерно одинаковая логика обработки как для графического монохромного дисплея, так и для символьных дисплеев.
    Конечно, есть отличия. На символьном дисплее с графикой очень туго))). Инверсию не сделаешь и ограничен набор символов.

  5. 11 часов назад, Ион Добрев сказал:

    Я на верном пути.

    Есть русская пословица - терпение и труд всё перетрут. Будете стараться - всё получится.

    [MNU_VAR_8].MaxVal = 500,

    Означает, что полю MaxVal структуры номер MNU_VAR_8 данного массива присваиваем значение 500.
    Вы уже знаете что такое энумератор enum?
    Каждая запись превращается компилятором в число.
    Начинается всё с нуля. Таким образом MNU_VAR_1 компилятором превращается в 0, MNU_VAR_2  в 1 и так далее.
    enum используется только для удобства человека. Рекомендуется присваивать какие-то осмысленные имена.

    typedef enum{

    Это объявление типа данных enum. Можно без typedef. Но мне так привычнее - это чисто мои заморочки.

    Ион, вам надо хорошенько изучить книгу «Язык программирования Си» — Брайана Кернигана и Денниса Ритчи. Там всё разжёвано.

  6. 13 часов назад, Катеринка сказал:

    С установкой диода я не прогадала.

    Наоборот.
    Без него была бы настоящая пушка!
    Бахнуло бы от души.

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

    А почему вы без лампочки решили включить? Не нашли?
    Вместо нее можно использовать утюг, плойку наконец.

  7. Если  у @Ион Добрев  есть программистское мышление, желание и деньги, я могу помочь с пониманием и структур и указателей. Но это - в раздел "работа".
    А разным умникам - помогите ему бесплатно, если хотите.
    Почему-то никто из вас не привел свой код для меню.
    Почему, интересно?

    Решил потратить своё время и привести пример организации структуры меню в моих проектах, может кому пригодится:

    Спойлер

    Вот пример описания переменной:

    typedef struct{
    	uint8_t*		Hdr;	//header text
    	uint8_t*		Clue;	//the clue for the user (leading text)
    	uint8_t*		Trail;	//trailing text
    	uint32_t		MaxVal;	//max value of the variable
    	uint32_t		MinVal;	//min value of the variable
    	uint32_t		DefVal;	//default value
    	uint32_t		Stp;	//step of the inc/dec
    	uint32_t*		VarPtr;	//pointer to the variable
    }HmiVarDesc;

    Пусть у нас 8 переменных (масштабируемо. хоть миллион, лишь бы FLASH памяти хватило)

    Объявим энумератор с перечислением переменных

    //sequence of menu items:
    typedef enum{
    	MNU_VAR_1,			//variable 1
    	MNU_VAR_2,			//variable 2
    	MNU_VAR_3,			//variable 3
    	MNU_VAR_4,			//variable 4
    	MNU_VAR_5,			//variable 5
    	MNU_VAR_6,			//variable 6
    	MNU_VAR_7,			//variable 7
    	MNU_VAR_8,			//variable 8
    ////	
    	MNU_VAR__NUM			//number of the variables
    }VarList_t;		//

    Теперь нам нужна область RAM, где мы будем хранить наши переменные

    uint32_t	var_array[MNU_VAR__NUM] = {0};

    А теперь таблица с описанием каждой переменной

    const HmiVarDesc[MNU_VAR__NUM] = {
    	[MNU_VAR_1].Hdr = "Variable #1",
    	[MNU_VAR_1].Clue = "Frequency: ",
    	[MNU_VAR_1].Trail = "MHz",
    	[MNU_VAR_1].MaxVal = 500,
    	[MNU_VAR_1].MinVal = 400,
    	[MNU_VAR_1].DefVal = 450,
    	[MNU_VAR_1].Stp = 2,
    	[MNU_VAR_1].VarPtr = &var_array[MNU_VAR_1],
    
    	[MNU_VAR_2].Hdr = "Variable #2",
    	[MNU_VAR_2].Trail = "MHz",
    	[MNU_VAR_2].MaxVal = 500,
    	[MNU_VAR_2].MinVal = 400,
    	[MNU_VAR_2].DefVal = 450,
    	[MNU_VAR_2].Stp = 2,
    	[MNU_VAR_2].VarPtr = &var_array[MNU_VAR_2],
    
    	[MNU_VAR_3].Hdr = "Variable #3",
    	[MNU_VAR_3].Trail = "MHz",
    	[MNU_VAR_3].MaxVal = 500,
    	[MNU_VAR_3].MinVal = 400,
    	[MNU_VAR_3].DefVal = 450,
    	[MNU_VAR_3].Stp = 2,
    	[MNU_VAR_3].VarPtr = &var_array[MNU_VAR_3],
    
    	[MNU_VAR_4].Hdr = "Variable #4",
    	[MNU_VAR_4].Trail = "MHz",
    	[MNU_VAR_4].MaxVal = 500,
    	[MNU_VAR_4].MinVal = 400,
    	[MNU_VAR_4].DefVal = 450,
    	[MNU_VAR_4].Stp = 2,
    	[MNU_VAR_4].VarPtr = &var_array[MNU_VAR_4],
    
    	[MNU_VAR_5].Hdr = "Variable #5",
    	[MNU_VAR_5].Trail = "MHz",
    	[MNU_VAR_5].MaxVal = 500,
    	[MNU_VAR_5].MinVal = 400,
    	[MNU_VAR_5].DefVal = 450,
    	[MNU_VAR_5].Stp = 2,
    	[MNU_VAR_5].VarPtr = &var_array[MNU_VAR_5],
    
    	[MNU_VAR_6].Hdr = "Variable #6",
    	[MNU_VAR_6].Trail = "MHz",
    	[MNU_VAR_6].MaxVal = 500,
    	[MNU_VAR_6].MinVal = 400,
    	[MNU_VAR_6].DefVal = 450,
    	[MNU_VAR_6].Stp = 2,
    	[MNU_VAR_6].VarPtr = &var_array[MNU_VAR_6],
    
    	[MNU_VAR_7].Hdr = "Variable #7",
    	[MNU_VAR_7].Trail = "MHz",
    	[MNU_VAR_7].MaxVal = 500,
    	[MNU_VAR_7].MinVal = 400,
    	[MNU_VAR_7].DefVal = 450,
    	[MNU_VAR_7].Stp = 2,
    	[MNU_VAR_7].VarPtr = &var_array[MNU_VAR_7],
    
    	[MNU_VAR_8].Hdr = "Variable #8",
    	[MNU_VAR_8].Clue = "Weight: ",
    	[MNU_VAR_8].Trail = "kg",
    	[MNU_VAR_8].MaxVal = 500,
    	[MNU_VAR_8].MinVal = 400,
    	[MNU_VAR_8].DefVal = 450,
    	[MNU_VAR_8].Stp = 2,
    	[MNU_VAR_8].VarPtr = &var_array[MNU_VAR_8],
    
    };

    Всё. Переменные описаны. Теперь пишем процедуру, которая будет обрабатывать нажатие клавиш и соответствующе увеличивать/уменьшать значение переменной, отображать на экране, сохранять результат и переходить к следующей переменной.

    Это самый эффективный способ. И самое главное - легко масштабируемый. Сегодня тебе нужно 8 переменных, а завтра заказчику понадобилось 128. Просто редактируем энумератор и таблицу описания переменных, а основная программа не меняется.
     

    Если есть способ более эффективный - с удовольствием об этом почитаю.

    12 часов назад, MechanicV сказал:

    да нет у этого долбача не какого проекта, так попку мучает. 

    Это вы про кого? И что дает вам уверенность это утверждать?

  8. Причём здесь пафос? 

    У меня проект как раз со структурами и указателями, которые ему недоступны. 

    Мне что, вместо него программу писать? 

    ТС видимо начинающий. Ему в соответствующий раздел нужно. 

    Либо в раздел "работа".

  9. Преимущество по сравнению с чем?
    Вообще, разговор беспредметный. Аморфный.

    Какая структура меню? Сколько настроек?

    У меня например, 20 настроек.
    Для каждой уставки есть минимальное значение, максимальное, шаг приращения, дефолтное значение, адрес в памяти куда надо сохранять.
    Есть имя настройки (текстовая подсказка, чего именно настраиваем), префикс и суффикс (кг, МГц, сек...). Причем на нескольких языках.
    Вы без структур и указателей как себе такое меню представляете? Switch-case? Это трэш, угар и содомия.

  10. Почитал ваше сообщение.
    Всё как-то аморфно.
    В чем проблема-то?
    Не умеете работать с указателями, со структурами, или с указателями на структуры?
    Сколько пунктов меню, какой дисплей?
    Как тут говорят - "экстрасенсы в отпуске", что у вас в голове - никто не знает.

  11. В 04.08.2022 в 15:35, blackflash2007 сказал:

    Согласен дали  админ права а вот антифлуд не дали . Как в анекдоте 

    "- Вы стоите на самой низшей ступени развития, — перекричал Филипп Филиппович, — вы еще только формирующееся, слабое в умственном отношении существо, все ваши поступки чисто звериные, и вы в присутствии двух людей с университетским образованием позволяете себе с развязностью совершенно невыносимой подавать какие-то советы космического масштаба и космической же глупости..." (c) М.Булгаков, "Собачье сердце"

    Извините, вырвалось....

  12. 1 час назад, DedLogoped сказал:

    @_abk_ и @LiVit, поверьте на слово - у меня светодиоды 0805, одни куплены на алиэкспресс, два других цвета куплены на Митинском, у всех зелёная полоска - анод!

    Стоп-стоп-стоп, уважаемый!
    Вы путаете мягкое с тёплым.
    Полоска на торце указывает минус.
    А у вас на фотке полоска снизу. Если видим "Т" снизу, то надо смотреть даташит, но скорее всего "пипка" показывает на минус.
    На фотке ТС-а вы не можете видеть низ, только торец.
    Да и странно это - ориентироваться по знакам снизу светодиода, которые после монтажа просто так не увидишь.

    На моей фотке - два одинаковых светодиода, катод у обоих слева.

    image.png.a35e569f8f7f531d7a85d0f043ddecb0.png

    Был у нас случай, монтажник напаял светодиодов, ориентируясь по знакам снизу... Перепаивал.

  13. 48 минут назад, SuperЛёха сказал:

    Странно, что этот мусор находится в RAM после передёргивания питания, ведь по сути после подачи питания происходит тот же самый аппаратный сброс. 

    Как-раз ничего странного.
    Возьмите за правило объявлять буфер как-то так: uint16_t buf[100] = {0}; и он автоматом заполнится нулями.

  14. 21 час назад, oleg Hellert сказал:

    Я вижу вас задело ,хотя на "наиглупейший"вопрос "какова сила тока в резетке " возможен простой и по-моему не глупый ответ.Сила тока в бытовой розетка ограничена предохранителем ....

    В розетке тока нет. Там напряжение.
    Ток в нагрузке.
    Не надо быть семи пядей во лбу, чтобы это знать.
    Школьный курс. I=U/R
    Нет R - нет I

    21 час назад, BARS_ сказал:

    А измерить сможете?

    Да чо там мерить-то? Выставляем на мультиметре измерение тока (переменного конечно, мы ведь не дураки какие-нибудь!) и суём в розетку.

  15. 18 минут назад, Огонёк сказал:

    Для каких практических задач может понадобиться отодвинуть стек ближе к началу адресного пространства?

    Если некоторые процедуры и функции (в том числе обработчики прерывания) используют стек.

    Например, у вас адское количество локальных переменных в теле функции. Или буфер локальный. Если стек маленький, то места не хватит

  16. 16 минут назад, oleg Hellert сказал:

    Нет глупых вопросов,есть только глупые ответы.

    Пфффф. 

    Вот глупый вопрос: "сколько тока в электрической розетке? "

    Давайте я вам переведу дискуссию на более бытовой язык:

    Вы: "Мне надо две детальки разъединить, чем мне их раскрутить? "

    У вас спрашивают:

    "А головка у винта какая? Под прямой шлиц, под крест, под шестигранник, торкс, звездочку, или что-то другое? А резьба у вас левая или правая? "

    А вы : "да я не разбираюсь! Что вы за люди такие, на простой вопрос ответить не можете! "

    А потом выяснится, что детальки склеенные или на заклепке.... 

  17. 15 минут назад, rebuk сказал:

    Бывает и так, что за день по 2 и 3 раза переделываю в творческом угаре.

    Это говорит о непродуманности схемы и непрофессиональном подходе. 

    А для отладки можно применять какую-нибудь универсальную отладочную плату. Продумать её, заказать со сборкой в Китае и забыть как страшный сон хлорное железо, ванночки, ЛУТ... 

  18. В 2006 году делал двустороннюю плату размером чуть меньше А4. Это было обусловлено тем, что она была нужна одна и стоимость изготовления в Резоните была слишком высокой. 

    Сейчас 2022. Заказать в Китае и со сборкой (!) стоит копейки. Какой смысл в этих нечеловеческих мучениях? Да ещё и плата выглядит уродливо - без маски и шелкографии. 

  19. 9 часов назад, korsaj сказал:

    А что вы гадаете на кофейной гуще, у вас есть исходник в нем и смотрите

    Судя по тому, что камрады тут выкладывают, там такой лютый говнокод, что мне жалко глаза - вытекут. 

  20. 100 110 100 110 0 01100111 - красный
    100 110 100 110 0 10011001 - зеленый
    Обратите внимание на тройки чисел. То что выделено жирным - выглядит логично. Последовательность 100 кодирует логический 0, а последовательность 110 - логическую единицу
    Потом последовательность разваливается (я ориентировался на ваши нули и единицы, не анализировал осциллограмму)
    Посмотрите, может быть ваша запись неверна. Потому что первые четыре бита однозначно расшифровываются как 0101 (или 1010 если в инверсии)

    И посмотрите уже, как подобное реализовано в пультах управления - там явно что-то похожее

    UPD.
    Не, всё-равно какая-то фигня получается....
    Единственное, что логично в ваших осциллограммах, так это то, что обе посылки примерно одинаковые по длительности

     

    Слушайте, а какую последовательность машинка назад передает, чтобы в нее не врезались?

    UPD. 2
    То что выделено жирным - это стартовая последовательность.
    Подчеркнутый нолик - разделитель
    Дальше идут 8 бит. Красный - 67h зеленый - 99h
    Только если так рассудить.
     

  21. Не рекламы ради, а информации для.

    Китайцы предлагают вот это. Как по мне, у @mefi73 более удачная конструкция ДРВ.

    Если бы ещё и вынимать винт можно было-бы одним движением, а не выкручиванием...

  22. 43 минуты назад, Андрей Гараж сказал:

    Не пойму. Со светофора приходит 6 бит, а по коду считываться должно 8. Осциллограмму снимал и с ИК-передатчика светофора.

    А с чего вы решили, что это 6 бит? Это вообще не очевидно, как по мне. Я вижу 6 импульсов разной ширины.
    Вполне возможно, что некоторые импульсы содержат две единицы, а равно как и промежутки между импульсами могут содержать два нуля.

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

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