HappyTime
HappyTime
This guy hasn't written anything yet

注册于 2 years ago

回答
282
文章
1
关注者
2

可能考虑到跟板子有关吧,做适配的时候需要更改板级文件的。

不是多参数的问题吧,看看前后编写的代码是不是有问题。

可以搜Linux中链表的实现。有不少参考的。

CUBEMX里面设置打开了I2C1的配置 只是说明硬件已经支持I2C1了,但是还没有注册到系统中吧

rtt目前用IO模拟I2C的方式比较多,你可以试试。

你调用的函数中执行了什么逻辑啊
类似这个
image.png
就会设置线程状态为 -2

; 放 弃 芯 片 启 动 到 第 一 次 上 下 文 切 换 之 前 的 栈 内 容, 将 MSP 设 置 启 动 时 的 值
LDR r0, =SCB_VTOR
LDR r0, [r0]
LDR r0, [r0]
MSR msp, r0

网上有人分析的。

网上搜了一下

其实是使用GCC编译的问题。对GCC还是要多了解些。

修改STM32的固件库V3.5的core_cm3.c文件:

uint32_t __STREXB(uint8_t value, uint8_t *addr)
{
   uint32_t result=0;

   //__ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );//yiming del 2012.04.09
   __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );//yiming add 2012.04.09
   return(result);
}

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;

   //__ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );//yiming del 2012.04.09
   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );//yiming add 2012.04.09
   return(result);
}

看这个是否可以呢

你选择gcc版本的启动文件,rt studio 用的编译器是gcc。

很明显,超时值是有限制的,你现在设置的超过了限制值RT_TICK_MAX / 2,需要检查一下。

回到
顶部

发布
问题