Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Ошибка в ПО драйвера L502

Вы не вошли.

 Поиск | Регистрация | Вход 

Шелковников Захар
23.04.2013 17:45:09
#1

Гость

Ошибка в ПО драйвера L502

Здравствуйте.
Прошу исправить ошибку в механизме отправки пользовательских команд сигнальному процессору. Ошибка состоит в том, что пользовательские команды должны начинаться с кода >= 0x80000000 - 4 байтное целое, а переменная cmd_code - uint16_t.
В примере прошивки из SDK налицо та же ошибка: файл "l502_cmd.c", строка 100.
Как временный вариант пока передаю команды в поле param при выполнении команды CONFIGURE, т.к. в этой команде нет проверки валидности.

23.04.2013 18:09:04
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,338

Re: Ошибка в ПО драйвера L502

Здравствуйте.

Спасибо за найденную ошибку. Думаю правильным будет изменить код, с которого должны начинаться пользовательские команды на 0x8000, так как это сохранит неизменным командный интерфейс ПК->BlackFin.

По сути Вы можете изменить значение константы  L502_BF_CMD_CODE_USER в l502_bf_cmd_defs.h в прошивке и в файле, который использует программа для ПК. При этом Вы можете использовать текущие версии драйвера и библиотеки.

При обновлении SDK эти исправления будут внесены в штатную прошивку и документацию.

Шелковников Захар
24.04.2013 06:15:38
#3

Гость

Re: Ошибка в ПО драйвера L502

Здравствуйте.

Спасибо за совет, но это решение для текущей версии драйвера и библиотеки не подходит, т.к. библиотека поверяет разрешенные команды с кодом < 0x80000000 и не разрешает неизвестные команды.

24.04.2013 14:07:10
#4

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,338

Re: Ошибка в ПО драйвера L502

Такого быть не должно. Давайте разбираться.

1. Я так понимаю, что для посылки пользовательских команд Вы используете функцию L502_BfExecCmd()? Эта процедура вообще  позволяет послать любую команду в BlackFin и на ее работу код влиять не должен. Любая команда должна дойти до сигнального процессора. На всякий случай проверьте возвращенный код ошибки. Если код ошибки -512 или ниже (-513, -514 т. д.), то значит команда дошла до сигнального процессора и эту ошибку уже вернула прошивка процессора в ответ на команду.

2. Я так понимаю Вы пишите свою прошивку на основе штатной (иначе зачем Вам пользовательские команды). В штатной прошивке сигнального процессора проверяется старший бит кода (это было действительно сделано неправильно, как Вы правильно заметили для правильной проверки L502_BF_CMD_CODE_USER должно быть 0x8000), если не установлен, то проходится по таблицы стандартных функций, а если установлен, то вызывается  функция usr_cmd_process(). В штатной прошивке эта функция просто завершает выполнение команды с кодом ошибки L502_BF_ERR_UNSUP_CMD, так как в штатной прошивке нет пользовательских команд. Вам нужно соответственно добавить сюда свою обработку (и при правильных кодах вызвать l502_cmd_done с кодом L502_BF_ERR_SUCCESS.

Т.е. библиотека на ПК сам код L502_BF_CMD_CODE_USER не использует, а он введен для того, чтобы:
- вынести обработку пользовательских команд в отдельный файл, отделив от кода штатной прошивки
- гарантирует что коды пользователя не будут пересекаться с кодами, которые L Card может добавить в следующих версиях ПО.

Таким образом, изменение только самой прошивки должно быть достаточно. Если что-то работает не так, то просьба подробнее описать, что именно.

Шелковников Захар
24.04.2013 16:20:20
#5

Гость

Re: Ошибка в ПО драйвера L502

Спасибо, проверил, это действительно так, все работает. На тот момент я просто не исправил L502_BF_ERR_UNSUP_CMD в строке 150 файла "l502_user_process.c"

В процессе корректировки штатной прошивки появилась еще одна проблема: внес изменения в функцию usr_in_proc_data и теперь ПК периодически выпадает в BSOD (Windows XP 32).
Суть изменения функции usr_in_proc_data:
обработка поступивших данных data и в зависимости от состояния выбранной цифровой линии передача обработанных данных в функцию hdma_send_req_start.
Размер данных в процессе обработки может изменяться.
Можете ли вы помочь разобраться с этой проблемой и посоветовать на что нужно обратить внимание?

24.04.2013 16:35:37
#6

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,338

Re: Ошибка в ПО драйвера L502

1. Правильно ли я понимаю, что при стандартной прошивке BSOD не возникал?
2. Какая версия драйвера? 1.0.6? (можно в диспетчере устройств посмотреть или функцией L502_GetDriverVersion()).
3. Что за коды ошбки пишутся в BSOD
4. Как часто это происходит - сразу при запуске сбора, через какое-то время после работы?
5. Какие настройки АЦП (частота, межкадровая задержка) используете? Устанавливаете через стандартное API или независимо внутри прошивки?
6. Если есть возмножность пришлите мне на почту код прошивки или этой функции

Шелковников Захар
24.04.2013 17:56:13
#7

Гость

Re: Ошибка в ПО драйвера L502

1 - при стандартной прошивке BSOD не возникал
2 - версия драйвера 1.0.6.0 от 27.02.2013
3 - код ошибки BSOD: 0x0000010D (0x00000008, 0x76F81518, 0x00000004, 0x89990280)
4 - это происходит через какое-то время после начала сбора (синхронный ввод). Логика работы такова: если на выбранный дискретный вход поступает сигнал, usr_in_proc_data передает принятые данные далее вызовом hdma_send_req_start. Если в процессе сбора сигнал на дискретном входе несколько раз меняет свое состояние - вылетает BSOD, если же не меняется - не вылетает.
5 - Настройки АЦП: частота сбора 2 МГц, частота на канал АЦП 50 кГц, частота DIn 500 Гц, межкадровую задержку специально не устанавливаю, конфигурирую частоту функциями L502_SetAdcFreq и L502_SetDinFreq. Внутри прошивки настройки частоты не выполняю.
6 - выслал вам на почту код прошивки и небольшие пояснения.

25.04.2013 18:36:00
#8

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,338

Re: Ошибка в ПО драйвера L502

Написал Вам ответ на почту