Easyelectronics.ru

Электроника для всех
Текущее время: 25 ноя 2017, 07:06

Часовой пояс: UTC + 5 часов



    • 10 шт. 2-слоя 100*100mm 2$. Быстрый заказ: JLCPCB.com
    • JLCPCB - это крупнейшая фабрика PCB прототипов в Китае.
    • Имеющий более 290,000 клиентов и выполняющий более 8,000 заказов в день.
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Таблица прерываний на C
СообщениеДобавлено: 09 авг 2017, 16:40 
Только пришел

Зарегистрирован: 29 сен 2012, 03:28
Сообщения: 5
Добрый день.

Наткнулся на интересный код на C.
Никак не могу понять синтаксиса. Внешне похоже на указатель
функции.

Если есть гуру, которые могли бы растолковать этот код, буду благодарен.
Взято отсюда
https://github.com/farcaller/arm-demos/blob/master/04-hello-world/platform/common/isr.c

Код:
__attribute__ ((section(".isr_vector")))
void (* const isr_vector_table[])(void) = {
    &_stack_base,
    main,             // Reset
    isr_nmi,          // NMI
    isr_hardfault,    // Hard Fault
    0,                // CM3 Memory Management Fault
    0,                // CM3 Bus Fault
    0,                // CM3 Usage Fault
    &_boot_checksum,  // NXP Checksum code
    0,                // Reserved
    0,                // Reserved
    0,                // Reserved
    isr_svcall,       // SVCall
    0,                // Reserved for debug
    0,                // Reserved
    isr_pendsv,       // PendSV
    isr_systick,      // SysTick
};


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таблица прерываний на C
СообщениеДобавлено: 09 авг 2017, 16:48 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 01 авг 2016, 10:47
Сообщения: 180
Откуда: Таганрог
Не гуру, но попробую растолковать

Объявление и инициализация одномерного массива. в качестве элементов указатель на функции (в данном случае вектора). 0 - значит не указателя.

по сути будет нечто вроде такого:

void main (void);
void isr_nmi (void);
и так далее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таблица прерываний на C
СообщениеДобавлено: 09 авг 2017, 17:03 
Старожил

Зарегистрирован: 22 июн 2010, 21:53
Сообщения: 951
Откуда: Brussels
Как уже сказали - это просто инициализация глобального массива указателей на функции. Именно на функции для того, что бы иметь возможность писать при инициализации имя функции без сложных кастов. Понятно что можно положить любой указатель в этот массив, как это сделано со stack_base.

Т.к. задан атрибут секции - линкер положит этот массив указателей по указанному адресу (.isr_vector из map файла).

Т.е. по факту - просто заполняем область памяти определенными адресами (указателями).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таблица прерываний на C
СообщениеДобавлено: 09 авг 2017, 17:05 
Только пришел

Зарегистрирован: 29 сен 2012, 03:28
Сообщения: 5
Понял, спасибо за разъяснение.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB