• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

UDK: Общие разговоры

pvvx

Активный участник сообщества
Не назначить атрибут ICACHE_RODATA_ATTR у const char * srvContenErr[]
Код:
static const char srvContenErr00[] ICACHE_RODATA_ATTR = "Ok";                        // ERR_OK          0
static const char srvContenErr01[] ICACHE_RODATA_ATTR = "Out of memory error";        // ERR_MEM        -1
static const char srvContenErr02[] ICACHE_RODATA_ATTR = "Buffer error";            // ERR_BUF        -2
static const char srvContenErr03[] ICACHE_RODATA_ATTR = "Timeout";                    // ERR_TIMEOUT    -3
static const char srvContenErr04[] ICACHE_RODATA_ATTR = "Routing problem";            // ERR_RTE        -4
static const char srvContenErr05[] ICACHE_RODATA_ATTR = "Operation in progress";    // ERR_INPROGRESS -5
static const char srvContenErr06[] ICACHE_RODATA_ATTR = "Illegal value";            // ERR_VAL        -6
static const char srvContenErr07[] ICACHE_RODATA_ATTR = "Operation would block";    // ERR_WOULDBLOCK -7
static const char srvContenErr08[] ICACHE_RODATA_ATTR = "Connection aborted";        // ERR_ABRT       -8
static const char srvContenErr09[] ICACHE_RODATA_ATTR = "Connection reset";        // ERR_RST        -9
static const char srvContenErr10[] ICACHE_RODATA_ATTR = "Connection closed";        // ERR_CLSD       -10
static const char srvContenErr11[] ICACHE_RODATA_ATTR = "Not connected";            // ERR_CONN       -11
static const char srvContenErr12[] ICACHE_RODATA_ATTR = "Illegal argument";        // ERR_ARG        -12
static const char srvContenErr13[] ICACHE_RODATA_ATTR = "Address in use";            // ERR_USE        -13
static const char srvContenErr14[] ICACHE_RODATA_ATTR = "Low-level netif error";    // ERR_IF         -14
static const char srvContenErr15[] ICACHE_RODATA_ATTR = "Already connected";        // ERR_ISCONN     -15
const char * srvContenErr[] = {
    srvContenErr00,
    srvContenErr01,
    srvContenErr02,
    srvContenErr03,
    srvContenErr04,
    srvContenErr05,
    srvContenErr06,
    srvContenErr07,
    srvContenErr08,
    srvContenErr09,
    srvContenErr10,
    srvContenErr11,
    srvContenErr12,
    srvContenErr13,
    srvContenErr14,
    srvContenErr15
} ;
Не работают никакие атрибуты, кроме section(). https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html
Задать массив или переменную по спец.адресу можно только путем объявления в ld или лезть в Makefile
и добавлять: ld --section-start=rtc_mem_section=0x60001100
для: char rtc_mem[192] __attribute__ ((section ("rtc_mem_section")));
Нет оптимизации - объединения одинаковых стрингов в секции ".irom.text".
+ Создает не оптимальный код:
Код:
        uint32_t *ptr = (uint32_t *)(RTC_MEM_BASE);

            *ptr++ = errn;
            *ptr++ = RSR(EXCCAUSE);
            *ptr++ = RSR(EPC1);
            *ptr++ = RSR(EPC2);
            *ptr++ = RSR(EPC3);
            *ptr++ = RSR(EXCVADDR);
            *ptr++ = RSR(DEPC);
Каждый раз делает загрузку адреса, даже если указать register uint32_t *ptr (!):
Код:
            *ptr++ = errn;
401001ac:    0329         s32i.n    a2, a3, 0
            *ptr++ = RSR(EXCCAUSE);
401001ae:    03e840           rsr.exccause    a4
401001b1:    fff531           l32r    a3, 40100188 <wdt_task+0x48>
401001b4:    0349         s32i.n    a4, a3, 0
            *ptr++ = RSR(EPC1);
401001b6:    03b140           rsr.epc1    a4
401001b9:    fff431           l32r    a3, 4010018c <wdt_task+0x4c>
401001bc:    0349         s32i.n    a4, a3, 0
            *ptr++ = RSR(EPC2);
401001be:    03b240           rsr.epc2    a4
401001c1:    fff331           l32r    a3, 40100190 <wdt_task+0x50>
401001c4:    0349         s32i.n    a4, a3, 0
            *ptr++ = RSR(EPC3);
401001c6:    03b340           rsr.epc3    a4
401001c9:    fff231           l32r    a3, 40100194 <wdt_task+0x54>
401001cc:    0349         s32i.n    a4, a3, 0
            *ptr++ = RSR(EXCVADDR);
401001ce:    03ee40           rsr.excvaddr    a4
401001d1:    fff131           l32r    a3, 40100198 <wdt_task+0x58>
401001d4:    0349         s32i.n    a4, a3, 0
            *ptr++ = RSR(DEPC);
401001d6:    03c040           rsr.depc    a4
401001d9:    fff031           l32r    a3, 4010019c <wdt_task+0x5c>
401001dc:    0349         s32i.n    a4, a3, 0
Смещениями пользоваться вооще не умеет, если адрес задан абсолютный, даже в теле struct (!), начинает лепить горбатого:
Код:
    ieee80211_phy_init(g_ic.g.wifi_store.phy_mode); // phy_mode
