如何在keil运行时库runtime更换功能包版本

因为昨天用keill v5打开,碰到一个bug,

error: no member named 'IP' in 'NVIC_Type'

CMSIS-Core 在V6之后进行大改造成的,

虽然可以通过修改库文件misc.c解决 (NVIC->IP改为NVIC->IPR),

但是不爽,总担心改人家库文件这事吧有隐患。

干脆降级吧,不要用CMSIS-Core V6,降回去。

研究一下

这个运行时库里面并不能直接切换你想要的版本。

看来不愧于运行时库这 “运行” 俩字的意义

打开pack installer

右侧pack可以看到版本了,在这里管理,remove或者unpack按钮,有啥区别也没仔细研究。

好像unpack是再次安装的意思。没多试。

然后回到keil就可以看到生效提示框。

然后还有个文件夹也可以直接删除安装的包。

C:\Users\Administrator\AppData\Local\Arm\Packs\ARM\CMSIS

这样包信息就不会出现在pack installer中了。

<think>好的,用户想知道如何在Keil5工程中添加新的功能模块。首先,我需要回忆一下Keil5的相关操作,尤其是模块化编程的部分。记得用户提供的引用中有提到使用RTE(Runtime Environment)来管理包和模块,这可能是一个关键点。 首先,用户可能已经有一些基础的项目结构,但需要添加新的模块。根据引用[4],用户可能会创建不同的文件夹,比如user、app和public,每个模块放在对应的文件夹里。所以第一步应该是创建或整理目录结构,把新模块的源文件和头文件放到合适的文件夹里,比如app里放外设功能模块。 然后,添加文件到工程中。Keil5的传统方法是在项目里右键现有组,选择添加文件,或者新建一个组。引用[3]提到在Library组中添加库文件,这说明用户可能需要手动将.c和.h文件添加到对应的组中。不过,如果用户使用的是新的RTE方式,可能更方便。引用[2]提到RTE的可视化管理,可以自动添加所需的库和模块,这样用户不需要手动添加文件,而是通过配置来包含模块。这时候需要引导用户了解RTE的使用,比如通过Manage Run-Time Environment界面勾选需要的软件包或组件,这样Keil会自动处理依赖和文件包含。 接下来是配置头文件路径。无论用传统方法还是RTE,都需要在项目选项中设置头文件的包含路径,这样编译器能找到模块的头文件。这涉及到打开Options for Target -> C/C++ -> Include Paths,添加模块所在的目录。 另外,模块间的依赖关系需要注意。如果新模块依赖其他库,比如HAL或标准外设库,需要确保这些库已经被正确添加。引用[1]和[2]都提到模块化编程的意义和RTE的优势,所以可能需要提醒用户使用RTE来简化依赖管理,避免手动添加的麻烦。 用户可能遇到的问题包括:文件路径错误导致编译失败,头文件未包含,或者依赖库未正确添加。需要指导用户检查这些部分,并确保所有必要的文件都被包含进工程。 最后,生成相关问题时要考虑用户可能的后续疑问,比如如何优化模块结构、使用RTE的优势,或者如何处理多模块依赖等问题。这些能帮助用户深入理解模块化开发,并有效管理他们的Keil项目。</think>在Keil5工程中添加新功能模块的步骤如下: ### 一、创建模块文件 1. 在工程目录下新建模块文件夹(如`/app`) 2. 添加`.c`源文件和`.h`头文件,命名规范建议为`module_功能名.c/h` 3. 编写模块代码时注意使用头文件保护: ```c #ifndef __MODULE_ADC_H #define __MODULE_ADC_H // 代码内容 #endif ``` ### 二、添加文件到工程 1. **传统方式**: - 右键工程管理器中的目标组(如"Application") - 选择`Add Existing Files to Group...` - 选择新建的`.c`文件[^3] 2. **RTE方式**(推荐): - 通过`Manage Run-Time Environment`界面 - 勾选所需软件组件(如ADC驱动、通信协议栈) - 自动处理依赖关系[^2] ### 三、配置包含路径 1. 打开`Options for Target -> C/C++` 2. 在`Include Paths`中添加模块头文件路径(如`../app`) 3. 确保路径使用相对路径以保证可移植性[^4] ### 四、模块接口设计 1. 在头文件中声明外部可访问函数: ```c extern void ADC_Init(void); extern uint16_t ADC_ReadChannel(uint8_t ch); ``` ### 五、工程结构示例 ``` Project ├── CMSIS // 内核支持文件 ├── Device // 器件特定文件 ├── app │ ├── module_adc.c │ └── module_adc.h // 新建模块 └── user └── main.c // 调用模块接口 ``` ### 六、模块调用 在主程序中包含头文件并调用接口: ```c #include "module_adc.h" int main(void) { ADC_Init(); uint16_t val = ADC_ReadChannel(1); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDialog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值