Flash & GCC

Jun 26, 2006 4 Replies

Hello, All!



HÅ... ×ÓÅ-ÔÁËÉ ÍÏÎÓÔÒÏÉÄÁÌØÎÙÅ ËÏÎÓÔÒÕËÃÉÉ ÐÏÌÕÞÁÀÔÓÑ. éÌÉ ÞÔÏ-ÔÏ ÎÅ ÔÁË ÄÅÌÁÀ. HÁÐÒÉÍÅÒ ÅÓÔØ ÆÕÎËÃÉÑ Õ ËÏÔÏÒÏÊ ÏÄÉÎ ÉÚ ÁÒÇÕÍÅÎÔÏ× short. ôÅÐÅÒØ Ñ ÄÅÌÁÀ ÍÅÎÀÛËÕ, É ÍÎÅ ÎÁÄÏ ÐÅÒÅÄÁÔØ ÜÔÏÊ ÆÕÎËÃÉÉ short, ËÏÔÏÒÙÊ ÎÁÈÏÄÉÔÓÑ × ÏÚÕ, ÎÏ ÓÓÙÌËÁ ÎÁ ÎÅÇÏ ÎÁÈÏÄÉÔÓÑ × ÔÁÂÌÉÃÅ ×Ï ×ÌÅÛÅ. ðÒÉÈÏÄÉÔÓÑ ÐÅÒÅÄÁ×ÁÔØ ÔÁË:



*(uint16_t *)(pgm_read_word(&adr_menu->adr_number)), × ÉÁÒÅ ÂÙÌÏ ×ÓÅ-ÔÁËÉ ÐÒÏÝÅ: *adr_menu->adr-number :)


With best regards, Igor. Time: 18:14 Date: 26 éÀÎ 06


ðÒÉ×ÅÔ Igor!

26 Jun 06 18:13, Igor Ulanov ÐÉÓÁÌ All:

IU> HÅ... ×ÓÅ-ÔÁËÉ ÍÏÎÓÔÒÏÉÄÁÌØÎÙÅ ËÏÎÓÔÒÕËÃÉÉ ÐÏÌÕÞÁÀÔÓÑ.

IU> *(uint16_t*)(pgm_read_word(&adr_menu->adr_number)), IU> × ÉÁÒÅ ÂÙÌÏ ×ÓÅ-ÔÁËÉ ÐÒÏÝÅ: *adr_menu->adr-number :)

éÓÐÏÌØÚÕÊ ÛÁÂÌÏÎÙ... ÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... óÏÂÁËÁ - ×ÄÒÕÇ ÞÅÌÏ×ÅËÁ...

Все проблемы -- от каши в голове.

Существует два различающихся подхода по реализации C-компиляторов на платформах с несколькими раздельными адресными пространствами (например, память программ, ЭСППЗУ, ОЗУ внутреннее, ОЗУ внешнее...) Первый подразумевает, что множествнные адресные пространства -- головная боль программиста. Коиторый должен понимать, что в таком случае возможно, а что нет, что приведение типа, например, тут невозможно. Второй подход подразумевает введение некого универсального указателя, в котором бы кодировался тип памяти (конкретное адресное пространство) и "рантайм" компилятора на этапе выполнения осуществлет все преобразования. Практичэески, второй способ более удобен для программиста, а второй может давать более быстрый и короткий код.

См. выше.

Напиши макрос или функцию:

#define ee_ref(ee_addr) ({ \ inline typeof(*ee_addr) f(typeof(ee_addr) ref) { \ switch (sizeof(*ref)) { \ case 1: return pgm_read_char(&ref); \ case 2: return pgm_read_word(&ref); \ case 4: return pgm_read_dword(&ref); \ }}; *f(ee_addr); })

Используй C++ с шаблонами.

PS: О мнении Г. Шепелева относительно такого стиля кода -- догадываюсь...

PPS: -std=gnu99

Tue Jun 27 2006 19:44, Kirill Frolov wrote to Igor Ulanov:

KF> Все проблемы -- от каши в голове. KF> Существует два различающихся подхода по реализации C-компиляторов на KF> платформах с несколькими раздельными адресными пространствами KF> Первый KF> подразумевает, что множествнные адресные пространства -- головная боль KF> программиста. KF> Второй подход KF> подразумевает введение некого универсального указателя, в котором бы KF> кодировался тип памяти Файл = память? Интернет = память?

VLV

"Любите книги - в них видно фиги" (c)

ðÏÍÎÉÛØ, Igor, ÞÔÏ ÂÙÌÏ Ó ÷ÁÍÉ pÏ×ÎÏ ÛÅÓÔØ ÌÅÔ ÎÁÚÁÄ? ðÏÎÅÄÅÌØÎÉË éÀÎØ 26 2006 18:13, Igor Ulanov wrote to All:

IU> ðpÉÈÏÄÉÔÓÑ ÐÅpÅÄÁ×ÁÔØ ÔÁË: IU> *(uint16_t*)(pgm_read_word(&adr_menu->adr_number)), × ÉÁpÅ ÂÙÌÏ IU> ×ÓÅ-ÔÁËÉ ÐpÏÝÅ: *adr_menu->adr-number :)

äÙË ÍÁËpÏÓ ÎÁÐÉÛÉ...

íÁÊËÌ

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required