ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
14134
Сергей Борщ (31.08.2004 18:19, просмотров: 1531)
Не про ARM, но про GCC общий вопрос. В других местах молчат... Взялся таки осваивать бесплатные инструменты. Переношу прогу с IAR под WinAVR. Есть у меня несколько функций, которые от заказчика к заказчику (от таргета к таргету) меняются местами. Сделано так потому, что моя часть кода находится в адресах загрузчика и закрыта от чтения заказчиком. А он свою прогу заливает в остальную память и вызывает мои функции по одному ему известным адресам. А я нужную мне информацию беру вызывая их функции по известным мне и назначенных им адресам. Это чтобы заказчики друг у друга устройства не воровали. Ну вот захотели они так. Итак у меня есть несколько функции, и есть файл в котором собраны все "заказчикозависимые" константы: customer1.h:
#define	_POLY_		0x8408
#define	_CRC_INIT_	0x0000
// User Routines remap
#define	_INC_PTR_	0x17E4
#define	_SHIFT_MASK_	0x17EE
#define	_BITRATE_	0x17F2
#define	_FREQ_0_	0x17F6
#define	_FREQ_1_	0x17FA
// Driver Routines remap
#define	_SYNTH_INIT_	0x1832
#define	_TX_PUTCHAR_	0x1834
#define	_GET_SERIAL_	0x1836
теперь мне надо функцию
	LDI	R16,0
	RET
разместить по абсолютному адресу _FREQ_1_. Я пробую
	.section .text,"ax",@progbits
	.align	2
	.org	_FREQ_1_
	LDI	R16,0
	RET
он почему-то _FREQ_1_ отсчитывает не от начала секции .text (которая с нуля начинается), а от первого свободного адреса кратного 4 в этой секции, т.е. .org работает как .skip, да еще к тому же без .align вставляет nop перед моим кодом. пробовал .section .absolute,"ax",@progbits - он создает секцию absolute и втыкает ее после .text. Второй день штудирую доку - ответа не нашел :-( В общем, как мне правильно описать компилятору то, что я хочу. И второй аналогичный вопрос будет - как его заставить кое-какие переменные разместить в секции .bss по конкретному адресу? Про создание отдельного сегмента я знаю, но хотелось обойтись только правкой исходников, не makefile.