40240097:    ffe1c1           l32r    a12, 4024001c <_irom0_text_start+0x1c>
4024009a:    05dc22           addmi    a2, a12, 0x500
4024009d:    7228         l32i.n    a2, a2, 28
4024009f:    112405           call0    402512e0 <ieee80211_phy_init>
Вся прошивка забита "memw" вместо EXTW, хотя cache нема у данного CPU.
The MEMW instruction causes all memory and cache accesses (loads, stores, acquires,
releases, prefetches, and cache operations, but not instruction fetches) before itself in
program order to access memory before all memory and cache accesses (but not instruction
fetches) after. At least one MEMW should be executed in between every load or
store to a volatile variable. The Multiprocessor Synchronization Option provides
some additional instructions that also affect memory ordering in a more focused fashion.
MEMW has broader applications than these other instructions (for example, when reading
and writing device registers), but it also may affect performance more than the synchronization
instructions.


И т.д. и т.п.
Кошмарный компилятор! :)
Кто выставлял такие опции транслятору?
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Кто выставлял такие опции транслятору?
Нууу этот вопрос уместнее задать авторам патчей для gcc и newlib, я взял готовые с github
https://github.com/jcmvbkbc/gcc-xtensa ветка 4.8.2, хотя jcmvbkbc активно пилит 4.9.2
https://github.com/jcmvbkbc/newlib-xtensa/tree/xtensa
https://github.com/fpoussin/esp-binutils

Скрипт с помощью которого я собираю компилятор тут
Опции сборки можно посмотреть, там все прозрачно, для сборки нужен mingw, толстый канал в интернет и несколько часов терпения.
 

jcmvbkbc

New member

jcmvbkbc

New member
что нового или исправления старого грозит в GCC 5.1 применительно к xtensa?
Для конфигурации lx106 -- только call0 и уменьшение минимального выравнивания в секциях данных при компиляции с -Os.
Кроме того там добавилась поддержка zero-overhead loops, но в lx106 нет этой опции.
Из остального -- в g++ добавится поддержка C++14.
 

CHERTS

Moderator
Команда форума
Пока я ничего не предлагаю, открытая реализация компилятора для ESP не самая совершенная, но для сторонников опенсорса и бесплатности других альтернатив нет. Использовать или не использовать ломаные платные варианты компилятора и среды разработки это уже каждый выбирает сам.
 

pvvx

Активный участник сообщества
Пока я ничего не предлагаю, открытая реализация компилятора для ESP не самая совершенная, но для сторонников опенсорса и бесплатности других альтернатив нет. Использовать или не использовать ломаные платные варианты компилятора и среды разработки это уже каждый выбирает сам.
Понял. Предлагаете мучатся и утверждаете что бесплатное всегда хуже :) У той среды есть демонстрационный период... To request an evaluation please click here. :)
 

CHERTS

Moderator
Команда форума
Понял. Предлагаете мучатся и утверждаете что бесплатное всегда хуже :)
Какие глубокие выводы вы сделали из моих слов о том, что gcc для esp несовершенен. Следуя вашей логике если какой-то опенсорсный софт несовершенен, то значит он хуже платного? По моему вы неправильно интерпретируете мои слова и делаете некорректные выводы.

Вы бы сравнили вначале 2 компилятора, опенсорсный из DevKit и тот, что платный от Cadence, а потом уже и дискутировали, что плохо, а что хорошо. Я сильно сомневаюсь, что Cadence написали свой компилятор, он используют тот же gcc, но возможно со своими патчами, но даже в этом случае они не имеют права его продавать и закрывать код. Продают он скорее всего набор своих библиотек и саму среду разработки, которая скорее всего основана на Eclipse.
 

jcmvbkbc

New member
Я сильно сомневаюсь, что Cadence написали свой компилятор, он используют тот же gcc, но возможно со своими патчами
Здесь вы ошибаетесь. Компилятор у них свой -- дальний родственник open64.

даже в этом случае они не имеют права его продавать и закрывать код
Мне кажется, вы неправильно понимаете суть GPL: они имеют полное право продавать производные работы, и только те, кто законным образом их использует имеют право требовать исходники.
 

pvvx

Активный участник сообщества
Вы бы сравнили вначале 2 компилятора
Код:
int main( int argc, char **argv )
{
    unsigned int *ptr = (unsigned int *)(0x20001100);

        *ptr++ = RSR(EXCCAUSE);
        *ptr++ = RSR(EPC1);
        *ptr++ = RSR(EPC2);
        *ptr++ = RSR(EPC3);
        *ptr++ = RSR(EXCVADDR);
        *ptr++ = RSR(DEPC);
}
Код:
600001b8 <main>:
600001b8:    ffae41           l32r    a4, 60000070 <_stext+0x44>
600001bb:    03e870           rsr.exccause    a7
600001be:    c06472           s32i    a7, a4, 0x300
600001c1:    03b160           rsr.epc1    a6
600001c4:    c16462           s32i    a6, a4, 0x304
600001c7:    03b250           rsr.epc2    a5
600001ca:    c26452           s32i    a5, a4, 0x308
600001cd:    03b330           rsr.epc3    a3
600001d0:    c36432           s32i    a3, a4, 0x30c
600001d3:    03ee20           rsr.excvaddr    a2
600001d6:    c46422           s32i    a2, a4, 0x310
600001d9:    03c030           rsr.depc    a3
600001dc:    c56432           s32i    a3, a4, 0x314
600001df:    f00d         ret.n
И в MakeFile лазать не требуется.
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Мне кажется, вы неправильно понимаете суть GPL: они имеют полное право продавать производные работы, и только те, кто законным образом их использует имеют право требовать исходники.
Согласен, тут я не прав и неправильно страктовал GPL, продавать GPL они могут, требовать получить исходники я могу если куплю у них бинарники. Но если я купил то что идет по GPL я имею полное право потом открыть код и свободно распространять его через свой сайт.
 

jcmvbkbc

New member
Согласен, тут я не прав и неправильно страктовал GPL, продавать GPL они могут, требовать получить исходники я могу если куплю у них бинарники. Но если я купил то что идет по GPL я имею полное право потом открыть код и свободно распространять его через свой сайт.
В общих чертах -- да, так. Но на практике может возникнуть 100500 проблем, начиная с того, что они могут владеть GPL кодом на отличных от GPL условиях (например, купив его по другой лицензии у другого такого владельца) и заканчивая суммой с большим количеством нулей за лицензию, и с ещё бОльшим количеством нулей за то, чтобы получить исходники в судебном порядке.
 

CHERTS

Moderator
Команда форума
Да так. Ничего не меняется уже квартал в UDK.
А как ему поменяться? Подскажите пожалуйста? В наличии только один опенсорсный компилятор, я не настолько "крутой" программист чтобы его переписать, чтобы он собирал код по-правильному. Увы, мои возможности ограничены, как и мои познания в области компиляторов.

UDK опенсорсный продукт, любой желающий может внести свой вклад, я даже готов поделиться частью пожертвований за этот вклад, правда пока желающих внести свой вклад 0 (нуль).
Прибыли от UDK я не получаю, пожертвования от русскоязычного сегмента копеешны, от заграничных пользователей больше, я не скрываю и могу сказать, что за время существования UDK мне пожертвовали около 7 т.р., этого хватит на оплату хостинга проекта, и на бутылку хорошего коньяка мне и все. Как я сказал выше, я готов поделиться этими скромными пожертвованиями с теми, кто хочет внести свой вклад в развитие UDK, но таких людей увы нет.
 

pvvx

Активный участник сообщества
А как ему поменяться? Подскажите пожалуйста?
Обрасти плагинами к Eclipse. А то народу сложно создавать новые проекты - надо что ковырять в данном, патчить какие-то файлы. По тому и не шлют "пожертвования".
А код с определенными опциями, как вы назвали - "в платном SDK" (не дословно :) ) получается значительно меньше и шустрее...
И если я пришлю "пожертвование", то уверен, что ситуация не измениться :)
SDK 'скомпилен' , точнее либы, у Espressif - Xtensa Compiler Version 8.0.1 RELEASE_NAME="RC-2010.1". Там и то работает некоторая "оптимизация". А уже прошло много лет...
А без этого мне кое что не странслировать. Не на asm же писать? Похоже придется отказываться в OpenSDK от данного UDK...
Попозже ещё покопаю опции транслятору и линковщику, но пока не выходит, вроде всё уже испробовал...
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Обрасти плагинами к Eclipse. А то народу сложно создавать новые проекты - надо что ковырять в данном, патчить какие-то файлы. По тому и не шлют "пожертвования".
Я бы с радостью, но увы я не силен в написании плагинов к Eclipse, а свободного времени на изучение этого у меня увы нет :(
Никто не говорил, что писать прошивки под ESP будет легко и просто, но без UDK это сделать еще сложнее.
Альтернативы UDK в виде платных и даже бесплатных должны быть и нужны сообществу, чтобы было между чем выбирать.

И если я пришлю "пожертвование", то уверен, что ситуация не измениться
Это не изменит ситуацию, ну если Вы только не пришлете пару тыс.долларов на которые я смогу уволившись с основной работы, изучить и написать плагины для Eclipse ;)

Ну и самое главное в "пожертвовании" - это добровольный шаг в знак благодарности за проделанную работу и за работу которая будет проделана в будущем. Каждый сам решает, поблагодарить автора или нет. Я например уже много лет поддерживаю проект FreeBSD, мои пожертвования небольшие, то из тысяч таких как я складывается сумма, на которую FreeBSD может развиваться и я очень благодарен коллективу FreeBSD за то, что они делают, я использую эту ОС ежедневно и мне она нравится и поэтому я их поддерживаю. Я не пишу им письма, что мне нравиться в их деятельности, а что не нравиться и что бы я хотел видеть в будущем, я просто их благодарю.
 
Последнее редактирование:

anakod

Moderator
Команда форума
Сверху Снизу