Странный глюк в моём драйвере CAN: при передачи до 768 байт ( 96 кадров по 8 байт) всё номарльно можно хоть скопом 768, хоть по 10 байт, но после переданных 768 передастся ещё одна посылка и всё виснет.. потом помогает лишь ресет. Скорости менял - безрезультатно.
zltigo
Sep 19 2008, 08:52
Цитата(TanT @ Sep 19 2008, 10:20)

Странный глюк в моём драйвере CAN: при передачи до 768 байт...
Нет такого безобразия в железе. Заваливать этим CAN-ом на полной скорости-нагрузке подключенный к нему CAN-USB ковертор удавалось

- его драйвер падал вместе с Windows, но сам LPC работает стабильно. Использоваласть/испытывалась 'B' ревизия LPC2468.
96 - это лимит кадров, принятых/переданных с ошибками, установленный по умолчанию. Однако, изменение даного числа ничего не меняет. Прописываю программно значение ошибок прима и передачи и лицезрею, как они уменьшаются до нуля - кадры передаются и принимаются нормально. Но больше 96 не работает. Буду думать.
wangan
Sep 27 2008, 09:43
Небуду поднимать новую тему т.к. очень схожи.
Работаете ли вы с фильтрами? у меня на lpc2468 проблемка: на CAN2 работает а на первый не хотит (т.е. без фильтров работает оба кана). Возможно это как то связанно с эрратой по CAN1 на 2468, эрратой по CAN на 2378 нет. Но опять же там другая проблемма описанна.
zltigo приведите пжалуйста ваш код.
Фильтр не использую, пока. Моя проблема, как выяснилось, совсем другого рода и совпадение количества передаваемых пакетов с количеством счётчика ошибок всего лишь случайность.
В моём случае проблема с выделением памяти.
Когда я использую семафор ожидания готовности данных передачи по CAN заполняется вся память выделенная под задачу и происходит переполнение. Однако, программа ожидает данные (OSSemPend) после готовности освобождает ресурс (OSSemPost), но быстро расходует память. Без использования Post, Pend всё передаётся неограниченными порциями. Кто виноват? Что делать?
wangan
Sep 30 2008, 08:24
Фуф еле победил, оказалось ошибка в даташите:
ревизия чипа - A
имею UM10237 LPC24XX User manual от Rev. 01 — 18 July 2008
написано:
Since each CAN bus has its own address map, each entry also contains the number of the CAN Controller (001-010) to which it applies.
я и программил номер CAN контроллера CAN1 как 001 а CAN2 как 002 а заработало когда сделал: CAN1 как 000 а CAN2 как 001.
p.s. примеры работы с каном с фильтрами и не только можно глянуть в примерах в кейле
Усё, разобрался. Мало памяти, большие буфера. POST и PEND оказались не причём.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.