реклама на сайте
подробности

 
 
> Embedded assembler syntax in C, Как создать внутри кода на Си участок из ассемблерного кода
MySOL
сообщение Mar 12 2018, 07:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 17-06-12
Пользователь №: 72 370



Доброго времени суток!
Прошу подсказать или показать пример, как создать в коде на Си участок из ассемблерного кода (пишу критическую секцию и важно быть уверенным во времени исполнения участка). Нужно ли подключать какие-либо библиотеки и проводить дополнительные настройки?
Пример на сайте ARM видел. Я пытался скопировать его. Компилятор понимает директивы, но команды ассемблера не понимает.
Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Mar 13 2018, 13:25
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Поначалу функцию имел следующую:
Код
__asm void HardFault_Handler(void)
{
    TST LR, #4
    ITE EQ
    MRSEQ R0, MSP        ; Main Stack was used, put MSP in R0
    MRSNE R0, PSP        ; Process Stack was used, put PSP in R0
    LDR R0, [R0, #24]    ; Get stacked PC from stack
    
    LDR R1, =0x40020418    ; GPIOB->BSRR
    MOVS R2, #0x0002    ; Bit 2
    STRH R2, [R1, #2]    ; Reset bit (LED_ON)
    B .
}

Здесь без ассемблера не обойтись. Потом упростил. Не пробовал писать ее на С. Думаю, такой простоты на С не получится.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 13 2018, 13:43
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Mar 13 2018, 15:25) *
Поначалу функцию имел следующую:
__asm void HardFault_Handler(void)

Ну - у меня тоже обработчик fault-ов на асм написан. Только он в несколько десятков раз больше. biggrin.gif
Защёлкивает содержимое всех важных регистров, кадра стека, разной информации о fault-е и сохраняет в структуру в памяти.
И расположен он в асм-файле. А потом оттуда - переход на си-функцию, которая эту всю инфу уже использует (выплёвывает в UART в аналог "синего окна смерти" или пишет в журнал событий и перегружает МК).
А вот атомарные операции с эксклюзивным доступом я написал на си, с помощью intrinsic-функций, типа (атомарная операция "сравнение и обмен"):
Код
inline u32 AtomicCmpSwp(u32 volatile *ptr, u32 newVal, u32 cmpVal)
{
  u32 i, i1;
  do {
    i = __LDREX(ptr);
    if (i == cmpVal) i1 = __STREX(newVal, ptr);
  } while (i == cmpVal && i1 == 1);
  return i;
}

Аналог виндовой InterlockedCompareExchange()...

PS: Если автору "важно быть уверенным во времени исполнения участка" - нужно для минимизации времени запрета прерываний внутри критической секции, то использование подобных операций эксклюзивного доступа даёт возможность обойтись вообще без запретов прерывания. Если уж так хочется.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MySOL   Embedded assembler syntax in C   Mar 12 2018, 07:35
- - Baser   По ссылке на сайте АРМ, там руководство по использ...   Mar 12 2018, 11:04
- - jcxz   Цитата(MySOL @ Mar 12 2018, 09:35) Прошу ...   Mar 12 2018, 11:05
- - ViKo   "ARM ® Compiler v5.06 for µVision armcc User...   Mar 12 2018, 11:22
- - MySOL   Господа, спасибо за ответы! Почитал кейловски...   Mar 12 2018, 13:18
- - ViKo   Не обращайте внимания. Это не компилятор, и не на ...   Mar 12 2018, 13:31
|- - MySOL   Цитата(ViKo @ Mar 12 2018, 16:31) Не обра...   Mar 12 2018, 13:39
|- - jcxz   Если нужно именно в си-код добавить участок асм-ко...   Mar 12 2018, 14:24
|- - ViKo   Цитата(jcxz @ Mar 12 2018, 17:24) Если ну...   Mar 12 2018, 14:41
|- - jcxz   Цитата(ViKo @ Mar 12 2018, 16:41) В Кейл ...   Mar 12 2018, 18:12
|- - KRS   Цитата(jcxz @ Mar 12 2018, 21:12) Но и см...   Mar 12 2018, 18:54
|- - ViKo   Цитата(jcxz @ Mar 12 2018, 21:12) Никак. ...   Mar 13 2018, 04:13
|- - jcxz   Цитата(ViKo @ Mar 13 2018, 06:13) Какой п...   Mar 13 2018, 12:59
- - ViKo   Цитата(jcxz @ Mar 13 2018, 16:43) Ну - у ...   Mar 13 2018, 14:04
- - jcxz   Цитата(ViKo @ Mar 13 2018, 16:04) Есть пр...   Mar 13 2018, 14:20


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 03:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016