Сергей Борщ 141 6 марта, 2019 Опубликовано 6 марта, 2019 · Жалоба Предлагаю свернуть обсуждение. Автор озвучил требования, выложил необходимые исходные данные. Нет смысла советовать ему делать что-то самому - тема в разделе "предлагаю работу". Кому интересно - связываются с автором или оставляют свои контактные данные. Кому интересно "потрещать" - создавайте отдельную тему в другом разделе, здесь можно разместить ссылку на нее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksis33 0 11 марта, 2019 Опубликовано 11 марта, 2019 · Жалоба Задачу можно упростить. Не на С, а на том же ассемблере, но хорошо структурированном, с комментариями, с именованными переменными и ссылками, чтобы можно было легко найти требуемое место и изменить при необходимости. Схему девайса вышлю по запросу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба On 3/5/2019 at 3:14 PM, jcxz said: Автор, судя по всему, дизассемблировал фрагмент swap-файла своей винды Да, разумеется, каждый уважающий себя эмбеддер хранит в начале свопа характернейшую таблицу векторов. Угадать по выложенному файлу модель контроллера - пальцем в небо (кто-нибудь помнит наизусть адреса периферийных регистров?), но кортекс узнаётся безошибочно. On 3/5/2019 at 2:17 PM, bzx said: это зашифрованный загружаемый код Ага, конечно. ROM:08005AAE word_8005AAE DCW 1500, 250, 1680, 90, 70, 500 ROM:08005AAE DCW 1502, 262, 1680, 90, 70, 525 ROM:08005AAE DCW 1504, 274, 1680, 90, 70, 550 ROM:08005AAE DCW 1506, 286, 1680, 90, 70, 575 ROM:08005AAE DCW 1508, 298, 1680, 90, 70, 600 ROM:08005AAE DCW 1510, 310, 1680, 90, 70, 625 1500 - это "Юстас", "250" - Алекс. Именно так и никак иначе. Там действительно 25 кило кода (работа с АЦП, ЦАП, ногодрыг несколькими ножками + какая-то непонятная математика в развесистых свичах) и 200 с фигом килобайт таблиц. Переписать десяток килобайт этой математики - задача решаемая, но явно не "студентом за неделю". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 15 марта, 2019 Опубликовано 15 марта, 2019 (изменено) · Жалоба RSCHI PC, R0, #0x12C000 RSCEQ R4, R11, R10 MOVEQ R8, 0xFFFF5FFF BCC 0xFFE7D4F4 MVNGES R0, R0,LSR#1 BGE 0xFFAC427C LDRGTB R0, [R11,#0xC2C]! SVCMI 0xEAEC02 RSCGE LR, R11, #0x7200 ANDHIS R1, R10, #0x3A000000 RSCEQ R4, R11, #0x20000000 ANDPL R0, R0, #0x2A Изменено 15 марта, 2019 пользователем Aldec Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 16 марта, 2019 Опубликовано 16 марта, 2019 · Жалоба On 3/11/2019 at 9:14 AM, aleksis33 said: Задачу можно упростить. Не на С, а на том же ассемблере, но хорошо структурированном, с комментариями, с именованными переменными и ссылками, чтобы можно было легко найти требуемое место и изменить при необходимости. Вставлю 5 коп со своей колокольни. Задачу можно упростить, если в проекте нужно сделать небольшие изменения. Например удалить защиту основанную на времени работы или добавит некоторую функциональность. Можно сказать, то что вы описываете, это "вся работа" минус 300 евро. Упростить работу действительно можно предоставив дополнительную информацию. Как уже сказано схему, инструкцию по эксплуатации устройства и т.д. Очень хорошо иметь само устройство. Есть ли в устройстве бутлоадер? Не плохо, собрать по крупицам информацию об использованных библиотеках и компиляторах. Например: анонс на сайте прибора о том, что ПО прибор обновлено до FreeRTOS 8.0.1 //---------------- По поводу таблиц Вставляю картинку с таблицами и прокомментирую текст в ней ROM:08005A10 loc_8005A10 ROM:08005A10 LDR R4, =off_803C830 начало таблицы ROM:08005A12 LDR R5, =dword_803C850 окончание таблицы ROM:08005A14 B loc_8005A24 ROM:08005A16 loc_8005A16 ROM:08005A16 LDR R0, [R4,#0xC] загружаем адрес вызываемой функции ROM:08005A18 ORR.W R3, R0, #1 устанавливаем признак Thumb - нечетность адреса. и копируем его в R0 ROM:08005A1C LDMIA.W R4, {R0-R2} загружаем 3 параметра функции ROM:08005A20 BLX R3 вызываем функцию с тремя параметрами ROM:08005A22 ADDS R4, #0x10 ROM:08005A24 loc_8005A24 ROM:08005A24 CMP R4, R5 все функции вызваны? ROM:08005A26 BCC loc_8005A16 не все, продолжаем Уже пару скрытых функций, по адресам 0x0803C830 + 0x0C и 0x0803C840 + 0x0C По адресу 0x0803C830 + 0x0C лежит указатель на функцию 08005A34 Можно сказать дизассемблер справился с этой задачей, нужно только пару строк внести "внутрь" функции ROM:08005A34 ; --------------------------------------------------------------------------- ROM:08005A34 PUSH {R4-R6,LR} ROM:08005A36 ADD.W R4, R1, R2 ROM:08005A3A ROM:08005A3A loc_8005A3A А сколько таких "закладок" еще есть? P.S. Я бы не рассчитывал на то, что проект можно привести к обслуживаемому виду менее чем за 3 месяца. Да и как "сдавать" проект? Байт в байт не напишешь. Если проверять по функциональности, то "написание ТЗ" на функциональность равно полной постановке задачи. В этом случая дешевле/быстрее написать с нуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 16 марта, 2019 Опубликовано 16 марта, 2019 · Жалоба 10 hours ago, misyachniy said: Есть ли в устройстве бутлоадер? Нету. И фриртоса нету. Есть огроменный бесконечный цикл, прерывание по TIM3, которое дрыгает ножкой, и два DMA, которые перекладывают данные из двух АЦП в память. Ещё UART есть (только на передачу). 10 hours ago, misyachniy said: А сколько таких "закладок" еще есть? Ноль. Либо я плохо искал. А эти закладки - вовсе не закладки, а, подозреваю, с++ конструкторы глобальных объектов. Компилятору так удобнее - сделать список и итерироваться по нему. Каких-то других особенностей с++ в коде не обнаружено - никаких перегрузок и прочей динамической памяти. Вероятно, автору интересней всего получить содержимое тех функций, которые пережёвывают вход с АЦП и выдают его в ЦАП. Я ЦОС не умею, поэтому сходу никаких знакомых паттернов там не увидел. Возможно, более грамотный специалист после тщательного допроса автора сразу скажет "здесь делаем преобразование А, потом по этому условию делаем Б и подставляем туда значение из таблицы В". 10 hours ago, misyachniy said: Да и как "сдавать" проект? Если автор адекватный (пока обратное не доказано), идеальный вариант - юнит тесты, показывающие одинаковое поведение оригинала и переписанных функций (для каждой функции по пачке тестов). Их всё равно писать надо в обязательном порядке. Железка при этом не особо нужна - проще даже на эмуляторе. Это я пол-дня потратил, мозг размять. Потратить ещё месяц на переписывание мне что-то не хочется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 17 марта, 2019 Опубликовано 17 марта, 2019 · Жалоба 12 часов назад, esaulenka сказал: идеальный вариант - юнит тесты, показывающие одинаковое поведение оригинала и переписанных функций (для каждой функции по пачке тестов). Их всё равно писать надо в обязательном порядке. Железка при этом не особо нужна - проще даже на эмуляторе. Тогда предложенный мной вариант с расположением всего (или части) кода в char const t[] = {...} - вполне подходит. Он вполне пройдёт все такие тесты. PS: И на него не потребуется месяца или даже недели. В 14.03.2019 в 16:07, esaulenka сказал: Да, разумеется, каждый уважающий себя эмбеддер хранит в начале свопа характернейшую таблицу векторов. Угадать по выложенному файлу модель контроллера - пальцем в небо (кто-нибудь помнит наизусть адреса периферийных регистров?), но кортекс узнаётся безошибочно. Мой коммент касался качества приведённого в первом посте дизассемблированного текста. Если Вы не поняли... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 17 марта, 2019 Опубликовано 17 марта, 2019 · Жалоба 1 hour ago, jcxz said: мной вариант ... вполне подходит Кажется, Сергей Борщ вполне однозначно попросил упражняться в остроумии в другом месте. Спасибо за Ваши бесценные комментарии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 17 марта, 2019 Опубликовано 17 марта, 2019 · Жалоба 41 минуту назад, esaulenka сказал: Кажется, Сергей Борщ вполне однозначно попросил упражняться в остроумии в другом месте. Спасибо за Ваши бесценные комментарии. Для неспособных понимать прочитанное с первого раза, разжую доходчиво: Как критерий выполнения задачи при сдаче работы заказчику ваш "идеальный вариант" - абсолютно не подходит. Ибо запросто можно отреверсить ту часть алгоритма, что попроще, а то что не получается - засунуть внутрь блоков данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 26 марта, 2019 Опубликовано 26 марта, 2019 (изменено) · Жалоба On 3/11/2019 at 10:14 AM, aleksis33 said: Задачу можно упростить. Не на С, а на том же ассемблере, но хорошо структурированном, с комментариями, с именованными переменными и ссылками, чтобы можно было легко найти требуемое место и изменить при необходимости. Схему девайса вышлю по запросу. Возможно в девайсе есть какие то дополнительные флэшки а прошивка просто инициализация контроллера. Изменено 27 марта, 2019 пользователем Aldec Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться