ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
79576 Топик полностью
Гудвин (27.01.2007 09:34, просмотров: 1) ответил AVR на В общем, попробуй сам - некорректно шагает через границу 32К слов. Тест по ссылке -->
Хороший тест - в моем драконе крышняк сносит при попытке шагнуть :) Каюсь, вчера попробовал только переход в в область 96КБ и там шагал... Сегодня добавил прерывания - начинаются косяки... Тест слегка модифицировал под м128. Вот что еще работоспособно: <asm> .nolist .include "m128def.inc" .list .dseg txtbuf: .byte 96 foo: .cseg .org 0 reset: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 c0k: rcall clrtxt ldi ZL,low(d0k*2) ldi ZH,high(d0k*2) ldi r16,byte3(d0k*2) out RAMPZ,r16 call readtxt nop ; jmp c16k jmp c64k d0k: .db "0k passed, ",0 clrtxt: ldi XL,low(foo) ldi XH,high(foo) clr r16 clt_l: st -X,r16 cpi XL,low(txtbuf) brne clt_l ret readtxt: elpm r16,Z+ cpi r16,0 breq rtxt_rt st X+,r16 rjmp readtxt rtxt_rt: ret .org 16384/2 c16k: ldi ZL,low(d16k*2) ldi ZH,high(d16k*2) ldi r16,byte3(d16k*2) out RAMPZ,r16 call readtxt nop jmp c32k d16k: .db "16k passed, ",0 .org 32768/2 c32k: ldi ZL,low(d32k*2) ldi ZH,high(d32k*2) ldi r16,byte3(d32k*2) out RAMPZ,r16 call readtxt nop jmp c48k d32k: .db "32k passed, ",0 .org (32768+16384)/2 c48k: ldi ZL,low(d48k*2) ldi ZH,high(d48k*2) ldi r16,byte3(d48k*2) out RAMPZ,r16 call readtxt nop ; jmp c64k jmp c0k d48k: .db "48k passed, ",0 .org (65536-10)/2 ; !!!!!!! Если здесь вместо 10 подставить 4, дракон начинает вылетать... c64k: ldi ZL,low(d64k*2) ldi ZH,high(d64k*2) ldi r16,byte3(d64k*2) out RAMPZ,r16 call readtxt nop ; jmp c128k ; jmp c0k jmp c16k d64k: .db "64k passed, ",0 ;.org (131072-128)/2 ;c128k: ; ldi ZL,low(d128k*2) ; ldi ZH,high(d128k*2) ; ldi r16,byte3(d128k*2) ; out RAMPZ,r16 ; ; call readtxt ; nop ; jmp c0k ; ;d128k: .db "128k passed, ",0 .exit </asm> Соображения: Думается незря в MKII стоИт 512Кб памяти ( картинка там -> http://electronix. …hp?showtopic=3327&st=0) Аффтары видимо "в лоб" (для ускорения?) при начале отладки прописывают в этой памяти существующие в программе адреса переходов, точек останова и пр... Посему в студии и заблокировали 32768 - "порог безглючности" :) Но все-равно есть "отверстие" - можно попытаться исправить ситуацию - просто припаять K6R4008, ибо все на плате дракона для этого разведено ;) Цена вопроса - $4-5 за микросхему памяти. Если'б была под руками, прямо сейчас-бы попробовал... Во всяком случае и так уже хорошо - шить "жирные кристаллы" можно, отлаживать мелкие тоже. Попробовал интенсивно погонять отладку в m162, дабы проверить доскональнее - работает... PS: Руки чешутся проверить, но но K6R4008, увы, у меня нет :( PPS: Если эти соображения верны, то поддержки толстых кристаллов думаю ждать не стОит. Старых - тоже (из маркетинговых соображений). Так что надо попытаться-таки заменить память...