»
(008)CubeIDE实现USB外设*
(018)C99 的指针*
(019)C99 只有值赋值,没有move*
(022)POSIX线程库pthread的同步锁*
(023)POSIX线程库pthread的多线程*
(027)C99标准库中的计时与等待 *
(028)C语言中的高精度计算库GMP *
(029)C语言中的Web服务*
(030)C语言中的字符转码ICU*
(031)从几个方面显然C语言比C++效率高*
(050)STM32热加载新的程序固件
STM32实现热加载新固件的关键:修改MSP主栈指针(代码开始地址指针)指向的地址,让芯片运行新地址的程序:MSP主栈地址+4 也就是: 1、禁止所有中断请求: __disable_irq(); 2、关闭系统滴答: SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; 3、使用芯片内部时钟HSI: HAL_RCC_DeInit(); 4、设置用于C语言调用的启动入口函数 void (NewSysBootFunction*)(void);//声明函数指针变量 NewSysBootFunction=(void (*)(void))(*(volatile uint32_t *) (NewFirmwareAddr + 4));//函数指针变量指向新固件程序入口地址 5、修改主程序栈指针(程序开始地址)MSP为NewFirmwareAddr volatile uint32_t NewFirmwareAddr = 0x08 FFFF 0000 __set_MSP(NewFirmwareAddr);//需要include头文件:cmsis_os.h,如果不使用OS,可以参考cmsis_os.h中的汇编代码 6、进入RTOS特权模式 __set_CONTROL(0); 7、设置新的中断向量表 SCB->VTOR=NewFirmwareAddr; 8、调用程序入口函数 NewSysBootFunction();