Пт ноя 29, 2019 07:26:00
VladislavS писал(а):А зачем? Ведь это имеет смысл, если ты это делаешь лучше производителя.
Пт ноя 29, 2019 08:21:48
Пт ноя 29, 2019 09:54:18
Пт ноя 29, 2019 10:44:47
Пт ноя 29, 2019 11:11:25
Сб ноя 30, 2019 20:05:02
Вс дек 01, 2019 00:57:45
Вс дек 01, 2019 08:06:09
Вс дек 01, 2019 13:44:02
Пн дек 02, 2019 20:12:59
Что?!. Где?!. Покажите пальцем, пожалуйста!..jcxz писал(а):В штатных хидерах зачастую имена регистров - длинные, несовпадающие с именами в даташитах.
Сб ноя 07, 2020 00:08:34
Сб ноя 07, 2020 00:56:28
Чт ноя 19, 2020 14:19:21
Вс ноя 22, 2020 00:27:09
Вс ноя 22, 2020 01:43:17
Ногодрыг?ВячеславX писал(а):Контроллер управления ключами специальных силовых преобразователей можно только на ассемблере, очень быстрые реакции надо.
Вс ноя 22, 2020 02:59:03
Вс ноя 22, 2020 09:56:37
[[ noreturn ]] static void Boot(const uint32_t *adr)
{
using MyApp = void (*)();
__set_MSP((*(volatile uint32_t *)adr));
MyApp my_app = MyApp(adr+1);
my_app();
}
int main()
{
Boot((uint32_t *)0x0800'1000);
}
//GCC
ldr r3, [pc, #136] ; 0x8001000
ldr r3, [r3, #0]
msr MSP, r3
ldr r3, [pc, #132] ; 0x8001004
blx r3
//IAR
LDR.N R0,??DataTable1_2 ;; 0x8001000
LDR R1,[R0, #+0]
MSR MSP,R1
LDR.N R2,??DataTable1_3 ;; 0x8001004
BX R2
//ARM Compiler V6
LDR r0,[pc,#8] ; 0x8001000
LDR r0,[r0,#0x00]
MSR MSP,r0
LDR r0,[pc,#4] ; 0x8001004
BLX r0
Пн ноя 23, 2020 07:52:12
Пн ноя 23, 2020 15:34:29
//Keil и GCC
__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack)
{
__ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : );
}
#define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline
#define __ASM __asm
// В IAR
#define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE)))
#define __arm_wsr __iar_builtin_wsr
__ATTRIBUTES void __iar_builtin_wsr(__sys_reg special_register, unsigned int value);
#define __ATTRIBUTES __intrinsic __nounwind
Пн ноя 23, 2020 17:25:29