AVR GCC

Jul 11, 2004 24 Replies
úÄÒÁ×ÓÔ×ÕÊ, All!
þÔÏ ÓÁÂÖÕ ÓËÁÚÁÔØ, ÞÔÏÂÙ ÏÎ × ÐpÏÌÏÇ\ÜÐÉÌÏÇ ×ÙÚÏ×Á ×ÎÅÛÎÅÊ Æ-ÃÉÉ ÎÅ ×ÐÉÓÙ×ÁÌ push\pop ÎÅÉÓÐÏÌØÚÕÅÍÙÈ pÅÇÉÓÔpÏ×?
åÓÔØ ÏÞÅÎØ ÔpÅÂÏ×ÁÔÅÌØÎÁÑ Ë ×pÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ ÓÅËÃÉÑ ÎÁÐÉÓÁÎÎÁÑ ÎÁ ÁÓÓÅÍÂÌÅpÅ É ÐpÉÌÉÎËÏ×Ù×ÁÅÍÁÑ ÐpÉ ÓÂÏpËÅ, ËÏÔÏpÁÑ ÜÔÉ pÅÇÉÓÔpÙ ÎÅ ÉÓÐÏÌØÚÕÅÔ, Á ËÁÖÄÙÊ ÔÁËÔ ÎÁ ÓÞÅÔÕ.

p.s. ëÓÔÁÔÉ, ÁÓÓÅÍÂÌÅp avr-as ÉÚ ÓÁÂÖÅ×ÏÊ ÐÏÓÔÁ×ËÉ: pÕÌÅÚ ÆÏpÅ×Á! áÔÍÅÌÏ×ÓËÉÊ ËÁË ÓÔpÁÛÎÙÊ ÓÏÎ...



Alex


Sun, 11 Jul 2004 21:20:31 +0400 Alex Gavrikov wrote to All:

AG> þÔÏ ÓÁÂÖÕ ÓËÁÚÁÔØ, ÞÔÏÂÙ ÏÎ × ÐpÏÌÏÇ\ÜÐÉÌÏÇ ×ÙÚÏ×Á ×ÎÅÛÎÅÊ Æ-ÃÉÉ ÎÅ AG> ×ÐÉÓÙ×ÁÌ push\pop ÎÅÉÓÐÏÌØÚÕÅÍÙÈ pÅÇÉÓÔpÏ×?

AG> åÓÔØ ÏÞÅÎØ ÔpÅÂÏ×ÁÔÅÌØÎÁÑ Ë ×pÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ ÓÅËÃÉÑ ÎÁÐÉÓÁÎÎÁÑ ÎÁ AG> ÁÓÓÅÍÂÌÅpÅ É ÐpÉÌÉÎËÏ×Ù×ÁÅÍÁÑ ÐpÉ ÓÂÏpËÅ, ËÏÔÏpÁÑ ÜÔÉ pÅÇÉÓÔpÙ ÎÅ AG> ÉÓÐÏÌØÚÕÅÔ, Á ËÁÖÄÙÊ ÔÁËÔ ÎÁ ÓÞÅÔÕ.

åÓÔØ ×ÏÌÛÅÂÎÏÅ ÓÌÏ×Ï naked. éÓÐÏÌØÚÕÅÔÓÑ, afair, ÐÕÔÅÍ ÒÁÚÍÅÝÅÎÉÑ × ÏÂßÑ×ÌÅÎÉÉ ÆÕÎËÃÉÉ __attribute__ ((naked)).

AG> p.s. ëÓÔÁÔÉ, ÁÓÓÅÍÂÌÅp avr-as ÉÚ ÓÁÂÖÅ×ÏÊ ÐÏÓÔÁ×ËÉ: pÕÌÅÚ ÆÏpÅ×Á! AG> áÔÍÅÌÏ×ÓËÉÊ ËÁË ÓÔpÁÛÎÙÊ ÓÏÎ...

èÁ, ÎÁÛÅÌ Ó ÞÅÍ ÓÒÁ×ÎÉ×ÁÔØ. ôÅÍ ÂÏÌÅÅ "ÇÎÕÔÙÊ" ÁÓÍ (ËÏÔÏÒÙÊ ËÒÕÔ).

Hello Alex.

11 Jul 04 21:20, you wrote to all:

AG> þÔÏ ÓÁÂÖÕ ÓËÁÚÁÔØ, ÞÔÏÂÙ ÏÎ × ÐpÏÌÏÇ\ÜÐÉÌÏÇ ×ÙÚÏ×Á ×ÎÅÛÎÅÊ Æ-ÃÉÉ ÎÅ AG> ×ÐÉÓÙ×ÁÌ push\pop ÎÅÉÓÐÏÌØÚÕÅÍÙÈ pÅÇÉÓÔpÏ×?

AG> åÓÔØ ÏÞÅÎØ ÔpÅÂÏ×ÁÔÅÌØÎÁÑ Ë ×pÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ ÓÅËÃÉÑ ÎÁÐÉÓÁÎÎÁÑ ÎÁ AG> ÁÓÓÅÍÂÌÅpÅ É ÐpÉÌÉÎËÏ×Ù×ÁÅÍÁÑ ÐpÉ ÓÂÏpËÅ, ËÏÔÏpÁÑ ÜÔÉ pÅÇÉÓÔpÙ ÎÅ AG> ÉÓÐÏÌØÚÕÅÔ, Á ËÁÖÄÙÊ ÔÁËÔ ÎÁ ÓÞÅÔÕ.

ðÏÐÒÏÂÕÊ ÎÅ ÐÒÉÌÉÎËÏ×Ù×ÁÔØ ÆÁÊÌ, Á ÐÉÓÁÔØ ÎÁ ×ÓÔÒÏÅÎÎÏÍ ÁÓÍÅ. ïÎÏ, ËÏÎÅÞÎÏ, ÍÕÔÏÒÎÏ, ÎÏ ÇÉÂËÏ. ðÏ ËÒÁÊÎÅÊ ÍÅÒÅ, ÅÓÔØ ×ÏÚÍÏÖÎÏÓÔØ ÕËÁÚÁÔØ ËÁËÉÅ ÒÅÇÉÓÔÒÙ ÉÓÐÏÌØÚÕÀÔÓÑ

Alexey

Hi, Alex !

ïÄÎÁÖÄÙ, × ÷ÏÓËÒÅÓÅÎØÅ éÀÌØ 11 2004 22:20, Alex Gavrikov ÐÉÓÁÌ All:

AG> þÔÏ ÓÁÂÖÕ ÓËÁÚÁÔØ, ÞÔÏÂÙ ÏÎ × ÐpÏÌÏÇ\ÜÐÉÌÏÇ ×ÙÚÏ×Á ×ÎÅÛÎÅÊ Æ-ÃÉÉ ÎÅ AG> ×ÐÉÓÙ×ÁÌ push\pop ÎÅÉÓÐÏÌØÚÕÅÍÙÈ pÅÇÉÓÔpÏ×?

óÍÏÔÒÅÔØ × ÓÔÏÒÏÎÕ __attribute__ ((naked))

HÅ ÐÒÏÝÁÀÓØ, Alexander Gribanov.

ðÒÉ×ÅÔ Alex!

11 Jul 04 22:20, Alex Gavrikov ÐÉÓÁÌ All:

AG> þÔÏ ÓÁÂÖÕ ÓËÁÚÁÔØ, ÞÔÏÂÙ ÏÎ × ÐpÏÌÏÇ\ÜÐÉÌÏÇ ×ÙÚÏ×Á ×ÎÅÛÎÅÊ Æ-ÃÉÉ ÎÅ AG> ×ÐÉÓÙ×ÁÌ push\pop ÎÅÉÓÐÏÌØÚÕÅÍÙÈ pÅÇÉÓÔpÏ×?

ôÁË ×ÓÅ-ÔÁËÉ × ÐÒÏÌÏÇÅ/ÜÐÉÌÏÇÅ, ÉÌÉ ÐÒÉ ×ÙÚÏ×Å ×ÎÅÛÎÅÊ ÆÕÎËÃÉÉ? ÷ ÐÒÏÌÏÇÅ/ÜÐÉÌÏÇÅ gcc AFAIK ÎÉËÏÇÄÁ ÎÅ ÄÏÌÖÅÎ ÓÏÈÒÁÎÑÔØ × ÓÔÅËÅ ÎÅÉÓÐÏÌØÚÕÅÍÙÅ ÒÅÇÉÓÔÒÙ.

AG> åÓÔØ ÏÞÅÎØ ÔpÅÂÏ×ÁÔÅÌØÎÁÑ Ë ×pÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ ÓÅËÃÉÑ ÎÁÐÉÓÁÎÎÁÑ ÎÁ AG> ÁÓÓÅÍÂÌÅpÅ É ÐpÉÌÉÎËÏ×Ù×ÁÅÍÁÑ ÐpÉ ÓÂÏpËÅ, ËÏÔÏpÁÑ ÜÔÉ pÅÇÉÓÔpÙ ÎÅ AG> ÉÓÐÏÌØÚÕÅÔ, Á ËÁÖÄÙÊ ÔÁËÔ ÎÁ ÓÞÅÔÕ.

óÄÅÌÁÊ ÅÅ ×ÙÚÏ× ÉÚ ÁÓÓÅÍÂÌÅÒÎÏÊ ×ÓÔÁ×ËÉ.

AG> p.s. ëÓÔÁÔÉ, ÁÓÓÅÍÂÌÅp avr-as ÉÚ ÓÁÂÖÅ×ÏÊ ÐÏÓÔÁ×ËÉ: pÕÌÅÚ ÆÏpÅ×Á! AG> áÔÍÅÌÏ×ÓËÉÊ ËÁË ÓÔpÁÛÎÙÊ ÓÏÎ...

avr-as ÎÅ ×ÈÏÄÉÔ × avr-gcc. avr-as ×ÈÏÄÉÔ × avr-binutils.

÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... åÓÌÉ ÄÏÌÇÏ ÄÕÍÁÔØ ÏÄÎÉ É ÔÅ ÖÅ ÍÙÓÌÉ, ÏÎÉ ÓÔÁÎÏ×ÑÔÓÑ ÇÒÑÚÎÙÍÉ.
úÄÒÁ×ÓÔ×ÕÊ, Alexey!

Monday July 12 2004 14:48, you (2:4624/8.208) wrote to me:

AG>> ÎÁ ÁÓÓÅÍÂÌÅpÅ É ÐpÉÌÉÎËÏ×Ù×ÁÅÍÁÑ ÐpÉ ÓÂÏpËÅ, ËÏÔÏpÁÑ ÜÔÉ pÅÇÉÓÔpÙ AG>> ÎÅ ÉÓÐÏÌØÚÕÅÔ, Á ËÁÖÄÙÊ ÔÁËÔ ÎÁ ÓÞÅÔÕ.

AB> ðÏÐÒÏÂÕÊ ÎÅ ÐÒÉÌÉÎËÏ×Ù×ÁÔØ ÆÁÊÌ, Á ÐÉÓÁÔØ ÎÁ ×ÓÔÒÏÅÎÎÏÍ ÁÓÍÅ. ïÎÏ,

HÅ ÔÏÌØËÏ ÍÕÔÏpÎÏ, ÉÎÌÁÊÎ ÁÓÍ ÜÔÏ ÐÏÌÎÙÊ ÐÜ - ÍÏÅÇÏ ÔÅpÐÅÎÉÑ È×ÁÔÁÅÔ ÎÁ ÎÅÞÔÏ ÔÉÐÁ ÐÏÄÅpÇÁÔØ, ÐÏÍÉÇÁÔØ, ÂÉÔÉËÉ - ÃÉËÌÉËÉ... åÓÔØ ÎÏpÍÁÌØÎÙÊ ÐpÑÍÏÊ ÁÓÓÅÍÂÌÅp.

AB> ËÏÎÅÞÎÏ, ÍÕÔÏÒÎÏ, ÎÏ ÇÉÂËÏ. ðÏ ËÒÁÊÎÅÊ ÍÅÒÅ, ÅÓÔØ ×ÏÚÍÏÖÎÏÓÔØ ÕËÁÚÁÔØ AB> ËÁËÉÅ ÒÅÇÉÓÔÒÙ ÉÓÐÏÌØÚÕÀÔÓÑ

ÁÇÁÝÁÓ, ÐpÑÍÏ ÕËÁÚÙ×ÁÔØ ÓÔÁpÛÉÅ pÅÇÉÓÔpÙ ÐpÏÂÏ×ÁÌ? ×ÏÔ ÔÉÐÁ ÔÁË: register unsigned char kewl_index asm ("r28"); ðÏÐpÏÂÕÊ. òÁÓÓËÁÖÅÛØ ÐÏÔÏÍ ËÁË ÓÄÅÌÁÌ.

Alex

úÄÒÁ×ÓÔ×ÕÊ, Harry!

Monday July 12 2004 10:29, you (2:5020/400) wrote to me:

HZ> åÓÔØ ×ÏÌÛÅÂÎÏÅ ÓÌÏ×Ï naked. éÓÐÏÌØÚÕÅÔÓÑ, afair, ÐÕÔÅÍ ÒÁÚÍÅÝÅÎÉÑ HZ> × ÏÂßÑ×ÌÅÎÉÉ ÆÕÎËÃÉÉ __attribute__ ((naked)).

çÕÄ. ïÂßÑ×ÌÑÀ É pÁÚÍÅÝÁÀ: extern "C" void my_func (int, int, int) __attribute__ ((naked)); ×ÏÌÛÅÂÎÏÅ ÓÌÏ×Ï ÎÅ pÁÂÏÔÁÅÔ... þÔÏ ÎÅ ÔÁË ÄÅÌÁÀ? ðÏÍÏÇÁÅÔ -ffixed -rXX, ÎÏ Ñ ÕÖ ÚÁÆÉËÓÉÌ ÔÁËÉÍ ÍÁËÁpÏÍ ÎÅËÏÔÏpÏÅ ËÏÌÉÞÅÓÔ×Ï pÅÇÉÓÔpÏ×, ÅÝÅ É ÎÅÓËÏÌØËÏ ÓÔÁpÛÉÈ ÚÁÂpÁÔØ? ðpÉËÉÄÙ×ÁÀ ËÁËÏÊ ÂÕÄÅÔ Ï×ÅpÈÅÄ. ëÏÍÐÉÌÑÔÏp ÐÕÛÉÔ pÅÇÉÓÔpÙ ÞÅpÅÚ ËÏÔÏpÙÅ ÐÅpÅÄÁÅÔ ÐÁpÁÍÅÔpÙ, Á ÍÎÅ ÉÈ ÓÏÈpÁÎÎÏÓÔØ ÎÅ ÎÕÖÎÁ, ÐpÏÇpÁÍÍÅ ÔÏÖÅ, ÉÂÏ ÏÎÉ ÐÏÓÌÅ ×ÏÚ×pÁÔÁ ÐÅpÅÚÁpÑÖÁÀÔÓÑ ×ÓÅ, É ÅÝÅ ÐÕÛÉÔ r18:r19 - × ÆÕÎËÃÉÉ ÏÎÉ ÔÏÖÅ ÎÅ ÉÓÐÏÌØÚÕÀÔÓÑ.

AG>> p.s. ëÓÔÁÔÉ, ÁÓÓÅÍÂÌÅp avr-as ÉÚ ÓÁÂÖÅ×ÏÊ ÐÏÓÔÁ×ËÉ: pÕÌÅÚ ÆÏpÅ×Á! HZ> èÁ, ÎÁÛÅÌ Ó ÞÅÍ ÓÒÁ×ÎÉ×ÁÔØ. ôÅÍ ÂÏÌÅÅ "ÇÎÕÔÙÊ" ÁÓÍ (ËÏÔÏÒÙÊ ËÒÕÔ).

ôÁËÏÇÏ ÕÄÏ×ÏÌØÓÔ×ÉÑ ÓÏ ×pÅÍÅÎ MACRO-11 ÎÅ ÐÏÌÕÞÁÌ. =)

Alex

úÄÒÁ×ÓÔ×ÕÊ, Alex!

Monday July 12 2004 17:14, you (2:5054/70) wrote to me:

AM> óÄÅÌÁÊ ÅÅ ×ÙÚÏ× ÉÚ ÁÓÓÅÍÂÌÅÒÎÏÊ ×ÓÔÁ×ËÉ.

ðpÏÂÏ×ÁÌ ÎÅÞÔÏ ÔÁËÏÅ:

something.c: my_func ((int) &buff, (int) &buff2, (int) &buff3); . . .

addon.s: .global my_func .global my_func_2 .section .text

my_func:

call my_func_2 ret

my_func_2:

blah blah

ret

.end

HÅ ËÁÎÁÅÔ. ðÅpÅÐÉÓÁÌ ÐpÏÔÏÔÉÐ ÎÁ my_func (void). úÁÓÙÌÁÅÔ × ÓÔÅË ×ÓÅ ÓÔÁpÛÉÅ pÅÇÉÓÔpÙ. ïÎ ÐÏÈÏÄÕ ÉÈ ÐÁpÁÍÉ ÓÏÈpÁÎÑÅÔ, ÅÓÌÉ ÈÏÔØ ÏÄÉÎ ÉÚ ÐÁpÙ ÉÓÐÏÌØÚÕÅÔÓÑ (ÅÓÔØ ÔÁËÏÅ). çÁÄÓÔ×Ï.

AM> avr-as ÎÅ ×ÈÏÄÉÔ × avr-gcc. avr-as ×ÈÏÄÉÔ × avr-binutils.

íÎÅ ËÁËÁÑ pÁÚÎÉÃÁ: ÉÚ ÂÉÎÕÔÉÌÓ ÉÌÉ ÎÅ ÉÚ ÂÉÎÕÔÉÌÓ - ÏÎ ÅÓÔØ É ÜÔÏ ÐpÁ×ÉÌØÎÏ. :)

Alex

11-Jul-04 21:20 Alex Gavrikov wrote to All:

AG> Что сабжу сказать, чтобы он в пpолог\эпилог вызова внешней ф-ции не AG> вписывал push\pop неиспользуемых pегистpов? Что-то я не понял... Обычно вызываемая функция сохраняет использованне ею регистры (если не хватило тех, которые считаются "никто не должен сохранять"). Или речь как раз о том, что вызывающая функция разложила временные переменные по тем регистрам, которые не сохраняются в по соглашению в вызываемых функциях, поэтому сама вызывающая их сохраняет?

AG> p.s. Кстати, ассемблеp avr-as из сабжевой поставки: pулез фоpева! AG> Атмеловский как стpашный сон... Атмеловский действительно гадость, но на сайте атмела всегда лежал бесплатный IAR-овский только ассемблер. Так что и до перехода на avrgcc можно было работать по-человечески :-)

wbr,

Mon, 12 Jul 2004 23:44:39 +0400 Alex Gavrikov wrote to Harry Zhurov:

AG> Monday July 12 2004 10:29, you (2:5020/400) wrote to me:

HZ>> åÓÔØ ×ÏÌÛÅÂÎÏÅ ÓÌÏ×Ï naked. éÓÐÏÌØÚÕÅÔÓÑ, afair, ÐÕÔÅÍ ÒÁÚÍÅÝÅÎÉÑ HZ>> × ÏÂßÑ×ÌÅÎÉÉ ÆÕÎËÃÉÉ __attribute__ ((naked)).

AG> çÕÄ. ïÂßÑ×ÌÑÀ É pÁÚÍÅÝÁÀ: AG> extern "C" void my_func (int, int, int) __attribute__ ((naked)); AG> ×ÏÌÛÅÂÎÏÅ ÓÌÏ×Ï ÎÅ pÁÂÏÔÁÅÔ... þÔÏ ÎÅ ÔÁË ÄÅÌÁÀ?

AG> ðÏÍÏÇÁÅÔ -ffixed -rXX, ÎÏ Ñ ÕÖ ÚÁÆÉËÓÉÌ ÔÁËÉÍ ÍÁËÁpÏÍ ÎÅËÏÔÏpÏÅ ËÏÌÉÞÅÓÔ×Ï AG> pÅÇÉÓÔpÏ×, ÅÝÅ É ÎÅÓËÏÌØËÏ ÓÔÁpÛÉÈ ÚÁÂpÁÔØ? ðpÉËÉÄÙ×ÁÀ ËÁËÏÊ ÂÕÄÅÔ Ï×ÅpÈÅÄ.

AG> ëÏÍÐÉÌÑÔÏp ÐÕÛÉÔ pÅÇÉÓÔpÙ ÞÅpÅÚ ËÏÔÏpÙÅ ÐÅpÅÄÁÅÔ ÐÁpÁÍÅÔpÙ, Á ÍÎÅ ÉÈ AG> ÓÏÈpÁÎÎÏÓÔØ ÎÅ ÎÕÖÎÁ, ÐpÏÇpÁÍÍÅ ÔÏÖÅ, ÉÂÏ ÏÎÉ ÐÏÓÌÅ ×ÏÚ×pÁÔÁ ÐÅpÅÚÁpÑÖÁÀÔÓÑ AG> ×ÓÅ, É ÅÝÅ ÐÕÛÉÔ r18:r19 - × ÆÕÎËÃÉÉ ÏÎÉ ÔÏÖÅ ÎÅ ÉÓÐÏÌØÚÕÀÔÓÑ.

ûÔÒÁÎÎÏ. õ ÍÅÎÑ ÒÁÂÏÔÁÌÏ. óÅÊÞÁÓ ÕÖÅ ÎÅ ÐÏÍÎÀ ÄÅÔÁÌÅÊ, ÐÏÓÍÏÔÒÉ ÔÕÔ
formatting link
ôÁÍ ÐÏÌÎÏÓÔØÀ ÒÁÂÏÞÉÊ ÐÒÉÍÅÒ ËÁË ÒÁÚ Ó ÂÌÏËÉÒÏ×ËÏÊ ÓÏÈÒÁÎÅÎÉÑ/×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÒÅÇÉÓÔÒÏ×.

Hello Alex.

12 Jul 04 23:24, you wrote to me:

AB>> ðÏÐÒÏÂÕÊ ÎÅ ÐÒÉÌÉÎËÏ×Ù×ÁÔØ ÆÁÊÌ, Á ÐÉÓÁÔØ ÎÁ ×ÓÔÒÏÅÎÎÏÍ ÁÓÍÅ. AB>> ïÎÏ,

AG> HÅ ÔÏÌØËÏ ÍÕÔÏpÎÏ, ÉÎÌÁÊÎ ÁÓÍ ÜÔÏ ÐÏÌÎÙÊ ÐÜ - ÍÏÅÇÏ ÔÅpÐÅÎÉÑ È×ÁÔÁÅÔ AG> ÎÁ ÎÅÞÔÏ ÔÉÐÁ ÐÏÄÅpÇÁÔØ, ÐÏÍÉÇÁÔØ, ÂÉÔÉËÉ - ÃÉËÌÉËÉ... åÓÔØ ÎÏpÍÁÌØÎÙÊ AG> ÐpÑÍÏÊ ÁÓÓÅÍÂÌÅp.

üÔÏ ÔÏÔ ÖÅ ÓÁÍÙÊ ÁÓÓÅÍÂÌÅÒ. ÓÓ1 ÐÒÏÐÕÓËÁÅÔ ÔÏ, ÞÔÏ ÎÁÐÉÓÁÎÏ × asm("") ÎÁ ×ÙÈÏÄ, ËÏÔÏÒÙÊ ÔÒÁÎÓÌÉÒÕÅÔÓÑ avr-as

AB>> ËÏÎÅÞÎÏ, ÍÕÔÏÒÎÏ, ÎÏ ÇÉÂËÏ. ðÏ ËÒÁÊÎÅÊ ÍÅÒÅ, ÅÓÔØ ×ÏÚÍÏÖÎÏÓÔØ AB>> ÕËÁÚÁÔØ ËÁËÉÅ ÒÅÇÉÓÔÒÙ ÉÓÐÏÌØÚÕÀÔÓÑ AG> ÁÇÁÝÁÓ, ÐpÑÍÏ ÕËÁÚÙ×ÁÔØ ÓÔÁpÛÉÅ pÅÇÉÓÔpÙ ÐpÏÂÏ×ÁÌ? ×ÏÔ ÔÉÐÁ ÔÁË: AG> register unsigned char kewl_index asm ("r28"); ðÏÐpÏÂÕÊ. òÁÓÓËÁÖÅÛØ AG> ÐÏÔÏÍ ËÁË ÓÄÅÌÁÌ.

ôÁË ÎÅ ÐÒÏÂÏ×ÁÌ. ôÁËÏÊ ËÏÄ ÇÌÀÞÉÔ Ó ÐÒÅÒÙ×ÁÎÉÑÍÉ. ñ ÉÍÅÌ ×ÉÄÕ ÔÁË, ÎÁÐÒÉÍÅÒ, ËÁË ÎÁÐÉÓÁÎÏ × ÍÁËÒÏÓÅ __ELPM_enhanced__

#define __ELPM_enhanced__(addr) \ ({ \ uint32_t __addr32 = (uint32_t)(addr); \ uint8_t __result; \ __asm__ \ ( \ "out %2, %C1" "\n\t" \ "movw r30, %1" "\n\t" \ "elpm %0, Z+" "\n\t" \ : "=r" (__result) \ : "r" (__addr32), \ "I" (_SFR_IO_ADDR(RAMPZ)) \ : "r30", "r31" \ ); \ __result; \ })

ëÓÔÁÔÉ, ÍÏÖÅÛØ ÐÏÐÒÏÂÏ×ÁÔØ ÐÒÉÌÉÎËÏ×ÁÔØ ÆÕÎËÃÉÀ, Á ×ÙÚÏ× ÅÅ ÏÆÏÒÍÉÔØ ÎÁ ×ÓÔÒÏÅÎÎÏÍ ÁÓÍÅ, ÇÄÅ ÐÅÒÅÞÉÓÌÉÔØ ÉÓÐÏÌØÚÕÅÍÙÅ Ô×ÏÅÊ ÆÕÎËÃÉÅÊ ÒÅÇÉÓÔÒÙ.

asm ( "call myfunc" "\n\t" : : : "r1" "r2" "ÐÒÏÞÉÅ ÎÕÖÎÙÅ ÒÅÇÉÓÔÒÙ" )

Alexey

AG> þÔÏ ÓÁÂÖÕ ÓËÁÚÁÔØ, ÞÔÏÂÙ ÏÎ × ÐpÏÌÏÇ\ÜÐÉÌÏÇ ×ÙÚÏ×Á ×ÎÅÛÎÅÊ Æ-ÃÉÉ ÎÅ AG> ×ÐÉÓÙ×ÁÌ AG> push\pop ÎÅÉÓÐÏÌØÚÕÅÍÙÈ pÅÇÉÓÔpÏ×?

÷ ÓÁÍÏÊ ÆÕÎËÃÉÉ? áÔÒÉÂÕÔ naked:

void _overflow0_ (void) __attribute__ ((naked)); void _overflow0_ (void) { asm volatile (".global gdb_break\n" "gdb_break:\t" "push r27\n" "in r27, __SREG__\n" "cli\n" "sts regs+28, r28\n" "sts regs+29, r29\n" "ldi r28, lo8 (regs)\n" "ldi r29, hi8 (regs)\n"

....

"ldd r28, Y+1\n" "lds r29, regs+29\n" "brne _stepping_"); asm volatile ("out __SREG__, r30\n" "pop r30\n" "ret"); }

ðÒÁ×ÄÁ ÆÕÎËÃÉÑ ÐÏÌÕÞÁÅÔÓÑ ÎÁÐÉÓÁÎÎÏÊ ËÁË ÂÙ ÎÁ C...

AG>> p.s. ëÓÔÁÔÉ, ÁÓÓÅÍÂÌÅp avr-as ÉÚ ÓÁÂÖÅ×ÏÊ ÐÏÓÔÁ×ËÉ: pÕÌÅÚ ÆÏpÅ×Á! AG>> áÔÍÅÌÏ×ÓËÉÊ ËÁË ÓÔpÁÛÎÙÊ ÓÏÎ... OR> áÔÍÅÌÏ×ÓËÉÊ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÇÁÄÏÓÔØ, ÎÏ ÎÁ ÓÁÊÔÅ ÁÔÍÅÌÁ ×ÓÅÇÄÁ ÌÅÖÁÌ OR> ÂÅÓÐÌÁÔÎÙÊ IAR-Ï×ÓËÉÊ ÔÏÌØËÏ ÁÓÓÅÍÂÌÅÒ. ôÁË ÞÔÏ É ÄÏ ÐÅÒÅÈÏÄÁ ÎÁ avrgcc OR> ÍÏÖÎÏ ÂÙÌÏ ÒÁÂÏÔÁÔØ ÐÏ-ÞÅÌÏ×ÅÞÅÓËÉ :-)

äÌÑ ÓÏ×ÓÅÍ ÕÖ ÐÌÏÈÏÇÏ ÁÓÓÅÍÂÌÅÒÁ ÍÏÖÎÏ ×ÐÅңÄ ÐÕÓËÁÔØ cpp ÉÌÉ m4. ôÏÌØËÏ ÏÔÌÁÖÉ×ÁÔØÓÑ ÐÏ ÔÅËÓÔÕ ÐÒÏÇÒÁÍÙÍ ÕÖÅ ÎÅ ÐÏÌÕÞÉÔÓÑ.
ðÒÉ×ÅÔ Alex!

13 Jul 04 00:46, Alex Gavrikov ÐÉÓÁÌ Alex Mogilnikov:

AM>> óÄÅÌÁÊ ÅÅ ×ÙÚÏ× ÉÚ ÁÓÓÅÍÂÌÅÒÎÏÊ ×ÓÔÁ×ËÉ.

AG> ðpÏÂÏ×ÁÌ ÎÅÞÔÏ ÔÁËÏÅ:

AG> addon.s: AG> .global my_func AG> .global my_func_2 AG> .section .text

AG> my_func:

AG> call my_func_2 AG> ret

üÔÏ ÎÅ ÁÓÓÅÍÂÌÅÒÎÁÑ _×ÓÔÁ×ËÁ_, ÜÔÏ ÏÔÄÅÌØÎÙÊ ÁÓÓÅÍÂÌÅÒÎÙÊ _ÍÏÄÕÌØ_. ðÏÄ ÁÓÓÅÍÂÌÅÒÎÏÊ _×ÓÔÁ×ËÏÊ_ Ñ ÐÏÄÒÁÚÕÍÅ×ÁÌ ÚÁÍÅÎÉÔØ ÓÉÛÎÙÊ ËÏÄ ÔÉÐÁ

... my_func(); ...

ÎÁ ÓÉÛÎÙÊ ÖÅ ËÏÄ ÔÉÐÁ

... asm volatile ("call my_func"); ...

ËÏÔÏÒÙÊ Ó ÔÏÞËÉ ÚÒÅÎÉÑ ËÏÍÐÉÌÑÔÏÒÁ ×ÙÚÏ×ÏÍ ÆÕÎËÃÉÉ ÎÅ Ñ×ÌÑÅÔÓÑ, ËÏÍÐÉÌÑÔÏÒ ÐÒÏÓÔÏ ÔÕÐÏ ×ÓÔÁ×ÌÑÅÔ ÓÔÒÏÞËÕ "call my_func" × ×ÙÈÏÄÎÏÊ ÁÓÓÅÍÂÌÅÒÎÙÊ ÔÅËÓÔ. óÍÏÔÒÉ ÏÐÉÓÁÎÉÅ ÜÔÏÊ ÆÉÞÉ × ÄÏËÕÍÅÎÔÁÃÉÉ.

AM>> avr-as ÎÅ ×ÈÏÄÉÔ × avr-gcc. avr-as ×ÈÏÄÉÔ × avr-binutils.

AG> íÎÅ ËÁËÁÑ pÁÚÎÉÃÁ: ÉÚ ÂÉÎÕÔÉÌÓ ÉÌÉ ÎÅ ÉÚ ÂÉÎÕÔÉÌÓ - ÏÎ ÅÓÔØ É ÜÔÏ AG> ÐpÁ×ÉÌØÎÏ. :)

òÁÚÎÉÃÁ × ÔÏÍ, ÞÔÏ ÐÒÏÞÉÔÁÅÔ Ô×ÏÅ ÐÉÓØÍÏ ÞÁÊÎÉË, ËÏÔÏÒÙÊ ÄÏ ÓÉÈ ÐÏÒ ÍÕÞÁÅÔÓÑ Ó ÁÔÍÅÌÏ×ÓËÉÍ ÁÓÓÅÍÂÌÅÒÏÍ - É ÎÁÞÎÅÔ (ÎÅ ÒÁÚÏÂÒÁ×ÛÉÓØ) ×ÙËÁÞÉ×ÁÔØ gcc. á ÐÏÔÏÍ ÏËÁÖÅÔÓÑ, ÞÔÏ ÎÅÓËÏÌØËÏ ÄÅÓÑÔËÏ× ÍÅÇÁÂÁÊÔ ÏÎ ÔÑÎÕÌ ÚÒÑ. :) ÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... åÓÌÉ ÄÏÌÇÏ ÄÕÍÁÔØ ÏÄÎÉ É ÔÅ ÖÅ ÍÙÓÌÉ, ÏÎÉ ÓÔÁÎÏ×ÑÔÓÑ ÇÒÑÚÎÙÍÉ.
ðÒÉ×ÅÔ Alex!

13 Jul 04 00:24, Alex Gavrikov ÐÉÓÁÌ Alexey Boyko:

AG> ÁÇÁÝÁÓ, ÐpÑÍÏ ÕËÁÚÙ×ÁÔØ ÓÔÁpÛÉÅ pÅÇÉÓÔpÙ ÐpÏÂÏ×ÁÌ? ×ÏÔ ÔÉÐÁ ÔÁË: AG> register unsigned char kewl_index asm ("r28"); ðÏÐpÏÂÕÊ. òÁÓÓËÁÖÅÛØ AG> ÐÏÔÏÍ ËÁË ÓÄÅÌÁÌ.

ëÁËÉÅ ÐÒÏÂÌÅÍÙ? ====== test.c ======== int f(void) { register unsigned char r28 asm ("r28");

r28 = 77;

return r28; } ===================== ===== test.s ======== f: ldi r28,lo8(77) mov r24,r28 clr r25 ret =====================

éÌÉ ×ÏÔ: ======= test.c ====== int f(void) { register unsigned char * r28 asm ("r28");

r28 = (unsigned char*)1234;

*r28++ = 77;

return *r28; } ==================== ===== test.c ======= f: ldi r28,lo8(1234) ldi r29,hi8(1234) ldi r24,lo8(77) st Y,r24 adiw r28,1 ld r24,Y clr r25 ret ====================

÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... óÌÅÐÏÊ ðØÀ, çÌÕÈÏÊ åÍ...
ðÒÉ×ÅÔ Harry!

13 Jul 04 09:31, Harry Zhurov ÐÉÓÁÌ Alex Gavrikov:

HZ> ûÔÒÁÎÎÏ. õ ÍÅÎÑ ÒÁÂÏÔÁÌÏ. óÅÊÞÁÓ ÕÖÅ ÎÅ ÐÏÍÎÀ ÄÅÔÁÌÅÊ, ÐÏÓÍÏÔÒÉ HZ> ÔÕÔ

formatting link
ôÁÍ HZ> ÐÏÌÎÏÓÔØÀ ÒÁÂÏÞÉÊ ÐÒÉÍÅÒ ËÁË ÒÁÚ Ó ÂÌÏËÉÒÏ×ËÏÊ HZ> ÓÏÈÒÁÎÅÎÉÑ/×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÒÅÇÉÓÔÒÏ×.

Alex ÎÅÔÏÞÎÏ ÏÐÉÓÁÌ ÐÒÏÂÌÅÍÕ. ëÁË Ñ ÐÏÎÑÌ, ÅÇÏ ÉÎÔÅÒÅÓÏ×ÁÌ ×Ï×ÓÅ ÎÅ ÐÒÏÌÏÇ/ÜÐÉÌÏÇ, ÇÅÎÅÒÁÃÉÀ ËÏÔÏÒÙÈ ÚÁÐÒÅÝÁÅÔ naked, Á ÓÏÈÒÁÎÅÎÉÅ ÒÅÇÉÓÔÒÏ× ÐÒÉ ×ÙÚÏ×Å ÆÕÎËÃÉÉ ×ÙÚÙ×ÁÀÝÉÍ ËÏÄÏÍ.

÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... åÓÌÉ ÄÏÌÇÏ ÄÕÍÁÔØ ÏÄÎÉ É ÔÅ ÖÅ ÍÙÓÌÉ, ÏÎÉ ÓÔÁÎÏ×ÑÔÓÑ ÇÒÑÚÎÙÍÉ.

Tue, 13 Jul 2004 14:05:55 +0400 Alex Mogilnikov wrote to Harry Zhurov:

HZ>> ÐÏÌÎÏÓÔØÀ ÒÁÂÏÞÉÊ ÐÒÉÍÅÒ ËÁË ÒÁÚ Ó ÂÌÏËÉÒÏ×ËÏÊ HZ>> ÓÏÈÒÁÎÅÎÉÑ/×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ÒÅÇÉÓÔÒÏ×.

AM> Alex ÎÅÔÏÞÎÏ ÏÐÉÓÁÌ ÐÒÏÂÌÅÍÕ. ëÁË Ñ ÐÏÎÑÌ, ÅÇÏ ÉÎÔÅÒÅÓÏ×ÁÌ ×Ï×ÓÅ ÎÅ AM> ÐÒÏÌÏÇ/ÜÐÉÌÏÇ, ÇÅÎÅÒÁÃÉÀ ËÏÔÏÒÙÈ ÚÁÐÒÅÝÁÅÔ naked, Á ÓÏÈÒÁÎÅÎÉÅ ÒÅÇÉÓÔÒÏ× AM> ÐÒÉ ×ÙÚÏ×Å ÆÕÎËÃÉÉ ×ÙÚÙ×ÁÀÝÉÍ ËÏÄÏÍ.

ôÏÇÄÁ ÍÏÖÅÔ ÌÏÇÉÞÎÏ ÀÚÁÔØ ÉÎÌÁÊÎÙ - ÏÐÔÉÍÉÚÁÔÏÒ ÔÏÇÄÁ ÐÒÏÓÅÞÅÔ, ÞÔÏ ÒÅÇÉÓÔÒÙ ÎÅ ÉÓÐÏÌØÚÕÀÔÓÑ É ÎÅ ÂÕÄÅÔ ÉÈ ÓÏÈÒÁÎÑÔØ. ëÒÏÍÅ ÔÏÇÏ, ÕÞÉÔÙ×ÁÑ, ÞÔÏ ÔÁËÁÑ ËÒÉÔÉÞÎÏÓÔØ, ÞÔÏ ÌÉÛÎÅÅ ÓÏÈÒÁÎÅÎÉÅ ÒÅÇÉÓÔÒÁ ÍÅÛÁÅÔ, ÏÔÓÕÔÓÔ×ÉÅ ÎÁËÌÁÄÎÙÈ ÒÁÓÈÏÄÏ× ÎÁ ×ÙÚÏ×/×ÏÚ×ÒÁÔ ÔÏÖÅ ÏËÁÖÅÔÓÑ ÎÅ ÌÉÛÎÉÍ.
úÄÒÁ×ÓÔ×ÕÊ, Alexey!

Tuesday July 13 2004 11:29, you (2:4624/8.208) wrote to me:

AB> #define __ELPM_enhanced__(addr) \ AB> "I" (_SFR_IO_ADDR(RAMPZ)) \ AB> : "r30", "r31" \

äÏ ÞÅÇÏ Ñ ÎÅ ÌÀÂÌÀ ÉÎÌÁÊÎÁÓÍ, ÁÖ ÖÕÔØ. =)

AB> ëÓÔÁÔÉ, ÍÏÖÅÛØ ÐÏÐÒÏÂÏ×ÁÔØ ÐÒÉÌÉÎËÏ×ÁÔØ ÆÕÎËÃÉÀ, Á ×ÙÚÏ× ÅÅ ÏÆÏÒÍÉÔØ AB> asm ( AB> "call myfunc" "\n\t" AB> : AB> : AB> : "r1" "r2" "ÐÒÏÞÉÅ ÎÕÖÎÙÅ ÒÅÇÉÓÔÒÙ" AB> )

HÁ ÎÏ×ÏÊ ÚÁÄÁÞÅ ÐÏÐpÏÂÕÀ. á ÜÔÕ ÕÖÅ ÐÅpÅÐÉÓÁÌ ÎÁ ÁÓÓÅÍÂÌÅpÅ.

Alex

úÄÒÁ×ÓÔ×ÕÊ, Alex!

Tuesday July 13 2004 14:38, you (2:5054/70) wrote to me:

AM> ÎÁ ÓÉÛÎÙÊ ÖÅ ËÏÄ ÔÉÐÁ AM> ... AM> asm volatile ("call my_func"); AM> ...

êÅÓ! ðÏÐpÏÂÕÀ, ÎÏ ÕÖÅ ÐÏÚÖÅ, ÉÂÏ ÐÅpÅÐÉÓÁÌ ÎÁ ÁÓÓÅÍÂÌÅpÅ ÐÏÞÔÉ ×ÓÅ.

AM> ÐÏÒ ÍÕÞÁÅÔÓÑ Ó ÁÔÍÅÌÏ×ÓËÉÍ ÁÓÓÅÍÂÌÅÒÏÍ - É ÎÁÞÎÅÔ (ÎÅ ÒÁÚÏÂÒÁ×ÛÉÓØ) AM> ×ÙËÁÞÉ×ÁÔØ gcc. á ÐÏÔÏÍ ÏËÁÖÅÔÓÑ, ÞÔÏ ÎÅÓËÏÌØËÏ ÄÅÓÑÔËÏ× ÍÅÇÁÂÁÊÔ ÏÎ AM> ÔÑÎÕÌ ÚÒÑ. :)

ñ ÓËÁÞÉ×ÁÌ ÐÁËÅÔ Ó ÎÉÛÔÑËÁÍÉ ÐÏÄ ÎÁÚ×ÁÎÉÅÍ WinAVR, ÓÓÙÌËÁ ÅÓÔØ ÎÁ avrfreaks

Alex

úÄÒÁ×ÓÔ×ÕÊ, Alex!

Tuesday July 13 2004 14:53, you (2:5054/70) wrote to me:

AG>> ÁÇÁÝÁÓ, ÐpÑÍÏ ÕËÁÚÙ×ÁÔØ ÓÔÁpÛÉÅ pÅÇÉÓÔpÙ ÐpÏÂÏ×ÁÌ? ×ÏÔ ÔÉÐÁ ÔÁË: AM> ëÁËÉÅ ÐÒÏÂÌÅÍÙ? AM> register unsigned char r28 asm ("r28"); AM> r28 = 77; AM> return r28;

^Y

AM> r28 = (unsigned char*)1234; AM> *r28++ = 77; AM> return *r28;

ôÕÔ ÎÉËÁËÉÈ ÐpÏÂÌÅÍ ÎÅÔ - ÜÔÏ ÏÔÏp×ÁÎÎÙÅ ÏÔ ÖÉÚÎÉ ÐpÉÍÅpÙ, ËÏÔÏpÙÊ ÎÉÞÅÇÏ ÐÕÔÎÏÇÏ ÎÅ ÄÅÌÁÀÔ. åÓÌÉ ËÏÄ ÐÏÂÏÌÅÅ É pÁÂÏÔÁ Ó ÕËÁÚÁÔÅÌÑÍÉ, ÔÏ ËÏÍÐÉÌÅp ÎÅ ÄÁÓÔ ÉÈ ÀÚÁÔØ × ÔÁËÏÍ ×ÉÄÅ - Ñ ÐpÏÂÏ×ÁÌ. íÏÖÎÏ ÕËÁÚÁÔØ, ÞÔÏ ÄÏÌÖÅÎ ÂÙÔØ ÉÎÄÅËÓÎÙÊ pÅÇÉÓÔp, Á ÕÖ ÏÎ ÐÏÄÓÔÁ×ÉÔ, ÞÔÏ ÅÓÔØ × ÎÁÌÉÞÉÉ Ó×ÏÂÏÄÎÏÇÏ. ëÏÎÅÞÎÏ-ÖÅ Ñ ×ÉÄÅÌ ÐpÉÍÅpÙ Ó Ñ×ÎÙÍ ÕËÁÚÁÎÉÅÍ pÅÇÉÓÔpÏ×, ÎÏ ÔÏÇÄÁ ËÏÍÐÉÌÑÔÏp ÁÆÁÉË ÏÄÉÎ ÈpÅÎß ÚÁÓÕÎÅÔ ÉÈ × ÓÔÅË. üÔÏ ÈÏpÏÛÏ, ÞÔÏ ÏÎ ÎÅÓËÏÌØËÏ ÐÁpÁÎÏÉÄÁÌÅÎ. HÏ ÄÌÑ ÍÏÅÊ ÚÁÄÁÞÉ ÜÔÏ ÎÅ ÓÏ×ÓÅÍ ÈÏpÏÛÏ ÂÙÌÏ. ëÏÇÄÁ pÁÚpÁÂÁÔÙ×ÁÌ ÄÅ×ÁÊÓ, ÔÏ ÐÏÓÞÉÔÁÌ ÉÚÂÙÔÏÞÎÙÍ ÄÏÂÁ×ÉÔØ ÏÄÉÎ ÍÉËpÏËÏÎÔpÏÌÌÅp

- Á ÐÌÁÔÙ ÕÖÅ ÉÚÇÏÔÏ×ÌÅÎÙ, ÝÁ ×ÏÔ ÈÁËÅpÓÔ×ÏÍ ÐpÉÈÏÄÉÔÓÑ ÚÁÎÉÍÁÔØÓÑ, ÌÁÄÎÏ ÜÔÁ pÁÂÏÔÁ ÎÅ ÓpÏÞÎÁÑ ÓÏ×ÓÅÍ.

Alex

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required