因为须要使用到符号表,首先重新编译micropython固件
顺便修改makefile,移除-fdata-sections -ffunction-sections选项,
-fdata-sections -ffunction-sections 配合 --gc-sections 会删除未被使用的函数。
后果就是固件体积会大些。(把--gc-sections也拿掉编不过......)
获得相关库函数地址
可以用readelf
可以看.map文件
或者用ida
等等
忽略地址最后一位,应该都是一样的
下面写段代码,实现传参与跳转
- @micropython.asm_thumb
- def F(r0,r1,r2,r3):
- data(2,0x4798)
- align(2)
-
- HAL_GPIO_WritePin_FuncAddr = 0x0804f7d4
- HAL_GPIO_TogglePin_FuncAddr = 0x0804f7de
- HAL_GPIO_ReadPin_FuncAddr = 0x0804f7c8
- def PY_HAL_GPIO_WritePin(GPIO_TypeDef_Addr, GPIO_Pin, PinState):
- F(GPIO_TypeDef_Addr,GPIO_Pin,PinState,HAL_GPIO_WritePin_FuncAddr|1)
- def PY_HAL_GPIO_TogglePin(GPIO_TypeDef_Addr, GPIO_Pin):
- F(GPIO_TypeDef_Addr,GPIO_Pin,0,HAL_GPIO_TogglePin_FuncAddr|1)
- def PY_HAL_GPIO_ReadPin(GPIO_TypeDef_Addr, GPIO_Pin):
- return F(GPIO_TypeDef_Addr,GPIO_Pin,0,HAL_GPIO_ReadPin_FuncAddr|1)
具体细节没有研究,看上去是可以工作的
测试如下:
此内容由EEWORLD论坛网友EETUX原创,如需转载或用于商业用途需征得作者同意并注明出处
本帖最后由 EETUX 于 2018-7-6 10:08 编辑