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

    

Михась

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о Михась

  • Звание
    Частый гость
  1. Кстати, может даже лучше. Если в неподходящий момент датчик гавкнет, продиагностировать и заменить будет легко, не надо будет разбираться с адресами. В помирании без видимых причин эти датчики замечены.
  2. Есть проблемы с конверсией видимо, при этом CRC совпадает, но температура будет считана +85С.
  3. Ну и по опыту. Делали десяток датчиков на сотне метров витой пары. Питание паразитное, никаких конденсаторов. 1. Посмотреть осциллографом на фронты и выбрать подтягивающий резистор, обеспечивающий фронты. 2. Температуру считывать несколько раз и если несколько отсчетов совпадут, принимаем решение.
  4. STM32H7 работа с SDRAM. Проблема

    Онлайн - в процессе работы изделия, например раз в минуту. По идее если прибор год без отключения работает, тестировать только после включения - маловато будет.
  5. STM32H7 работа с SDRAM. Проблема

    Да какие обиды. А возможно создание онлайн-теста озу с сложной диагностикой? В свое время искал, но удобоваримого не нашел. До перехода в __main() то понятно. Внутренний дефект ОЗУ в однокристалках достоверно был один раз - 1816ВЕ51. Больше честно сказать не попадалось, но все равно простой тест озу использую.
  6. STM32H7 работа с SDRAM. Проблема

    Да, это простой тест в основном для встроенного ОЗУ. Но может кому пригодится.
  7. STM32H7 работа с SDRAM. Проблема

    Использую такую функцию для он-лайн тестирования ОЗУ /******************************************************************************* * Функции проверки RAM Parameter: Return: счетчик сбойных слов 32b в RAM Пример resTestRAM = sram_test(0x20000000, 0x20000); *******************************************************************************/ #define PATTERN1 0xAAAAAAAA #define PATTERN2 0x55555555 #define PATTERN3 0x00000000 #define PATTERN4 0xFFFFFFFF #pragma push #pragma O0 #pragma Otime uint32_t sram_test(uint32_t startaddress, uint32_t sizeRAM) { uint32_t *base_address = (uint32_t *)(startaddress); register uint32_t temp_val; register uint32_t i = 0, sram_nowrite_count = 0; __disable_irq(); for(i = 0; i < (sizeRAM/4); i++) { temp_val = *base_address; *base_address = PATTERN1; if(*base_address != PATTERN1) { sram_nowrite_count++; } *base_address = PATTERN2; if(*base_address != PATTERN2) { sram_nowrite_count++; } *base_address = PATTERN3; if(*base_address != PATTERN3) { sram_nowrite_count++; } *base_address = PATTERN4; if(*base_address != PATTERN4) { sram_nowrite_count++; } *base_address = temp_val; base_address++; } __enable_irq(); return (sram_nowrite_count / 2); } #pragma pop
  8. https://electronix.ru/forum/index.php?showt...=147712&hl= Просто я смотрю есть огромный спрос на такие системы. Кто-бы взялся.
  9. Это не вы писали в этой теме под ником Вениамин Иосифович? http://iprog.pp.ru/forum/read.php?f=1&...t=74671&v=f
  10. Не мотайте так камерой ради бога, начинает тошнить.
  11. Непонятный рестарт программы

    Есть полезная функция в Кейле http://www.keil.com/support/man/docs/armcc...59124940593.htm 7.136 --protect_stack, --no_protect_stack Inserts a guard variable onto the stack frame for each vulnerable function. The guard variable is inserted between any buffers and the return address entry. A function is considered vulnerable if it contains a vulnerable array. A vulnerable array is one that has: Automatic storage duration. A character type (char or wchar_t). In addition to inserting the guard variable and check, the compiler also moves vulnerable arrays to the top of the stack, immediately preceding the guard variable. The compiler stores a copy of the guard variable's value at another location, and uses the copy to check that the guard has not been overwritten, indicating a buffer overflow. /******************************************************************************* * Функции проверки переполнения стека Parameter: none Return: КЛЮЧ КОМПИЛЯТОРА --protect_stack *******************************************************************************/ void * __stack_chk_guard = (void *)(0xDEADBEEF); // initialize guard variable // Called by stack checking code if guard variable is corrupted void __stack_chk_fail(void) { // переполнение стека } // тестер void teststack(void) { char buf[4]; strcpy(buf, "123456"); // больше размера буфера }
  12. Представил, что вы уволились с предприятия после установки такой системы. Слава богу, такой подход по автоматизации я знаю только на одном предприятии.
  13. Симулятор

    За 20 лет не протер ни одного чипа. Спалил одну AVR и один STM32F373 по невнимательности. Вычислительные алгоритмы отлаживаю в симуляторе. Боевые проекты - с внутрисхемной отладкой. Доступ к памяти и оперативная модификация регистров периферии позволяют не перекомпилировать и перешивать код, а непосредственно управлять из отладчика.