ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
441907 Топик полностью
Mazur (14.09.2013 23:07, просмотров: 100) ответил mazur на Как сделать чтобы числа задавались на этапе компиляции?
Что-то не выходит каменный цветок. Приведенные примеры компилируются в код вычисления. Сразу хочу сказать, не нужно выказывать свое раздражение. Сейчас в данный момент, на данном этапе мне нужно понять как создавать макросы, функции по аналогии с ассемблером. Пусть сейчас это будет на примере очистки определенного участка буфера дисплея. На асме в легкую: .macro goto_xy ldi r16, (@0-1)*(@1-1) .endmacro goto_xy 2, 4 //======================================================================== .macro Clear_String // Очистка строки буфера дисплея с заданным начальным адресом и количеством очищаемых символов. ldx DSP_BUF+(MAX_CHARS*(@0-1))+@1 ldi r17,@2 rcall _Clear_String .endmacro _Clear_String: ldi r16,0x20 _Clear_String_Cycle: st X+,r16 dec r17 brne _Clear_String_Cycle ret //------------------------------------------------------------------------ //------------------------------------------------------------------------ Clear_String_1: // Очистка строки буфера дисплея. Clear_String 1, 0, MAX_CHARS ret Clear_String_2: // Очистка строки буфера дисплея. Clear_String 2, 0, MAX_CHARS ret Clear_String_3: // Очистка строки буфера дисплея. Clear_String 3, 0, MAX_CHARS ret Clear_String_4: // Очистка строки буфера дисплея. Clear_String 4, 0, MAX_CHARS ret //======================================================================== Что хочу получить на си (пока это вычисляется функцией, а мне нужно, чтобы подобные задачи делались на этапе компиляции): Пусть есть буфер дисплея. Определенном участок нужно заполнить пробелами. Я хочу, чтобы писалось, скажем: // X Y Число символов самого длинного сообщения в данном участке. // Чтобы затерлись короткие сообщения, разумеется. clr_str 1, 7, N А в функцию подставлялось MaxX*(y-1)+(x-1), то есть вычисленный еще на этапе компилирования адрес в буфере и N.