shenguoliang 发表于 2022-10-18 14:31

hc32f460使用FreeRTOS,IIC初始化进入死循环

程序从以下位置直接运行到HardFault_Handler()。有哪位大牛帮我看看什么原因。
注:未运行到280行。

上述IIC初始化写在main()函数中。

如果将IIC初始化写在任务函数中,在main函数中创建任务则可以正常运行。

lzmm 发表于 2022-11-2 18:58

这个是你的代码问题吧,查看一下是不是数组超出预期

adolphcocker 发表于 2022-11-2 19:12

使用的是硬件iic吗            

hearstnorman323 发表于 2022-11-2 19:30

单个的代码是否能够跑通呢            

macpherson 发表于 2022-11-2 20:00

iic不需要中断的。            

youtome 发表于 2022-11-2 20:39

如果硬件iic不好用,推荐软件iic,这个可靠性高一些。

macpherson 发表于 2022-11-2 21:25

在进行iic读取数据的时候,可以设置rtos为禁止切换

shenguoliang 发表于 2022-11-3 15:47

本帖最后由 shenguoliang 于 2022-11-3 18:59 编辑

adolphcocker 发表于 2022-11-2 19:12
使用的是硬件iic吗
对,使用的是硬件IIC,裸机跑没有问题,使用IIC可以实现预期目标。
在此基础上加上FreeRTOS,每次初始化IIC的时候都会卡在波特率设置这一步,初始化uart的时候也是这个问题。,点击运行下一步就跳到void HardFault_Handler(void)函数里。
但是创建一个任务,把IIC或者uart的初始化挪到任务里就可以初始化成功,功能也能正常使用。
大佬,这是什么问题。

adolphcocker 发表于 2022-11-3 20:51

hc32f460是自己移植 freertos操作系统吗?

belindagraham 发表于 2022-11-3 21:46

看看是不是没有启动iic的时钟呢?

tpgf 发表于 2022-11-4 11:38

如果在初始化死循环的话 建议楼主更换它的时钟源晶振

qcliu 发表于 2022-11-4 12:05

如果连初始化都不能通过的话 建议楼主测量一下晶振是否正常工作

drer 发表于 2022-11-4 12:14

调整一下串口初始化函数和iic初始化函数的顺序试试看

coshi 发表于 2022-11-4 13:37

还在初始化阶段的时候,不要启动一些其他功能的运行

kxsi 发表于 2022-11-4 13:46

楼主是在什么地方启动的系统开始运行的呢

wiba 发表于 2022-11-4 14:08

在线程的切换过程中会一直占用了iic的资源吗

LLGTR 发表于 2022-11-4 20:40

这时候汇编就有用处了。

天天向善 发表于 2022-11-4 20:42

你把初始化放到哪了?单步调试也不行?

kkzz 发表于 2022-11-5 09:49

可以将iic的中断优先级设置为最高

1988020566 发表于 2022-11-5 10:45

你这个没有用FreeRTOS操作系统吧
页: [1] 2
查看完整版本: hc32f460使用FreeRTOS,IIC初始化进入死循环