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

gindul

Members
  • Постов

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

  • Посещение

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    микроконтроллеры

Достижения gindul

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

3

Репутация

  1. Вы предлагаете разные прошивки для разных целей. А я говорю об одной прошивке на все устройства, но настраивать вид устройства при установке у заказчика. Установку устройства проводят не программисты, а прошивку не роздают направо и налево В динамической выделении памяти нет ничего плохого, но я соглашусь с тем что это надо использовать ее в последнюю очередь. Иногда проделывают и такое: выделяют большой статический масив, и по мере необходимости используют из него куски как динамическую память. Это позволяет узнать во время компиляции сколько память у тебя есть свободной, а работать как с динамической
  2. К сожалению NDA не позволяет мне этого сделать, но скажу я вам что у нас несколько тысяч устройств (ПРОМ-устройства) на STM32 в которых используется HAL, все прекрасно работает. У нас обмен данными по UART-у на 1 мегабит (921600) с использованием DMA, пакеты разного размера (до 4096 байт). В это время активно используются еще парочку интерфейсов (I2C, пару UART-ов на 115200, интерфейс для ЖК дисплея, ...). Как вы думайте это серъезно? По важей логике мы должны написать прошивку на чистом ASM-е и для ARM-ов из серии A8-A9 (в том числе и для вашего телефона, так как внутри у него именно такой) ? Дело ваше, но я-бы рекомендовал бы вам не програмировать для арм-ов, лучше вам взять AVR-ки, или MSP-шки...
  3. Бывают случаю когда на одном и том-же железе могут быть две и более софтовых конфигураций (для примера по настройкам из еепром-а). Для примера: у вас есть 2 порта (UART, или SPI, или ...), и 3 возможных датчика которые могут подключатся к этим портам, и для каждого варианта подключения у вас будет разная конфигурация (скажем для настройки под заказчик). Но соглашусь с вами, что в контроллерах редко используют динамически выделенную память, так как ее в любой момент может не хватить а это может привести к непредсказуемым последствиям.
  4. Скажу вам как разработчик устройств в том числе и на STM32 (программист). На HAL в основном ругаются ардуинщики/AVR-щики - раньше они писали сразу в регистры, а сейчас хотят сохранить старые привычки. Но дело в том что у тех-же AVR-ов было только пару десятков регистров, скромная по функционалу периферия, мало памяти - которую надо было экономить. А сейчас посмотрите на ARM-овские контроллеры (не только на STM32) - у них память в разы больше (и SRAM, и Flash), а регистров и режимов столько что черт ногу сломит. Для чего учить/делать то что уже сделано для нас?! Никто не запрещает по извращатся и написать свой HAL или SPL, но будьте готовы потратить на это много часов (в долгой отладке и чтению мануалов к процессоры, к архитектуре и к разным блокам). А еще производители могу встроить в процессор сторонний USB stack (для примера), а описание регистров итд они укажут что находятся в документации того стороннего производителя, и не знаю как вы, но я не готов тратить часы или дни на это муторное дело. Еще другое - если вы (как и я) работаете в большой фирме, то в один день придет необходимость перейти на другой STM32 (по дешевле, по мощнее, или с ногами по больше), если вы используете HAL, то вы просто поменяете в IDE один процессор на другой (и возможное вызов пару функции на вызов других пару функции, если контроллеры сильно отличаются) и на этом все. А представьте себе такой переход без HAL-а, где 80% регистров нужно будет поменять на другие, еще %10 регистров добавить, а у некоторых поменяется поведение. Меня не очень радует такая перспектива... Если вы не делаете мега-контроллеры которые должны работать мега-быстро то можете смело использовать HAL/SPL/свой хал. Да и другом случае, сейчас легче и дешевле купить контроллер который работает на частоту повыше, чем оптимизировать все до процессорного такта. Задумайтесь о другом - почему сейчас программы для Windows/Linux/Embedded Linux (ака домашний wi-fi роутер) не пишут на ассемблере, ведь они будут работать быстрее?!
  5. Вы делаете объект (экземпляр) структуры в функцию main, т.е. в стэк-е, а после адрес этой структуры присваиваете глобальному указателю. После выхода из функции (или переключение контекста, если у вас ОСРВ = переключение стэка) этот объект стирается, и у вас в глобальной структуре (Register) висячий указатель. Если хотите исправить это, либо сделайте в структуре Register не указатель "Button* ModeButton;", а структуру "Button ModeButton;", и инициализацию делайте как "Register.ModeButton.GPIOx = GPIOA;" ... Второй вариант это оставить ModeButton как указатель, а в функции инициализации выделить Button через malloc/calloc/.. присвоить все необходимые поля этому указателю, а его адрес записать в структуру Register.ModeButton (и по окончанию работы с этим полем освободить память). Для примера: void init_buttons(void) { Button *ModeButton = malloc(sizeof(Button)); ModeButton->GPIOx = GPIOA; ModeButton->GPIO_Pin = GPIO_Pin_0; ModeButton->ttl = 0x00; ModeButton->isPressed = RESET; ... Register->ModeButton = ModeButton; } void deinit_buttons(void) { free(Register->ModeButton); }
×
×
  • Создать...