Полная версия этой страницы:
Непонятно с Code Protect
toweroff
Mar 24 2010, 17:39
Без CRPx все работает, USB поднимается, девайс адекватен
Включаю CRP1 или CRP2 (0х12345678 или 0х87654321 по адресу 0x1FC), зверь вообще молчит, USB_CONNECT не выставляет и, соответственно, компьютером даже как неопознанное устройство не распознается
Смотрел, что там скомпилилось... линкер вроде как все нормально собрал, да и никаких ему указаний по размещению, кроме
const unsigned int secure __at(0x000001FC) = 0x87654321 ;
не было, никакая функция не портится этой константой
Какие есть мысли, куда посмотреть еще?
zltigo
Mar 24 2010, 17:53
Цитата(toweroff @ Mar 24 2010, 20:39)

Какие есть мысли, куда посмотреть еще?
В бинарник посмотреть. В бинарник, до и после.
Цитата
никакая функция не портится этой константой
как я в этом сомневаюсь
toweroff
Mar 24 2010, 18:08
Смотрю бинарник. Без CRPx
Vectors LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
и т.д.
А как только вставляю размещение константы, это дело уползает до адреса 0x200
и вот тут вообще не знаю как победить... хотя, казалось бы, для этого региона явно указано
AREA RESET, CODE, READONLY
ARM
zltigo
Mar 24 2010, 18:30
Цитата(toweroff @ Mar 24 2010, 21:08)

А как только вставляю размещение константы, это дело уползает до адреса 0x200
Ну вот и все

. Курите скрипт линкера, что там с принудительным заданием адресов и, как минимум, выделением векторов в отдельную маленькую секцию.
toweroff
Mar 24 2010, 18:38
Цитата(zltigo @ Mar 24 2010, 21:30)

Ну вот и все

. Курите скрипт линкера, что там с принудительным заданием адресов и, как минимум, выделением векторов в отдельную маленькую секцию.
где бы его в Keil 4 еще найти
zltigo
Mar 24 2010, 18:44
Цитата(toweroff @ Mar 24 2010, 21:38)

где бы его в Keil 4 еще найти

Ну, с Keil не помогу
toweroff
Mar 24 2010, 18:48
странно, но проект под LPC2103 нормально компилится, все опции в проекте аналогичны LPC2468... и как всегда, заказчик ждет сегодня )))))))
toweroff
Mar 24 2010, 21:59
вот в таком виде у меня используется scatter линкера
Код
LR_IROM1 0x00000000 0x00080000 { ; load region size_region
ER_IROM1 0x00000000 { ; load address = execution address
LPC2400.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x40000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
}
по идее, секцию RESET он должен впихнуть в самое начало с адреса 0, но не происходит этого... мозг рванет сейчас... (((
zltigo
Mar 24 2010, 23:10
Цитата(toweroff @ Mar 25 2010, 00:59)

по идее, секцию RESET он должен впихнуть в самое начало с адреса 0, но не происходит этого...
Почему - происходит, с начала и впихивает, только у Вас в эту секцию очевидно кроме собственно векторов и другого напихано, вот она до 0x1FC и не влезает. Смотрите, как ограничить размер, до размера таблицы.
toweroff
Mar 25 2010, 03:41
Цитата(zltigo @ Mar 25 2010, 02:10)

Почему - происходит, с начала и впихивает, только у Вас в эту секцию очевидно кроме собственно векторов и другого напихано, вот она до 0x1FC и не влезает. Смотрите, как ограничить размер, до размера таблицы.
именно так все и было. Разобрался... разделил вектора и начальную инициализацию, прописал линкеру первым ставить в блок вектора.
спасибо!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.