ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
44749 Топик полностью
ReAl (23.11.2005 15:21, просмотров: 1) ответил NeTroll на Нет, мне не нужно С-шных соглашений о вызовах параметрах, мне нужно, чтобы получился чисто ассемблерный проект. Это точно возможно, но не могу понять как сделать
Та новая студия, которая поддерживает winavr из себя? Нет проблем, просто указываешь в проекте файл с расширением .S (я с маленькой s даже не пробовал - по gcc-шным понятиям .S сначала надо пропустить через стандартный С-шный препроцессор, а .s - не надо). Запускалка, инициализирующая стек (если надо, зависит от кристалла) и в каждый вектор подставляющая jmp либо на заданный обоработчик, либо на __bad_interrupt (который будет либо jmp на пользовательский __vector_default, либо на нулевой адрес) - подошьётся автоматически. Если это очень вредно - наверное придётся заменять в студии какие-то ключи или лепить свой makefile. Если устраивает - то никаких телодвижений не надо. file foo.S
#define __SFR_OFFSET 0
.nolist
#include 
.list

	.section .eeprom
ee_foo:  .byte 0xC3, 0xA5

	.section .bss
foo: .skip 2

	.text
.global main
main:
	ldi r16, 0xFF
	out DDRB, r16

	sts foo, r16
1:
	in r16, PORTB
	eor r16, r17
	out PORTB, r16
	rjmp 1b

	.global SIG_OVERFLOW0
SIG_OVERFLOW0:
	; имена прерываний из стандартного h-файла
	reti

	.global __vector_default
__vector_default:
	; сюда пихать обработку бяки, если не надо не писать, оно само подошьёт 
	; такой вектор, состоящий из jmp на нулевой адрес
	reti

	.end