Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/32: Рейтинг темы: голосов - 32, средняя оценка - 4.84
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

Stm32f103 примитивная работа с таймерами на ассемблере

05.06.2021, 00:36. Показов 7527. Ответов 59

Студворк — интернет-сервис помощи студентам
здрасьте. не думал, что так может процессе гуглежа попал на один из российский форумов разработчиков в тему, где кто-то просит помочь разобраться в таймерах и это оказался мой одногруппник. я прочитал тему и мне стало интересно, попытался разобраться, но не смог. Скажите, есть тут люди, которые хорошо разбирается в таймерах? я не могу сформулировать лучше вопрос, чем мой одногруппник, поэтому просто спрошу как он


если вам несложно то скажите что имено необходимо для TIM1 чтобы взаимодействовать со светодиодом. как этот таймер включает и выключает его? счетчик достиг нуля, какое именно прерывание и как сработает? просто мне непонятно, TIM1 заявлен как очень настраиваемый таймер, и поэтому было бы логично ему иметь не свои собственные прерывания ,а работать с прерываниями тех устройств, для которых таймер тикает.

действительно, какое имено нужно прерывание для того чтобы светодиод зажегся или погас?
Code
1
2
3
4
•регстр счетчика (TIMx_CNT).
• Регстр прескалера (TIMx_PSC).
• Регстр автозагрузки (TIMx_ARR).
• Регстр счетчика повторений (TIMx_RCR).
положили значение в TIMx_CNT, высчитали и положили значение в пределитель Регстр прескалера (TIMx_PSC) настроили на то что когда счетчик достигнет максимального результата к примеру 5000, то что должно произойти? прерывание? какое? какое нужно прерывание, чтобы мигнул светодиод?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2021, 00:36
Ответы с готовыми решениями:

Работа с таймерами
Пацаны привет!!!!!!!!!!!!!! Я хочу зделать секундомера!!!!!!!!!!!!!! Мне нужно в одной форме чтоби было два секундомера, первий я...

Работа с таймерами
Есть один класс. В нем заведен тред QThread. В его функции run - объявлены четыре локальных таймера, которые должны запускаться после...

Работа с таймерами
Всем привет. Задача довольна проста, но реализовать ее у меня не получается. Нужно запустить импульс длинной в 100 мс, после его начала...

59
 Аватар для COKPOWEHEU
4144 / 2722 / 433
Регистрация: 09.09.2017
Сообщений: 12,055
09.06.2021, 02:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от pcmax Посмотреть сообщение
я так сказал? или вы так поняли?
Вы утверждали, что если "поломать" начальное значение стека и объявления секций, то работать не будет.
Цитата Сообщение от pcmax Посмотреть сообщение
мы с вами в прошлых темах разошлись во мнения касаемо его
Да?
Цитата Сообщение от pcmax Посмотреть сообщение
если я запускаю ее из sram то многих проблем удается избежать. вот и все. а в чем причина я не знаю.
Это уже больше похоже на аппаратную проблему. Может с питанием что-то, может boot плохо подтянуты. Может просто камень бракованный попался.
Цитата Сообщение от pcmax Посмотреть сообщение
да. но на моем кажется 64кб.
Флешку с ОЗУ не путайте. 64 кБ это флеш.
Каково полное название вашего контроллера, STM32F103C8T6?
Цитата Сообщение от pcmax Посмотреть сообщение
.space 0x9c
зачем?
Чтобы выполняемый код не залезал на таблицу прерываний. В реальных программах таблицу векторов прописывают полностью, там этот .space не нужен. Потому что стартап файл (где проводится инициализация и находится таблица) штука общая, его менять от проекта к проекту не нужно.
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
09.06.2021, 07:25
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В Пилюлях же вроде C8T6 используются. У них 20 кБ.
Что нашли, то и припаяли.
1
09.06.2021, 09:06

Не по теме:

Цитата Сообщение от politoto Посмотреть сообщение
Что нашли, то и припаяли.
Что выкопали из брака, то и промаркировали как stm32f103, а потом впаяли на плату в режиме жесткой экономии припоя.

0
09.06.2021, 11:23

