|
|
  |
China-Link, Вариант отладчика из Китая |
|
|
|
Apr 28 2018, 15:39
|

Участник

Группа: Свой
Сообщений: 68
Регистрация: 7-05-05
Из: China, Shenzhen
Пользователь №: 4 812

|
Цитата(COMA @ Apr 28 2018, 11:17)  А по поводу фото платы что скажете? Это точно 10-я версия? точно она... там контроллер LPC4337JBD144 с High Speed USB Цитата(jcxz @ Apr 28 2018, 14:04)  У меня старенькая Ultra, которой уже около 5 лет, работает на 24МГц по SWD.  так в нем FPGA рулит... и цена на него более 800 долларов... к сожалению, китайцы его толком не закопи-пастили...
|
|
|
|
|
Apr 28 2018, 16:18
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(UniSoft @ Apr 28 2018, 18:39)  так в нем FPGA рулит... и цена на него более 800 долларов... к сожалению, китайцы его толком не закопи-пастили... Нет. Со стартеркита. Когда они там ещё были.  (( Китайцы не китайцы, но кто-то определённо скопипастил. Со стартеркита.ру пропали, но на http://otladka.com.ua - остались.
|
|
|
|
|
Jun 28 2018, 08:37
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Добрый день. Имеется следующая проблема. JetLink Ultra V4 работал нормально до обновления драйверов от сеггер не выше версии 6.14b. С драйверами новее при отладке выдает ошибку что отладчик defective.  В принципе достаточно было подменять драйверы в IAR на версию 6.14 и все работало дальше. Но возникла потребность перейти на Keil. Он поначалу тоже ругался что дефектив. Подменил драйверы на 6.14. И он вообще отказывается записывать программу к контроллер. Выдает такую ошибку:  При этом IAR с этим же драйвером работает нормально. Как подружить Keil c драйвером или сделать чтобы jetlink не был defective. Прошивка в jetlink от 20 апреля 2018 обновилась нормально сама. Да и всегда обновляется без проблем.
|
|
|
|
|
Jun 28 2018, 09:23
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(virfis @ Jun 28 2018, 11:37)  Имеется следующая проблема. JetLink Ultra V4 работал нормально до обновления драйверов от сеггер Была аналогичная проблема с Ultra V4. Порешили её поставив дрова JLink_V612f. Сейчас работает и с IAR8.20 ок. Возможно можно и новее дрова поставить, но я не знаю какая последняя рабочая версия. Знаю что JLink_V612f - работает, а JLink_V619e - уже нет. Где-то между ними последняя рабочая версия. Проверять все подряд - лень. Писал уже об этом где-то тут на форуме. Если выясните последнюю рабочую версию - сообщите, плиз.
|
|
|
|
|
Jun 28 2018, 09:44
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Цитата(jcxz @ Jun 28 2018, 12:23)  Была аналогичная проблема с Ultra V4. Порешили её поставив дрова JLink_V612f. Сейчас работает и с IAR8.20 ок. Возможно можно и новее дрова поставить, но я не знаю какая последняя рабочая версия. Знаю что JLink_V612f - работает, а JLink_V619e - уже нет. Где-то между ними последняя рабочая версия. Проверять все подряд - лень. Писал уже об этом где-то тут на форуме. Если выясните последнюю рабочую версию - сообщите, плиз.  6.14b работает с iar как часы. Новее я пробовал только с 6.20. И уже не работает. Но мне то надо чтобы с keil работало. Iar 8.xx помимо своего неудобства еще и имеет ошибки компилятора при включенной оптимизации выше low. А именно в lwip проявляется - при подключении по TCP, довольно быстро происходит переполнение счетчика cwnd. И следующие пакеты просто отбрасываются на приеме. Я анализировал ассемблерный код и там реально ошибка - не маскируются старшие 16 бит в регистре, при 16-битной переменной. В 7.80.4 на точно тех же исходниках этой проблемы нет. Но поддержка новых процессоров stm32h7 есть только начиная с 8-й версии, хотя на сайте в табличке сравнения быстродействия они как-то использовали версию 7.60. В общем я решил попробовать кейл, а тут проблема с jetlink.
Сообщение отредактировал virfis - Jun 28 2018, 09:52
|
|
|
|
|
Jun 28 2018, 10:11
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(virfis @ Jun 28 2018, 12:44)  Iar 8.xx помимо своего неудобства еще и имеет ошибки компилятора при включенной оптимизации выше low. А именно в lwip проявляется - при подключении по TCP, довольно быстро происходит переполнение счетчика cwnd. И следующие пакеты просто отбрасываются на приеме. Я анализировал ассемблерный код и там реально ошибка - не маскируются старшие 16 бит в регистре, при 16-битной переменной. В 7.80.4 на точно тех же исходниках этой проблемы нет. Вы уверены??? Это очень серьёзное заявление! Мы у себя в проекте используем IAR8.11 и 8.20 - проблем не замечали. Выложите пожалуйста участок кода, компиляция которого приводит к указанной ошибке. И ассемблерный листинг для него. А также какое ядро? и важные ключи компиляции. Я думаю это будет полезно многим участникам здесь. Цитата(virfis @ Jun 28 2018, 12:44)  Но поддержка новых процессоров stm32h7 есть только начиная с 8-й версии, хотя на сайте в табличке сравнения быстродействия они как-то использовали версию 7.60. В общем я решил попробовать кейл, а тут проблема с jetlink. Заглянул в свойства проекта IAR 7.80.4 - присутствует ядро M7. Так что думаю должен работать с ними. Да и в Keil наверняка можно внедрить какие нужно дрова segger-а - по-крайней мере мы у себя в Dave заменяли их без проблем (версию 6.12F).
|
|
|
|
|
Jun 28 2018, 10:24
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Цитата(jcxz @ Jun 28 2018, 13:11)  Вы уверены??? Это очень серьёзное заявление! Мы у себя в проекте используем IAR8.11 и 8.20 - проблем не замечали. Выложите пожалуйста участок кода, компиляция которого приводит к указанной ошибке. И ассемблерный листинг для него. А также какое ядро? и важные ключи компиляции. Я думаю это будет полезно многим участникам здесь.
Заглянул в свойства проекта IAR 7.80.4 - присутствует ядро M7. Так что думаю должен работать с ними. Да и в Keil наверняка можно внедрить какие нужно дрова segger-а - по-крайней мере мы у себя в Dave заменяли их без проблем (версию 6.12F). Уверен на 100% потому что я неделю потратил на поиск проблемы. Сделаю не прям сейчас, но позже и выложу листинги. В IAR 7.80.4 я компилирую под stm32f765, а мне надо еще stm32H743. И его он не знает. Так я и внедрил в кейл нормальные драйвера 6.14b и получил то что на втором скриншоте.
|
|
|
|
|
Jun 28 2018, 11:02
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(virfis @ Jun 28 2018, 13:24)  Уверен на 100% потому что я неделю потратил на поиск проблемы. Сделаю не прям сейчас, но позже и выложу листинги. Будем ждать. И заранее спасибо! IAR у нас официальный, и если баг подтвердится и будет проект, его иллюстрирующий, то наверное будем стучать в поддержку. Цитата(virfis @ Jun 28 2018, 13:24)  Так я и внедрил в кейл нормальные драйвера 6.14b и получил то что на втором скриншоте. А после внедрения при подключении он обновлял прошивку J-Link-а? Если так, то наверное они как-то не полностью внедрились. У нас, как только мы в Dave внедрили 6.12f, он сразу перестал требовать обновления прошивки. И сейчас работает без нареканий. Кейл не юзаем.
|
|
|
|
|
Jun 29 2018, 09:01
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Цитата(jcxz @ Jun 28 2018, 14:02)  Будем ждать. И заранее спасибо! IAR у нас официальный, и если баг подтвердится и будет проект, его иллюстрирующий, то наверное будем стучать в поддержку.
А после внедрения при подключении он обновлял прошивку J-Link-а? Если так, то наверное они как-то не полностью внедрились. У нас, как только мы в Dave внедрили 6.12f, он сразу перестал требовать обновления прошивки. И сейчас работает без нареканий. Кейл не юзаем. Не умею работать с тегами в общем вот: lwip 2.0 tcp_in.c строка 1145, оптимизация максимальная balanced Код /* Update the congestion control variables (cwnd and ssthresh). */ if (pcb->state >= ESTABLISHED) { if (pcb->cwnd < pcb->ssthresh) { if ((tcpwnd_size_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { pcb->cwnd += pcb->mss; } LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"TCPWNDSIZE_F"\n", pcb->cwnd)); } else { tcpwnd_size_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); if (new_cwnd > pcb->cwnd) { pcb->cwnd = new_cwnd; } LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: congestion avoidance cwnd %"TCPWNDSIZE_F"\n", pcb->cwnd)); } } Вот ассемблер проблемного места с моими комментариями: Код tcpwnd_size_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); Тут в R0 - pcb->cwnd = FFFA 0x809177e: 0x4349 MULS R1, R1, R1 0x8091780: 0xfb91 0xf1f0 SDIV R1, R1, R0 после умножения и деления получили слагаемое в R1 = 20 0x8091784: 0x1809 ADDS R1, R1, R0 R1 = 1001A - Вот ошибка! new_cwnd объявлена как 16 бит, а не отброшены старшие 16 бит if (new_cwnd > pcb->cwnd) { 0x8091786: 0xf105 0x0044 ADD.W R0, R5, #68 ; 0x44 0x809178a: 0x8882 LDRH R2, [R0, #0x4] снова закинули в R0 - pcb->cwnd = FFFA 0x809178c: 0x4291 CMP R1, R2 И вот ошибка при сравнении. То есть мы не попадаем в условие if (new_cwnd > pcb->cwnd) { pcb->cwnd = new_cwnd; } И pcb->cwnd не принимает нужного значения и потом все пакеты на входе выбрасываются А вот код из версии 7,80 Код tcpwnd_size_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); 0x8092650: 0x4349 MULS R1, R1, R1 0x8092652: 0xfb91 0xf1f0 SDIV R1, R1, R0 0x8092656: 0x1809 ADDS R1, R1, R0 if (new_cwnd > pcb->cwnd) { 0x8092658: 0xb28a UXTH R2, R1 - Вот она спасительная строка, убравшая старшие 16 бит. 0x809265a: 0x4290 CMP R0, R2 0x809265c: 0xbf38 IT CC 0x809265e: 0x4610 MOVCC R0, R2 0x8092660: 0x80b8 STRH R0, [R7, #0x4] 0x8092662: 0xe036 B.N 0x80926d2 То что официальный IAR это очень хорошо, но проект не могу предоставить по политике предприятия.
Сообщение отредактировал virfis - Jun 29 2018, 09:07
|
|
|
|
|
Jun 29 2018, 10:31
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Цитата(jcxz @ Jun 29 2018, 12:26)  А как объявлены tcpwnd_size_t и pcb->cwnd? И какая именно версия IAR 8.xx? Попробую позже у себя сэмулировать такое. так как LWIP_WND_SCALE = 0, то typedef u16_t tcpwnd_size_t; и в структуре соответсвенно tcpwnd_size_t cwnd; Цитата Хотя я конечно в принципе не использую локальные не-static переменные как рабочие внутри функций: только int/uint или выше. Чтобы не было лишних команд расширений. Ну мне меньше всего хотелось бы ковырять код LwIP. Я начал пробовать 8-ку начиная с 8.22.1 и далее до последней 8.30.1 проверял каждое обновление. Ошибка не исправлена. И думаю что без багрепорта не исправят. Не смотря на то что это конечно важный момент, но возвращаясь к теме, кейл ни с 6.14b ни с 6.12f не хочет работать. Прошивка в отладчике обычно обновлялась без проблем если подключиться более новой версией. А есть возможность вернуть прошивку которая соответсвует драйверу 6,12 или 6,14? чем это делается и где ее взять?
Сообщение отредактировал virfis - Jun 29 2018, 10:31
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|