Jump to content

    

TOG

Участник*
  • Content Count

    341
  • Joined

  • Last visited

Community Reputation

0 Обычный

About TOG

  • Rank
    Местный

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

2808 profile views
  1. Я пробовал много разных вариантов. Компилятор умеет обходить эту таблицу куда бы я ее не разместил, ну в самое начало 0x08000000 я ее понятно не ставил. Получается идет код, потом таблица, потом продолжение кода. Я где-то тут встречал тему, где обсуждалось, что дескать плохо если инициализированные переменные оказались ниже самой программы. Но почему это "плохо" я не понял. Там все куда более странно. Hard Fault возникает при чтении инициализированного массива(глобальная переменная). Читаю из функции. uint8_t dat[] = {1,2,3,4,5,6,7,8,9}; // глобальная переменная SimpleFunc(dat, 4, sig); void SimpleFunc(uint8_t* Buf1, signed int Vector1, uint32_t* Sig) { ... Dat2 = Buf1[Vector1 - 1]; // Тут возникает Hard Fault. Если эту строку закомментировать, то Hard Fault возникает дальше на строке if (Vector1 != 1) // тут тоже может возникнуть Hard Fault
  2. Друзья, имеется микроконтроллер STM32L051. Размер встроенного флэша у данного МК 64 кБ. нужно разместить во внутренней флэш памяти большой массив данных - 16 кБ. Я размещаю этот массив ближе к началу флэш памяти, а именно по смещению 2кБ от начала, пробовал и в конце флэш памяти размещать. У меня такое чувство, что я что-то делаю не так. Хотя компилятор ошибок не выдает и все вроде работает, но периодически возникают какие-то чертовски странные сбои - программа может буквально на ровном месте улететь в Hard Fault. #define PageSize 128 #define zDATA_addr 0x08000000 + 16 * PageSize static const uint8_t zDATA[] __attribute__((at(zDATA_addr)))= { 0x40, 0x32, 0xD2, 0x60, 0xF9, 0x23, 0x71, 0x11, 0x06, 0x6E, 0x75, 0x86, 0x3F, 0x7C, 0x76, 0x77, 0x98, 0x03, 0x74, 0x77, 0x37, 0x44, 0x5C, 0x12, 0x23, 0xC4, 0xA3, 0x1B, 0x15, 0x5B, 0x48, 0x35, 0x4B, 0x27, 0xDB, 0x63, 0xA1, 0x73, 0x34, 0x5A, 0x92, 0x39, 0x64, 0x34, 0x23, 0x21, 0x5E, 0x4E, 0x90, 0x91, 0x3A, 0x3C, 0x13, 0x78, 0xAB, 0x06, 0xDF, 0x3B, 0x68, 0x14, 0x65, 0x26, 0x53, 0x42, // 1000 строк по 16 байт... 0x50, 0x51, 0x6A, 0x2C, 0x33, 0x58, 0x6B, 0x76, 0xD3, 0x4B, 0x68, 0x74, 0x75, 0x36, 0x72, 0x30};
  3. Понял, у меня в настройках была галочка "Verify code download" и Keil проверял целостность программы во флеше.
  4. Друзья не могу понять, записываю программу в микроконтроллер STM32L051K8, далее программа стирает одну из последних страниц флэш памяти в которой расположен массив данных и после этого я не могу подключиться в Keil в режиме отладки, выдает "Cannot access target". Через ST-Link Utility все подключается, видно, что страница стерта, но через отладчик Keil подключиться невозможно, только прошивать по новой и после прогона программы опять получаем "Cannot access target". static FLASH_EraseInitTypeDef EraseInitStruct; uint32_t PAGEError = 0; HAL_FLASH_Unlock(); // разлочиваем EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.PageAddress = 0x08008000; // адрес с которого стирать EraseInitStruct.NbPages = 1; // одну страницу 128 байт HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError); // стираем HAL_FLASH_Lock(); // закрываем
  5. Верно, но трассировать в мусорном коде это тот еще гемор.
  6. да, но этот код будет невозможно анализировать , я уж не говорю про его декомпиляцию в нечто си-подобное. Насколько я помню Exe-cryptor перемешивает машинный код с "мусорным" кодом, заменяет стандартные конструкции создаваемые компилятором на свои (очень сильно замороченные). И если в таком коде будет проверка серийного номера микроконтроллера, то ее найти будет очень не просто. Тоже вариант. Только отправив на тот свет пару девайсов, китайцы наверняка сообразят, что нельзя отсоединять батарейку.
  7. Друзья, давным давно в журнале КиТ видел статью про ручной установщик smd микросхем, совсем простой и соответственно не дорогой. Сейчас по запросу "pick and place" вижу только автоматические установщики. Может кто знает где посмотреть ручной установщик.
  8. Не моем ультразвуком. Уже знаем что при УЗ мойке именно этих чипов кол-во отказов в разы возрастает.
  9. Друзья, я так понимаю, что китайцы с легкостью вскрывают прошивки практически любых микроконтроллеров. Есть ли средства для защиты от дизассемблирования памяти программ ? Вот для windows, была (или есть) такая штука ExeCryptor, превращающая машинный код в адское месиво не пригодное для анализа.
  10. Крутой каталог ! Жаль под наш корпус у них нет сокета
  11. Нам бы какой нибудь сокет на испытательную плату установить, в сокет кладётся испытуемый чип и прижимается к контактам сокета. Покрутили в руках, если сигнал по всем 3-м осям акселерометра есть, можно считать, что чип живой. Потому-что огромное количество отказов это заклинившая одна ось-Х акселерометра. Технологию монтажа не меняли и вдруг брак попер аж 30%.
  12. Люди добрые, очень много попадается бракованных чипов LIS3DH(корпус LGA16 3x3мм). Как бы нам сделать входной контроль ? Может какие готовые приспособы есть на свете ?
  13. Друзья, вот смотрю я даташит на контроллер заряда литиевых батарей BQ40Z50 и есть там такой химический предохранитель (Chemical Fuse). Контроллер может пережечь его при необходимости. Нигде в инете не нашел таких химических предохранителей. Подскажите, может плохо искал. Или чем его заменить можно ?
  14. Товарищи, сейчас мы паяем по 4 платы с помощью такой вот ИК станции. Платы мелкие 40х20мм, запаивается 1 BGA чип. Прогрев очень не равномерный, много брака. Хотим купить печь оплавления припоя, чтобы по 20 плат за раз паять. Посоветуйте пожалуйста что-нибудь годное. (Темы по печкам почитал, смысл понятен - если нужно качество, то Ersa, если жалко денег, то Китай, но придется страдать).
  15. Друзья, помогите пожалуйста понять порядок действий при отладке приложения на устройстве под управлением windows CE 6.0. Есть устройство работающее под управлением Windows CE 6.0, я к нему подключаюсь с помощью USB кабеля и ActiveSync драйвера. На устройстве есть приложение, к которому нужно прицепиться отладчиком. Исходных кодов нет. На своем рабочем компе установил такой набор приложений: Windows XP, Visual Studio 2005 team suite, Windows Embedded CE 6.0 Все это работает, могу просматривать файлы на устройстве, просматривать список запущенных процессов. Но не понятно как присоединиться к нужному процессу отладчиком и начать отладку. Пробовал с помощью IDA Pro, нажимаю "attach to process", выбираю процесс, но отладка почему-то не работает, хотя IDA пишет, что "Connection to the Windows CE device has been established." Не активны кнопки step over, step into. Как с помощью Visual Studio 2005 запустить отладку приложения на устройстве вообще не понимаю. Объясните пожалуйста кто нибудь ? (Образ системы windows CE 6.0 есть, скачал с сайта производителя. Само приложение тоже есть, скачал с устройства. Осталось понять как запустить его в режиме отладки или присоединиться к нему отладчиком).