Easyelectronics.ru

Электроника для всех
Текущее время: 26 сен 2018, 00:28

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • 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
Сообщения: 258
Откуда: Таганрог
Не гуру, но попробую растолковать

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

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

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


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

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

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

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


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

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


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

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


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

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


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

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

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