Jump to content
    

Отладка в "IAR for ARM" кода, сгенерированного иным компилятором.

4 минуты назад, jcxz сказал:

Не использую.

Ну это ССЗБ.

3 минуты назад, Vasily_ сказал:

Работодатель жмот ?

Солидная фирма возьмёт в аренду дырокол.

9 минут назад, jcxz сказал:

и ни одного оригинального.

Используйте "for evaluation purposes", Segger не возражает.

Share this post


Link to post
Share on other sites

15 минут назад, VladislavS сказал:

Солидная фирма возьмёт в аренду дырокол.

Латвийские работодатели они такие! :crazy:

Share this post


Link to post
Share on other sites

1 hour ago, jcxz said:

Ну да... и ни одного оригинального. 

Я не видел оригинального в жизни. Все самодельные и ничего - Озоню когда надо. Дело в желании.

Share this post


Link to post
Share on other sites

1 hour ago, Vasily_ said:

Латвийские работодатели они такие! :crazy:

Скажем так.... 
Деньги считать умеют все.
В большом корпоративе, конечно, вопросов меньше. Только где они, а где мы.
А для гусара домоработника с мотором - лицензия на IAR за 3к - как кроту якорь, туда же и подписка на Altium.

Тут ещё ладно, GCC... 
А ведь по идее может и потребоватся какой нибудь "индустриально сертифицированный комптлятор", чтоб совсем кошерно.

Share this post


Link to post
Share on other sites

1 минуту назад, girts сказал:

А для гусара домоработника с мотором - лицензия на IAR за 3к - как кроту якорь, туда же и подписка на Altium.

Так про гусаров то тут речи и нет, речь про официально и бесплатно!

Share this post


Link to post
Share on other sites

2 часа назад, Vasily_ сказал:

Латвийские работодатели они такие! :crazy:

Российские - такие же. :mda: На последнем рос. месте работы был у нас ЕДИНСТВЕННЫЙ купленный во времена царя Гороха оригинальный J-Link. Ещё тот - желтенький. (кто помнит такие? :wink: )

Потом, во времена оны, его успешно спалили, и далее - только клоны.

2 часа назад, Vasily_ сказал:

Работодатель жмот ? 😂

Вопрос обычно ставится так: Можно купить

  • либо ОДИН, но ОРИГИНАЛЬНЫЙ, и простой (без всяких Ethernet, Ultra и т.п.);
  • либо НЕСКОЛЬКО, но КЛОНОВ, но зато = Ultra, Ethernet, гальваническая развязка и прочие плюшки.

Что выберут программисты тут?

Думаю - вопрос риторический.  :wink:

1 час назад, x893 сказал:

Я не видел оригинального в жизни. Все самодельные и ничего - Озоню когда надо. Дело в желании.

Видимо вы никогда не работали в серьёзной конторе, где всё ПО должно быть легальным. Где собственники - иностранные инвесторы. Желать можно дома.

У нас тут даже некоторые библиотеки запрещают использовать. Которые даже вроде freeware, но с не совсем подходящими условиями лицензий.

Share this post


Link to post
Share on other sites

1 minute ago, jcxz said:

Вопрос обычно ставится так: Можно купить

  • либо ОДИН, но ОРИГИНАЛЬНЫЙ, и простой (без всяких Ethernet, Ultra и т.п.);
  • либо НЕСКОЛЬКО клонов, но зато = Ultra, Ethernet, гальваническая развязка и прочие плюшки.

Что выберут программисты тут?

Думаю - вопрос риторический.  :wink:

Реторический или нет, хз....

Если на кантору, то 
НЕСКОЛЬКО клонов и ОДИН оригинал.
И вся кантора работает клонами, при необходимости прикрываясь оригиналом.

Как в своё время с Widows - оффициальная лицензия только на фронтенде, тоесть, у секретарши. Ибо если придут проверять, то это первый комп, которого увидят.

Share this post


Link to post
Share on other sites

13 minutes ago, jcxz said:

Видимо вы никогда не работали в серьёзной конторе, где всё ПО должно быть легальным.

Серьёзность конторы определяется не легальностью ПО.
Хотя тут каждый сам решает. Проблемы решать или лицензиями махать.

Share this post


Link to post
Share on other sites

Здесь обсуждение исходной темы сразу свернуло с исходного вопроса в русло: "Чем другим можно компилить и отлаживать."

А вот Всемирный Разум сразу среди вариантов решения предложил самостоятельно написать конвертор: "Или конвертировать DWARF -> IAR формат, но таких инструментов нет в свободном доступе."

Или выдвигал предложения на тему: "Как заставить IAR работать с DWARF форматом отладочной инфы".

Не уходил в оффтопик.... :wink:

4 часа назад, VladislavS сказал:

IAR давно поддерживает __attribute__((packed))  __attribute__((aligned(16)))  __attribute__((section(".init"))).

Более того - прогресс идёт и в GCC: в GCC уже ввели IAR-style атрибут __packed, а в последней версии (v14.2) - и недостающие intrinsic-и появились: __builtin_arm_rbit(), __builtin_clz(), ...    :wink:

Share this post


Link to post
Share on other sites

3 часа назад, jcxz сказал:

Может кто сразу подскажет - как его улучшить?

Листинги можно изготавливать с помощью objdump:

objdump -dCS <file.o>

Получается нечто вроде:

Спойлер
build/prj/vm1765/ps/cam/obj/drc.o:     file format elf32-littlearm


Disassembly of section .text._Z8drc_fun2tPt:

00000000 <drc_fun2(unsigned short, unsigned short*)>:

    return RemoteControlMessageJob::RC_OK;
}
//---------------------------------------------------------------------------
RemoteControlMessageJob::ResponseCode drc_fun2(const uint16_t count, uint16_t *params)
{
   0:   e92d4070    push    {r4, r5, r6, lr}
   4:   e1a05000    mov r5, r0
    print("drc fun2: count %d\n", count);
   8:   e3000000    movw    r0, #0
{
   c:   e1a04001    mov r4, r1
    print("drc fun2: count %d\n", count);
  10:   e3400000    movt    r0, #0
  14:   e1a01005    mov r1, r5
  18:   ebfffffe    bl  0 <print(char const*, ...)>

    if(count != 2)
  1c:   e3550002    cmp r5, #2
  20:   1a000009    bne 4c <drc_fun2(unsigned short, unsigned short*)+0x4c>
    {
        return RemoteControlMessageJob::RC_INCORRECT_PARAMETER_COUNT;
    }

    if(params[0] > 10)
  24:   e1d430b0    ldrh    r3, [r4]
  28:   e353000a    cmp r3, #10
  2c:   8a000008    bhi 54 <drc_fun2(unsigned short, unsigned short*)+0x54>
    {
        return RemoteControlMessageJob::RC_INVALID_PARAMETER_VALUE;
    }

    params[2] = params[1];
  30:   e1d420b2    ldrh    r2, [r4, #2]
    params[1] = params[0];
    params[0] = (2 << 8) | 255; // {data_count = 2, return_code = 255}
  34:   e3e01cfd    mvn r1, #64768  @ 0xfd00
    return RemoteControlMessageJob::RC_OK;
  38:   e3a00000    mov r0, #0
    params[1] = params[0];
  3c:   e1c430b2    strh    r3, [r4, #2]
    params[0] = (2 << 8) | 255; // {data_count = 2, return_code = 255}
  40:   e1c410b0    strh    r1, [r4]
    params[2] = params[1];
  44:   e1c420b4    strh    r2, [r4, #4]
    return RemoteControlMessageJob::RC_OK;
  48:   e8bd8070    pop {r4, r5, r6, pc}
        return RemoteControlMessageJob::RC_INCORRECT_PARAMETER_COUNT;
  4c:   e3a00005    mov r0, #5
  50:   e8bd8070    pop {r4, r5, r6, pc}
        return RemoteControlMessageJob::RC_INVALID_PARAMETER_VALUE;
  54:   e3a00006    mov r0, #6
}
  58:   e8bd8070    pop {r4, r5, r6, pc}

 

Читабельность, конечно, так себе, но что-то понять можно. Самый большой недостаток -- на высоких уровнях оптимизации привязка исходного кода к кодогенерации не всегда верная, ориентироваться на неё можно только условно. В целом она всё равно помогает навигации. Возможно, это из-за сложного CPU с длинным конвейером (здесь Cortex-A9) -- компилятор перемежает инструкции, чтобы избежать простоев конвейера.

 

Share this post


Link to post
Share on other sites

8 минут назад, dxp сказал:

Читабельность, конечно, так себе, но что-то понять можно. Самый большой недостаток -- на высоких уровнях оптимизации привязка исходного кода к кодогенерации не всегда верная, ориентироваться на неё можно только условно.

Это понятно.

Уже нашёл, что добавление ключа '-g' в строку запуска GCC добавляет строки исходного кода в генерируемый листинг. Привязка конечно условная.

44 минуты назад, jcxz сказал:

Более того - прогресс идёт и в GCC: в GCC уже ввели IAR-style атрибут __packed

Правда ввели через одно место - IAR требует: "__packed struct ЛяЛя {", а GCC = "struct __packed ЛяЛя {".   :ireful1:

И как быть???? :dash2:  Пришлось изобрести:

#if defined(__ICCARM__) //IAR Compiler

#define _packed __attribute__((packed))

#elif defined(__GNUC__) //GNU Compiler

#define _packed __attribute__((packed))

#endif

...

struct _packed ЛяЛя {
  ...
};

Красивее не придумывается...

Share this post


Link to post
Share on other sites

51 минуту назад, jcxz сказал:

И как быть????

struct __attribute__((packed)) ЛяЛя { };

 

Share this post


Link to post
Share on other sites

Надо просто нормально писать атрибутами сразу, потому что их там несколько десятков, а не только packed.

Share this post


Link to post
Share on other sites

18 минут назад, Arlleex сказал:

Надо просто нормально писать атрибутами сразу, потому что их там несколько десятков, а не только packed.

Как же это делать, если ранее IAR не поддерживал эти __attribute__((...))?

Да и не было ранее этого требования - сборки под GCC. Пришли новые рукамиводители, со своим видением - и появилось. А как заранее развидеть - кто завтра ещё придёт и какие правила придумает? Может скажет "компилить только инструментами европейского производства!" И опять все на IAR побежим.  :biggrin:

А в РФ - вот скажут вам завтра, что "компилить нужно только отечественными инструментами!" Так как "Кейл - иноагенты писали на деньги госдепа".  :biggrin: Думаете - не будет такого?  :wink:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...