Не по теме:

Цитата Сообщение от pcmax Посмотреть сообщение
я утверждаю, что секция .text нужна. некоторые утверждают, что нет.
Когда для сборки используется компоновщик из binutils, нужна секция, которую сценарий сборки не игнорирует, а помещает в один из сегментов (или секций) выходного объектного файла.
as создает 3 секции, и пока не переключится на другую секцию, пишет весь код в секцию .text. Поэтому директива .section не обязательна, пока не нужно определять символы или что-либо писать в другие секции, а не в секцию .text.

Пока не разделили демку на файлы и секции, можно попытаться и без компоновщика обойтись.
Использовать as как абсолютный ассемблер.
Assembler
1
2
3
4
5
6
7
8
9
10
11
.thumb /* wabs.s */
 
"BASE"=01000000000
"FLASH":
 
SP_main:    .word 0x20001000
reset:      .word init + 1 + "BASE"
 
init:
 
1:  wfi;    b 1b
Bash
1
2
3
arm-none-eabi-as wabs.s -al
arm-none-eabi-objcopy a.out -O binary flash.out
hd flash.out
Code
1
2
3
4
5
6
7
8
9
10
11
12
ARM GAS  wabs.s                         page 1
   1                    .thumb
   2
   3                    "BASE"=01000000000
   4                    "FLASH":
   5
   6 0000 00100020      SP_main:        .word 0x20001000
   7 0004 09000008      reset:          .word init + 1 + "BASE"
   8
   9                    init:
  10
  11 0008 30BFFDE7      1:      wfi;    b 1b
Code
1
2
00000000  00 10 00 20 09 00 00 08  30 bf fd e7              |... ....0...|
0000000c
Когда почувствуете, что пора разделить проект на секции и модули, придёт время заняться компоновщиком.
Написать для него нужный сценарий, распределяющий исходные секции по областям адресного пространства МК.
https://sourceware.org/binutil... EMORY.html

0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
09.06.2021, 21:05  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Чтобы выполняемый код не залезал на таблицу
COKPOWEHEU, это интересно. спасибо

Добавлено через 19 минут
Цитата Сообщение от politoto Посмотреть сообщение
Пока не разделили демку на файлы и секции, можно попытаться и без компоновщика обойтись.
не получится.
Code
1
-Ttext=0x08000000
ложит код программы по адресу 0x08000000 именно с этого места она начинает выполняться. у вас работает програмка без ld? или вы только мне свои предположение выдаете, чтобы я их проверил на stm32f103?

Добавлено через 1 час 16 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Чтобы выполняемый код не залезал на таблицу прерываний.
COKPOWEHEU, а как расчитали значения 0x9c? почему не 0x014C?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
09.06.2021, 22:07
Цитата Сообщение от pcmax Посмотреть сообщение
как расчитали значения 0x9c? почему не 0x014C?
10.1.2 Interrupt and exception vectors
Table 63. Vector table for other STM32F10xxx devices
ППриоритетMnemo Адрес
24 31 TIM1_BRKTIM1 Break interrupt 0x0000_00A0
25 32 TIM1_UPTIM1 Update interrupt 0x0000_00A4
26 33 TIM1_TRG_COMTIM1 Trigger and Commutation interrupts 0x0000_00A8
27 34 TIM1_CCTIM1 Capture Compare interrupt 0x0000_00AC
28 35 TIM2 TIM2 global interrupt 0x0000_00B0
29 36 TIM3 TIM3 global interrupt 0x0000_00B4
30 37 TIM4 TIM4 global interrupt 0x0000_00B8

Добавлено через 21 минуту
l.s
Assembler
1
2
3
4
5
6
.word   0x20005000
.word   _start + 1
.space  0x9c
 
"Time Up Vector":
.word   TIM1_UP_isr + 1
Bash
1
2
arm-none-eabi-as l.s
arm-none-eabi-nm --defined-only
000000a4 t Time Up Vector
2
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
10.06.2021, 00:09  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
.space  0x9c
или вы не поняли, или я не понял.
Code
1
2
0x0000_00a4==TIM1_UP
.space  0x9c// это как высчитали?  почему 0x9c? размер таблицы векторов не совпадает с этим адресом, как мне выше говорили люди
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
10.06.2021, 08:46
Можно было попросить ассемблер посчитать.
OxA4 - 2 * 4 == 0x9C

Добавлено через 2 часа 53 минуты
Например, так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
.thumb 
 
"Vector Table":
SP_main:    .word 0x20001000
reset:      .word init
 
TIM1UP=0xA4
 
. = TIM1UP + "Vector Table"
"Tim1 Update Vector":
    .word TIM1_UP_isr + 1
Кликните здесь для просмотра всего текста
3 "Vector Table":
4 0000 00100020 SP_main: .word 0x20001000
5 0004 00000000 reset: .word init
6
7 TIM1UP=0xA4
8
9 0008 00000000 . = TIM1UP + "Vector Table"
9 00000000
9 00000000
9 00000000
9 00000000
10 "Tim1 Update Vector":
11 00a4 01000000 .word TIM1_UP_isr + 1

Или так:
Assembler
1
2
3
4
5
6
7
8
9
  "Vector Table":
SP_main:    .word 0x20001000
reset:      .word init
 
TIM1UP=0xA4
.space TIM1UP - ( . - "Vector Table" )
 
"Tim1 Update Vector":
    .word TIM1_UP_isr + 1
1
 Аватар для COKPOWEHEU
4144 / 2722 / 433
Регистрация: 09.09.2017
Сообщений: 12,055
10.06.2021, 09:21
А лучше не извращаться и просто прописать всю таблицу векторов:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
g_pfnVectors:
    .word   _estack
    .word   Reset_Handler
    .word   NMI_Handler
    .word   HardFault_Handler
    .word   MemManage_Handler
    .word   BusFault_Handler
    .word   UsageFault_Handler
    .word   0
    .word   0
    .word   0
    .word   0
    .word   SVC_Handler
    .word   DebugMon_Handler
    .word   0
    .word   PendSV_Handler
    .word   SysTick_Handler
    .word   WWDG_IRQHandler
    .word   PVD_IRQHandler
    .word   TAMPER_IRQHandler
    .word   RTC_IRQHandler
    .word   FLASH_IRQHandler
    .word   RCC_IRQHandler
    .word   EXTI0_IRQHandler
    .word   EXTI1_IRQHandler
    .word   EXTI2_IRQHandler
    .word   EXTI3_IRQHandler
    .word   EXTI4_IRQHandler
    .word   DMA1_Channel1_IRQHandler
    .word   DMA1_Channel2_IRQHandler
    .word   DMA1_Channel3_IRQHandler
    .word   DMA1_Channel4_IRQHandler
    .word   DMA1_Channel5_IRQHandler
    .word   DMA1_Channel6_IRQHandler
    .word   DMA1_Channel7_IRQHandler
    .word   ADC1_2_IRQHandler
    .word   USB_HP_CAN1_TX_IRQHandler
    .word   USB_LP_CAN1_RX0_IRQHandler
    .word   CAN1_RX1_IRQHandler
    .word   CAN1_SCE_IRQHandler
    .word   EXTI9_5_IRQHandler
    .word   TIM1_BRK_IRQHandler
    .word   TIM1_UP_IRQHandler
    .word   TIM1_TRG_COM_IRQHandler
    .word   TIM1_CC_IRQHandler
    .word   TIM2_IRQHandler
    .word   TIM3_IRQHandler
    .word   TIM4_IRQHandler
    .word   I2C1_EV_IRQHandler
    .word   I2C1_ER_IRQHandler
    .word   I2C2_EV_IRQHandler
    .word   I2C2_ER_IRQHandler
    .word   SPI1_IRQHandler
    .word   SPI2_IRQHandler
    .word   USART1_IRQHandler
    .word   USART2_IRQHandler
    .word   USART3_IRQHandler
    .word   EXTI15_10_IRQHandler
    .word   RTCAlarm_IRQHandler
    .word   USBWakeUp_IRQHandler    
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
Потом прописываем заглушки:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
    .weak   NMI_Handler
    .thumb_set NMI_Handler,Default_Handler
 
    .weak   HardFault_Handler
    .thumb_set HardFault_Handler,Default_Handler
    
    .weak   MemManage_Handler
    .thumb_set MemManage_Handler,Default_Handler
    
    .weak   BusFault_Handler
    .thumb_set BusFault_Handler,Default_Handler
 
    .weak   UsageFault_Handler
    .thumb_set UsageFault_Handler,Default_Handler
 
    .weak   SVC_Handler
    .thumb_set SVC_Handler,Default_Handler
 
    .weak   DebugMon_Handler
    .thumb_set DebugMon_Handler,Default_Handler
 
    .weak   PendSV_Handler
    .thumb_set PendSV_Handler,Default_Handler
 
    .weak   SysTick_Handler
    .thumb_set SysTick_Handler,Default_Handler
 
    .weak   WWDG_IRQHandler
    .thumb_set WWDG_IRQHandler,Default_Handler
 
    .weak   PVD_IRQHandler
    .thumb_set PVD_IRQHandler,Default_Handler
 
    .weak   TAMPER_IRQHandler
    .thumb_set TAMPER_IRQHandler,Default_Handler
 
    .weak   RTC_IRQHandler
    .thumb_set RTC_IRQHandler,Default_Handler
 
    .weak   FLASH_IRQHandler
    .thumb_set FLASH_IRQHandler,Default_Handler
 
    .weak   RCC_IRQHandler
    .thumb_set RCC_IRQHandler,Default_Handler
 
    .weak   EXTI0_IRQHandler
    .thumb_set EXTI0_IRQHandler,Default_Handler
 
    .weak   EXTI1_IRQHandler
    .thumb_set EXTI1_IRQHandler,Default_Handler
 
    .weak   EXTI2_IRQHandler
    .thumb_set EXTI2_IRQHandler,Default_Handler
 
    .weak   EXTI3_IRQHandler
    .thumb_set EXTI3_IRQHandler,Default_Handler
 
    .weak   EXTI4_IRQHandler
    .thumb_set EXTI4_IRQHandler,Default_Handler
 
    .weak   DMA1_Channel1_IRQHandler
    .thumb_set DMA1_Channel1_IRQHandler,Default_Handler
 
    .weak   DMA1_Channel2_IRQHandler
    .thumb_set DMA1_Channel2_IRQHandler,Default_Handler
 
    .weak   DMA1_Channel3_IRQHandler
    .thumb_set DMA1_Channel3_IRQHandler,Default_Handler
 
    .weak   DMA1_Channel4_IRQHandler
    .thumb_set DMA1_Channel4_IRQHandler,Default_Handler
 
    .weak   DMA1_Channel5_IRQHandler
    .thumb_set DMA1_Channel5_IRQHandler,Default_Handler
 
    .weak   DMA1_Channel6_IRQHandler
    .thumb_set DMA1_Channel6_IRQHandler,Default_Handler
 
    .weak   DMA1_Channel7_IRQHandler
    .thumb_set DMA1_Channel7_IRQHandler,Default_Handler
 
    .weak   ADC1_2_IRQHandler
    .thumb_set ADC1_2_IRQHandler,Default_Handler
 
    .weak   USB_HP_CAN1_TX_IRQHandler
    .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler
 
    .weak   USB_LP_CAN1_RX0_IRQHandler
    .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler
 
    .weak   CAN1_RX1_IRQHandler
    .thumb_set CAN1_RX1_IRQHandler,Default_Handler
 
    .weak   CAN1_SCE_IRQHandler
    .thumb_set CAN1_SCE_IRQHandler,Default_Handler
 
    .weak   EXTI9_5_IRQHandler
    .thumb_set EXTI9_5_IRQHandler,Default_Handler
 
    .weak   TIM1_BRK_IRQHandler
    .thumb_set TIM1_BRK_IRQHandler,Default_Handler
 
    .weak   TIM1_UP_IRQHandler
    .thumb_set TIM1_UP_IRQHandler,Default_Handler
 
    .weak   TIM1_TRG_COM_IRQHandler
    .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler
 
    .weak   TIM1_CC_IRQHandler
    .thumb_set TIM1_CC_IRQHandler,Default_Handler
 
    .weak   TIM2_IRQHandler
    .thumb_set TIM2_IRQHandler,Default_Handler
 
    .weak   TIM3_IRQHandler
    .thumb_set TIM3_IRQHandler,Default_Handler
 
    .weak   TIM4_IRQHandler
    .thumb_set TIM4_IRQHandler,Default_Handler
 
    .weak   I2C1_EV_IRQHandler
    .thumb_set I2C1_EV_IRQHandler,Default_Handler
 
    .weak   I2C1_ER_IRQHandler
    .thumb_set I2C1_ER_IRQHandler,Default_Handler
 
    .weak   I2C2_EV_IRQHandler
    .thumb_set I2C2_EV_IRQHandler,Default_Handler
 
    .weak   I2C2_ER_IRQHandler
    .thumb_set I2C2_ER_IRQHandler,Default_Handler
 
    .weak   SPI1_IRQHandler
    .thumb_set SPI1_IRQHandler,Default_Handler
 
    .weak   SPI2_IRQHandler
    .thumb_set SPI2_IRQHandler,Default_Handler
 
    .weak   USART1_IRQHandler
    .thumb_set USART1_IRQHandler,Default_Handler
 
    .weak   USART2_IRQHandler
    .thumb_set USART2_IRQHandler,Default_Handler
 
    .weak   USART3_IRQHandler
    .thumb_set USART3_IRQHandler,Default_Handler
 
    .weak   EXTI15_10_IRQHandler
    .thumb_set EXTI15_10_IRQHandler,Default_Handler
 
    .weak   RTCAlarm_IRQHandler
    .thumb_set RTCAlarm_IRQHandler,Default_Handler
 
    .weak   USBWakeUp_IRQHandler
    .thumb_set USBWakeUp_IRQHandler,Default_Handler
и дефолтный обработчик прерывания:
Assembler
1
2
3
Default_Handler:
Infinite_Loop:
    b   Infinite_Loop
Насколько я помню, чтобы директива .weak работала нормально, ее нужно вынести в другую единицу трансляции (в другой файл). То есть таблица векторов прерываний, заглушки и т.п. в одном файле strtup.s, а основной код - в другом main.s. Здесь будет важно либо следить за порядком линковки, либо прописать секции и использовать скрипт линковщика.
Да. То, что я сейчас привел, выдрано из startup файла от ST.
2
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
10.06.2021, 09:51
И те векторы, для которых в конкретном изделии нет источников прерывания, желательно тоже заполнить.
Unexpected_Interrupt_SR на время наладки может аварийно пищать, моргать и ругаться в отладчик как можно более простым кодом, а в конечном изделии, в зависимости от назначения, может, например, пытаться перезапустить устройство, вместо того, чтобы тупо подвиснуть, когда в соседней комнате заработал старый холодильник.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
11.06.2021, 06:57  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
2 * 4
почему? что тут 2, а что 4 ?

Добавлено через 46 секунд
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А лучше не извращаться и просто прописать всю таблицу векторов:
вы серьезно?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
11.06.2021, 07:18
pcmax, 2 (SP_main и Reset handler ) элемента таблицы, по 4 байта каждый, мы уже заполнили.
1
 Аватар для COKPOWEHEU
4144 / 2722 / 433
Регистрация: 09.09.2017
Сообщений: 12,055
11.06.2021, 10:38
Цитата Сообщение от pcmax Посмотреть сообщение
вы серьезно?
Да. Она пишется единственный раз для данного контроллера, а то и для семейства. Потом вы ее просто подключаете без изменений к каждому проекту, а в основном файле пишете полезный код.
Что вас пугает?
Размер? Так у вас 64 кБ памяти, на ассемблере вы ее не забьете примерно никогда. Плюс таблица векторов штука константная, она с ростом программы расти не будет.
Большое количество копипаста? Я его взял из ST-шного файла, где разработчики сами это прописали. Это ведь просто адреса, алгоритмического смысла они не несут.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
11.06.2021, 21:01  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
weak работала нормально
чтобы
Code
1
.weak
нормально работала, ее надо понимать зачем испозуют. что-то я вижу что мы не особо понимаем к сожаление. напомните, .weak зачем?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
11.06.2021, 21:13
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
.weak зачем?
не знаю как в ассемблере, а в Си это означает "слабая функция"
используется вот для чего, для двух функций с одинаковым именем
например у нас в коде где то
C
1
2
3
4
5
6
7
int func1(void)
{
 return 1;
}
......................
 
int a=func1();
все прекрасно работает, но нам нужно что бы функция возвращала 2

если мы напишем в другом блоке
C
1
2
3
4
int func1(void)
{
 return 2;
}
то линковщик сойдет с ума и заверещит: "Две функции под одним именем"

C
1
2
3
4
5
6
7
__weak  int func1(void)
{
 return 1;
}
......................
 
int a=func1();
и
C
1
2
3
4
int func1(void)
{
 return 2;
}
то все будет в порядке

первую "слабую" функцию он не заметит, а будет использовать вторую
2
 Аватар для COKPOWEHEU
4144 / 2722 / 433
Регистрация: 09.09.2017
Сообщений: 12,055
11.06.2021, 23:06
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
напомните, .weak зачем?
"Дефолтное значение", то есть такое, которое присутствует, пока его не переопределили явно.
В данном случае по умолчанию используется обработчик прерывания DefaultHandler, который не делает ничего кроме зависания в самом себе. Если вы где-то объявите другой обработчик с именем, скажем, TIM1_UP_IRQHandler, то вместо дефолтного обработчика будет подставлен ваш.
Ну а такой странный обработчик по умолчанию работает по шаблону "максимизация ошибки". То есть если вы где-то накосячили с прерываниями, программа не будет делать вид, что все нормально, а просто зависнет. При желании можно добавить туда скажем мигалку диодом чтобы было понятно что зависание произошло именно в прерывании.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
12.06.2021, 14:25  [ТС]
politoto, скажите пожалуйста, а у cortex-m3 есть предзагрузчик?
0
 Аватар для COKPOWEHEU
4144 / 2722 / 433
Регистрация: 09.09.2017
Сообщений: 12,055
12.06.2021, 15:01
Что вы понимаете под предзагрузчиком?
bootloader, который позволяет написать программу для загрузки прошивки? Напрямую вроде бы нет, но извратнуться можно. Зато есть записанный производителем, который загружает прошивку только по UART (в других контроллерах бывает по USB и др.)
Или алгоритм начальной инициализации как в операционных системах, который настраивает стек, инициализированные переменные и т.п.? Естественно, нет.
Или как uboot / uefi / bios, которые сами ищут начало кода? Тоже нет.
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.06.2021, 21:18
Цитата Сообщение от pcmax Посмотреть сообщение
у cortex-m3 есть предзагрузчик?
Вы уже знаете:
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
12.06.2021, 22:14  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Что вы понимаете под предзагрузчиком?
вот что я нагуглил

предзагрузчик устанавливается как в процессорах ARM, таких, как Cortex-A, так и в микроконтроллерах, даже таких маленьких, как Cortex-M0. Вместе с предзагрузчиком процедура


Добавлено через 19 секунд
Но что-то засомневался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2021, 22:14

Работа с таймерами
Здравствуйте. Делаю проект типа "Приложение Windows Forms". Вопрос по коду ниже. procedure anim(pb: picturebox); var i: real; ...

Работа с двумя таймерами
Кто-нибудь знает как работать с таймерами???!!! Если да, помогите, пожалуйста, написать код по этому заданию: Программа должна три...

Работа с таймерами и стилями
Доброе время суток,уважаемые программисты. Есть следующая задача. 1. Через t1 окно изменяет стиль, через t2 окно изменяет цвет. 2. Окно...

Работа с двумя таймерами
Вопрос. Есть необходимость работы с двумя таймерами. Но с разным приоритетом. Так, чтобы один таймер мог прерывать работу обработчика...

Работа с таймерами в Xmega
Добрый день. Помогите пожалуйста с настройкой таймеров Xmego32A4. Что то я в этих регистрах настройки совсем запутался... :( По...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru