新下载的rtthread用keil编译有问题,请有经验人士把项目编译通过。
提供rtthread原码,用keil5把进而指定的工程编译通过后发回给我。
编译报错信息 发出来呢
该回答引用GPT与博主@晓码自在合作编写:
根据错误提示,主要是rtatomic.h和rthw.h两个头文件中rt_hw_interrupt_disable和rt_hw_interrupt_enable函数的声明不兼容导致的。
解决方法是:
c
rt_base_t rt_hw_interrupt_disable(void);
void rt_hw_interrupt_enable(rt_base_t level);
在rthw.h中删除这两个函数的声明,直接调用rtatomic.h中声明的版本。
确保在编译之前,rtatomic.h先于rthw.h被包含。
修正后的rtatomic.h代码为:
c
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-09-23 flybreak add lock and atomic
*/
#ifndef __RTATOMIC_H__
#define __RTATOMIC_H__
rt_base_t rt_hw_interrupt_disable(void);
void rt_hw_interrupt_enable(rt_base_t level);
/*
* lock for mutex
*/
rt_inline void rt_mutex_init(struct rt_mutex *m)
{
...
#endif /* __RTATOMIC_H__ */
修正后的rthw.h代码为:
c
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2006-03-18 Bernard the first version
* 2006-04-26 Bernard add rt_hw_context_switch_interrupt declaration
* 2012-12-29 Bernard add rt_hw_exception_handle declaration
* 2017-11-18 Bernard remove rt_base_t definition in order to fix scaler
* issues on some compiler.
*/
#ifndef __RT_HW_H__
#define __RT_HW_H__
#include "rtconfig.h"
#ifdef RT_USING_KERNEL
void rt_hw_vector_init(void);
void rt_hw_vectors_init(void);
void rt_hw_board_init(void);
void rt_hw_cpu_reset(void);
rt_base_t rt_hw_interrupt_disable(void);
void rt_hw_interrupt_enable(rt_base_t level);
void rt_hw_interrupt_enter(void);
void rt_hw_interrupt_leave(void);
#ifdef RT_USING_FAST_CONTEXT_SWITCH
void rt_hw_context_switch_fast(void);
#endif /* RT_USING_FAST_CONTEXT_SWITCH */
void rt_hw_context_switch(void);
void rt_hw_context_switch_interrupt(void);
#endif /* end of RT_USING_KERNEL */
#endif /* __RT_HW_H__ */
在main函数开始处添加#include "rtatomic.h"和#include "rthw.h"
的include顺序为:
c
#include "rtconfig.h"
#include "rtatomic.h"
#include "rthw.h"
...
希望以上解决办法能帮助你编译通过RT-Thread项目。如果还有其他问题,请随时问我。
有环境没有能远程操作吗,我可以帮你看下,你全文搜索下把extern void rt_hw_interrupt_disable(void) 改为
extern rt_base_t rt_hw_interrupt_disable(void)
检查下编译环境配置是否正确?具体报错信息是什么?
你好,你的问题解决了没,对stm32比较熟,把错误的部分粘上来,大家一起分析看看。也可以尝试帮你编译通过