- 博客(6)
- 收藏
- 关注
原创 FOC伪代码框架
/ 或 iq_ref - iq 对于q轴。// 以及PWM占空比的计算和输出 RETURN (va, vb, vc);// Park逆变换(将d-q坐标系下的电压指令转换为α-β坐标系下的电压指令)// 读取传感器数据(如三相电流ia, ib, ic和转子位置角theta)// d-q坐标系下的电流。// Park变换(将α-β坐标系下的电流转换为d-q坐标系下的电流)// Clarke变换(将三相电流转换为α-β坐标系下的电流)
2024-12-04 16:01:06
284
原创 Bootloader
对于APP,设置为flash基址+偏移量,即0X08005000,所以需要在APP的main函数最开头处添加SCB->VTOR = APP_ADDRESS,实现中断向量表的起始地址的重设。if(((*(__IO uint32_t *)APP_ADDRESS) & 0x2FFE0000) == 0x20000000) //判断栈顶指针内容是否有效(指向RAM)第一句: if(((*(__IO uint32_t *)APP_ADDRESS) & 0x2FFE0000) == 0x20000000)
2024-05-06 14:42:39
1417
原创 keil的Stack_Size与Heap_Size
作用:用来存放函数的形参、函数内定义的局部变量,还有一些实时操作系统的现场保护、返回地址都是存储在栈里面。作用:存放malloc()动态分配的内存。作用:存储全局变量和静态变量。作用:存储函数体二进制代码。
2024-04-29 21:46:16
1106
原创 程序偶尔进HardFault_Handler
1.可以先看下报错的地址的代码定位到哪里 hardfault可能的原因空指针引用:检查是否存在空指针引用,即使用了未初始化或已释放的指针。3.内存访问错误:检查是否存在非法的内存访问,比如访问未映射的地址或越界访问数组等。可以通过使用内存保护机制和合理的内存管理来避免。2.栈溢出:检查是否使用了过多的栈空间,导致栈溢出。可以通过增加栈大小或优化代码来解决。4. 中断服务函数错误 时钟配置错误 中断冲突。
2024-04-18 10:19:33
232
1
原创 回调函数的定义
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。函数指针也是一种指针,只是它指向的不是整型,字符型而是函数。在C中,每个函数在编译后都是存储在内存中,并且每个函数都有-一个入口地址,根据这个地址,我们便可以访问并使用这个函数。函数指针就是通过指向这个函数的入口,从而调用这个函数。
2023-07-10 15:02:31
115
1
原创 C2000 DSP中全局变量清零问题
一个实际的例子是:假设使用了看门狗,在某些情况下系统看门狗复位了,对于某些控制系统而言,这时是要求系统在最短的时间内恢复之前的工作状态的。因为此时并没有对全局变量进行清零,之前的全局变量数据全部都在,此时就可以很快的恢复之前的工作状态,并且还可以使用一些全局变量辅助判断之前的错误复位的原因。由此可见,是否对全局变量进行清零完全是由启动代码和库函数决定的,而TI的编译器就没有链接完成这一工作所需的库函数,自然也就无法完成全局变量自动清零的工作了。段显然应该是在RAM中的,这就有一个问题,RAM中的。
2023-07-06 11:37:36
896
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人