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

 
 
> Размер таблицы прерываний STM32
Rash
сообщение May 26 2015, 06:51
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



День добрый.
Подскажите, как получить размер таблицы прерываний __vector_table из файла startup_stm32f40_41xxx.s , использую IAR.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rash
сообщение May 28 2015, 06:04
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Спасибо всем. результат таков:
1. через __segment_size получаем размер таблицы векоров, но это значение нельзя использовать препроцессором, т.е.
Код
#pragma section=".intvec"
#define FLASH_VECTOR_TABLE_SIZE        ((uint32_t)__segment_size(".intvec"))

#define FLASH_WRITE_BLOCK_SIZE         (512)

// !!! --- Это работать не будет ---
#if (FLASH_WRITE_BLOCK_SIZE < FLASH_VECTOR_TABLE_SIZE)
  #error "Error FLASH_WRITE_BLOCK_SIZE"
#endif


2. через EXPORT __vector_table в ассемблере (startup_stm32f40_41xxx.s ), затем extern uin32_t __vector_table или extern uin32_t* __vector_table в си, можно определить адрес расположения __vector_table или значение записанное по этому адресу __vector_table[0], но размер таблицы не определить, т.к. опереция sizeof(__vector_table)/sizeof(__vector_table[0]) выдаст 1.
Go to the top of the page
 
+Quote Post
SSerge
сообщение May 28 2015, 10:27
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Rash @ May 28 2015, 13:04) *
Спасибо всем. результат таков:
1. через __segment_size получаем размер таблицы векоров, но это значение нельзя использовать препроцессором, т.е.

Так не удивительно, что первый, что второй методы работают одинаково: через определение символов (меток) для линкера, и только линкер знает их реальные значения, получившиеся в процессе сборки.
Впрочем, если Вы не сами пишете .s, а используете готовый, то размер таблицы можно вычислить зная максимальный номер вектора. Надо только учесть ещё 16 слов для векторов с отрицательными номерами.

Ищем определение typedef enum{ ... } IRQn_Type;, дописываем две строчки:
Код
typedef enum{
  .....
  HASH_RNG_IRQn               = 80,     /*!< Hash and RNG global interrupt                                     */
  FPU_IRQn                    = 81      /*!< FPU global interrupt                                              */
  ,__MAX_VECTOR_NUM__       /* получит значение на 1 больше максимального номера вектора */
} IRQn_Type;
#define  VECTOR_TABLE_SIZE  (4*(__MAX_VECTOR_NUM__-1+16))


ЗЫ. Сравнивая размер таблицы векторов с FLASH_WRITE_BLOCK_SIZE Вы проявляете завидную дальновидность sm.gif
Пока что даже у самого толстого F756 этот размер составляет (97+16)*4 = 452 байта.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rash   Размер таблицы прерываний STM32   May 26 2015, 06:51
- - Obam   Цитата(Rash @ May 26 2015, 10:51) День до...   May 26 2015, 07:14
- - ViKo   В Keil в стартапе есть такая строка после векторов...   May 26 2015, 07:51
|- - aaarrr   Цитата(ViKo @ May 26 2015, 10:51) Но как ...   May 26 2015, 08:22
|- - ViKo   Цитата(aaarrr @ May 26 2015, 11:22) Cнача...   May 26 2015, 08:43
|- - aaarrr   Цитата(ViKo @ May 26 2015, 11:43) Вот обр...   May 26 2015, 15:22
|- - KnightIgor   Цитата(ViKo @ May 26 2015, 09:43) Порылся...   May 27 2015, 07:29
- - SSerge   В IAR ещё проще Код#pragma section=".intvec...   May 26 2015, 08:42
- - Axel   В CrossWorks (GNU) работает это: CODEextern void*...   May 27 2015, 03:49
|- - SSerge   Цитата(Axel @ May 27 2015, 10:49) Может б...   May 27 2015, 07:37
|- - Сергей Борщ   Цитата(SSerge @ May 27 2015, 10:37) Но у ...   May 27 2015, 08:36
- - Golikov A.   а почему размер указателя разделить на размер указ...   May 28 2015, 07:43
- - Rash   всё правильно, что даёт 1, я имел виду, что т.о. н...   May 28 2015, 10:17
- - Rash   .s беру стандартные из CMSIS, FLASH_WRITE_BLOCK_SI...   May 28 2015, 10:57
- - Golikov A.   Если не ошибаюсь там есть начало и конец таблицы и...   May 28 2015, 11:02
- - Rash   конца таблицы (хотя он вроде как есть) я не нашёл,...   May 28 2015, 11:06
|- - scifi   Цитата(Rash @ May 28 2015, 14:06) Бутлоад...   May 28 2015, 12:19
- - Golikov A.   ЦитатаБутлоадер в основной прошивке запишет CRC ос...   May 28 2015, 11:35
- - ViKo   CRC я дописываю в конец файла прошивки. Естественн...   May 28 2015, 13:05
- - Rash   да в принципе не важно где хранить в дыре или в ко...   May 28 2015, 13:24
- - ViKo   В Keil: Код__Vectors DCD __initial_sp ...   May 28 2015, 13:31
- - Golikov A.   ЦитатаЭтот же размер я храню в области векторов, к...   May 28 2015, 18:57
|- - ViKo   Цитата(Golikov A. @ May 28 2015, 21:57) а...   May 29 2015, 04:00
- - Rash   Цитата(Golikov A. @ May 28 2015, 21:57) а...   May 28 2015, 19:27
- - Golikov A.   а кто передавать то требует? вы передаете только п...   May 28 2015, 20:12
- - Golikov A.   да все равно память на борту лежит, какая разница ...   May 29 2015, 09:45
- - Rash   Появилось время попробовать вариант 2 код в .s фай...   Jun 5 2015, 10:23
- - Golikov A.   вас спасет assert через #if, вероятнее такое дей...   Jun 5 2015, 11:09
- - toweroff   а если указать, что это значение - во флеш (конста...   Jun 5 2015, 21:31


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

 


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


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