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

inventor

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о inventor

  • Звание
    Знающий
    Знающий
  • День рождения 18.02.1969

Контакты

  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

5 376 просмотров профиля
  1. работал в НИИССУ, на первом этаже у них выставлены радиостанции что они производили/производят соседний отдел их разрабатывал, больше всего их страхи что "посадят на отечку" - т.е. на российскую эл. базу. правда ШРД - радиостанцию они уже 4 или 5 лет делают, уже бывший начальник отдела федусик умер сменилось несколько разработчиков, а всю допилить не могут
  2. нахрен нужны эти процессоры научитесь мосфеты делать, малошумящие операционники, свч транзисторы на сотню гигагерц ацп качественные... если контроллеры с процами хоть какие то производят аналоговая электроника вообще на зачаточном уровне
  3. спасиб, работает, 1-й бит и еще такой вопрос: как из загрузчика передать параметр в функцию main() прошивки? загрузчик живет по адресу 8000000h прошивка грузится по радио каналу во fram память - внешнюю микросхему она проверяется , контрольная сума и некоторые флаги и потом переписывается на внутреннюю flash с начального адреса 804A000h и на этот адрес передается управление если какие то проблемы и не прогрузилось - то управление возвращается после сброса по старому адресу 800a000 контроллер f4 - stm32l496 компилятор stm студия
  4. сделал загрузчик загрузчик всегда по адресу 0x80000000 основная прога всегда по адресу 0x800A000 дополнительная прошивка идет по радиоканалу и стуртует с адреса 0x804A000 прошивка пришется во fram память загрузчик при старте смотрит флаги: успешно ли переписалась, проверяет контрольную сумму и делает некооторые другие телодвижения выше писалось что после джампа должно быть так, как будто после старта процессора, то есть инициализация периферии и прочее я не стал делать HAL_DeInit() в загрузчике и ПЕРЕД jmp запускаю watchdog который должна сбросить новая прошивка - если что то пошло не так, то загрузчик после сброса проверяет флаги RCC->CSR и если был сброс по watchdog то он запускает основную прогу по первому адресу 0x8000A000 еще такие несколько вопросов 1) как в программе сделать так, чтобы она понимала что работает под отладкой? то есть чтобы при подсоединенном ST-link выполнялся вот этот кусок кода: /* Если вектор у нас перенесен в принципе это нужно только при работе с отладчиком */ __disable_irq(); SCB->VTOR = 0x8000000 + 0x4A000; __enable_irq(); а при обычной работе не выполнялся. 2 как сделать в линкерфайле константу FLASH_OFFSET, которая бы читалась и сишным файлом? FLASH_OFFSET = 0x4A000; /* Memories definition */ MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K FLASH (rx) : ORIGIN = 0x8000000 + FLASH_OFFSET, LENGTH = 0x40000 - FLASH_OFFSET }
  5. то есть в загрузчике сделать нечто подобное: /* Disable all interrupts */ RCC->CIR = 0x00000000; SCB->VTOR = APP_ADDRESS; __set_MSP(*(uint32_t *) APP_ADDRESS); __DMB(); (*((pfunc *) (APP_ADDRESS + 4))) ();
  6. хочу сделать загрузчик по адресу 0x800000 st32L496 пока загрузчик не написан т.о. сама прога должна быть с адреса 0x8000000 + 0x4000 Вопрос такой, где, в каком месте мне нужно перенести вектора, чтобы программа работала файл для линкера такой: _Min_Heap_Size = 0x8000; /* required amount of heap */ _Min_Stack_Size = 0x800; /* required amount of stack */ /* Memories definition */ MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K FLASH (rx) : ORIGIN = 0x8000000 + 0x4000, LENGTH = 0xFC000 /*1024K - 0x4000 */ } захожу в SystemInit() и ставлю SCB->VTOR = 0x8000000 + 0x4000; /* Vector Table Relocation in Internal FLASH */ если запускаю из студии - все работает, если просто включением питания, то нет где я что то сделал неверно или не дописал? чую что этот SCB->VTOR должен быть где то в стартовом ассемблерной файле после назначения адреса стека и перед прыжком на SystemInit.
  7. такой теоретический вопрос. можно ли контроллеры типа STM32 поместить в многопроцессорную систему, или в многоконролерную. чтобы у них была общая память. dram или sram и вобще, как это все работает. может поделиться?
  8. Добрый день, вот такая проблема. есть радиомодем и передатчик, которые делает российская контора SPUTNIX нам нужно написать свою прогу для управления по этому радиоканалу. задача такая, есть CAN - адрес отправителя, получателя, данные и размер нужно как то сопоставить передачу по компорту, которая содержит эти параметры в своем пакете есть какие то настроечные параметры CAN, как скорость, длительность сегментов и прочее которые так же могут передаваться в Com пакете. правая коробка определяется как обычный виртуальный com порт, с ней идет их прога, называемая Хьюстон что то она пересылает в правую коробку, но сопоставить что идет в портовом пакете и как это соответсвует передаче CAN мы не знаем, может кто то работал с передатчиками от SPUTNIX и знает их внутренних формат или просто подскажет где копать. Спасибо.
  9. очень забавная ситуация, есть 2 проекта для двух процов: 432 и 496 студия одна и таже, есть функция записи в spi которая выглядит в 496 так: u8 spi1_write_read(u8 w) { u8 read, write = w; HAL_SPI_TransmitReceive(&hspi1, (u8 *) & write, (u8 *) &read, 1, 100); return read; } в 496 работает, в 432 вылетает в хардфолт если исправляю так: то все работает u8 spi1_write_read(u8 w) { u32 read, write = w; HAL_SPI_TransmitReceive(&hspi1, (u8 *) & write, (u8 *) &read, 1, 100); return read; } почему такое странное поведение?
  10. такая проблема, квыряюсь с этим модулем уже пару дней, работает и компас и акселерометр, меняются показания, можно определить и магнитные поля а акселерометром как плату накренил а с гироскопом какая то беда, разные настройки пробую, и как плату не кручу - показания не меняются. И lsm - овский модуль использовал и свой написал , НИЧЕГО... может есть какой то трюк работы с ним, что я не знаю. подскажите?
  11. В понедельник попробую. В принципе можно сделать фоэункцию Задачную и для работы без оси. Тока мне вот и надо определить когда ось считается запущенной.
  12. ок, вопрос по пробую по другому, не косноязычно. ось выставляет задачи на исполнение, с 1-й по 10-ю ДО момента когда они начинают крутится все вместе в бесконечном цикле, можно использовать семафоры или не?
  13. словил такой баг, который валивает прогу в хардфолт есть несколько задач и при своем старте они пишут сообщения: Я задача номер ... функция печати реализована т.о.: void log_printf(const char *tag, const char *msg, ...) { xSemaphoreTake(log_mtx, portMAX_DELAY); va_list list; /* Got time and str time &date */ rtc_get_str_time(str_arr); xputs(str_arr); xputs(tag); /* Copy tag */ xputs(": "); va_start(list, msg); xvfprintf(uart_putc, msg, list); va_end(list); xSemaphoreGive(log_mtx); } а любая задача например стартует так: void StartHearbeatTask(void const * argument) { static const char *tag = "Hearbeat"; log_printf(tag,"START\r\n"); Heatbeat_task(); } Заметил такую вещь, если скорость порта будет очень низкая или в функции печати что то долгое, то происходит вот что, предположим стартуют 10 задач, первая задача написала: Я задача номер 1 вторая: я-задача номер 2 третья: я зада.... потом пытается четвертая - и вылет в хардфолт насколько я понял, при начальном старте задача берет семафор печатает, но не успевает это доделать, на исполнение ставится другая задача, которая никогда семафора не дождется. Когда Ось запущена, то все хорошо работает , вне зависимости от времени занятия этих семафоров, проблема при старте оси, вот как это можно избежать
  14. Российские то же самое делают и предлагают или скорость или высоту.
  15. не пойдет. просто может кто с прошивками этих модулей возился и знает как это устранить
×
×
  • Создать...