KLite API参考手册

本文档介绍了KLite微内核的API参考手册,包括内核初始化、内存管理、线程管理、互斥锁、信号量及事件等功能特性。KLite专为ARMCortex-M微控制器设计,提供简洁易用的操作系统内核。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KLite API参考手册 V1.0

1.功能特性
  KLite是一个为ARM Cortex-M微控制器设计的微内核,设计思想是"简洁易用".
  -1- 支持动态内存管理;
  -2- 支持256级线程优先级;
  -3- 支持线程同步标识符:互斥锁,信号量,事件.

2.数据类型
  kthread_t     线程标识符
  kmutex_t  互斥锁标识符
  kevent_t  事件标识符
  ksem_t  信号量标识符

3.API参考

3.1 内核相关
-------------------------------------------------------------------------------
原型:
 void kernel_init(uint32_t addr, uint32_t size)
功能:
 KLite内核初始化.
参数:
 addr    内核动态管理内存起始地址
 size    内核动态管理内存大小 
返回值:
 无
备注:
 在调用内核初始化时保证中断处于关闭状态,此函数只能执行一次,
 在初始化内核之前不能调用任何KLite相关的API.
-------------------------------------------------------------------------------
原型:
 void kernel_start(void)
功能:
 启动KLite内核,内部调用底层函数cpu_tick_init,以启动滴答定时器.
参数:
 无
返回值:
 无
备注:
 在启动KLite之前调用至少需要创建一个用户线程.
------------------------------------------------------------------------------- 
原型:
 uint32_t kernel_version(void)
功能:
 返回KLite内核的版本号
参数:
 无
返回值:
 版本号,BIT[31:24]主版本号,BIT[23:16]次版本号,BIT[15:0]修订号
------------------------------------------------------------------------------- 
原型:
 uint32_t kernel_time(void)
功能:
 返回内核自启动以来的节拍数,单位毫秒
参数:
 无
返回值:
 节拍数
-------------------------------------------------------------------------------


3.2 内存管理
-------------------------------------------------------------------------------
原型:
 void* kmem_alloc(uint32_t size)
功能:
 向内核申请一段连续内存,功能和malloc一样
参数:
 size 要申请的内存大小
返回值:
 申请成功返回内存指针
 申请失败返回NULL
备注:
 使用kmem_alloc申请的内存,在使用完毕后,请使用kmem_free释放内存.
-------------------------------------------------------------------------------
原型:
 void  kmem_free(void* mem)
功能:
 释放由kmem_malloc申请的内存,功能和free一样
参数:
 mem  由kmem_alloc申请的内存指针
返回值:
 无
备注:
 使用kmem_alloc申请的内存,在使用完毕后,请使用kmem_free释放内存.
-------------------------------------------------------------------------------
原型:
 void kmem_info(uint32_t* total, uint32_t* used)
功能:
 获取内存用量信息
参数:
 used 输出已使用的内存数量(字节)
 total   输出总内存数量(字节)
返回值:
 无
备注:
 可使用此函数关注系统内存消耗,以适当调整内存分配.
-------------------------------------------------------------------------------
 
 
3.3 线程管理
-------------------------------------------------------------------------------
原型:
 kthread_t kthread_create(void(*func)(void*), void* arg, uint32_t stksize)
功能:
 创建一个新的线程
参数:
 func 线程入口函数
 arg    线程入口函数的参数
 stksize 线程拥有的栈空间大小,如果该值为0则使用系统默认的栈大小
返回值:
 成功返回线程标识符
 失败返回NULL
备注:
 KLite自动为新线程分配内存空间包括栈空间,如果栈空间设置太小容易在运行过程中产
 生错误,如果设置太大可能会由于系统内存不足而创建失败.
-------------------------------------------------------------------------------
原型:
 void kthread_destroy(kthread_t thread)
功能:
 结束一个线程,并释放内存
参数:
 thread 要结束的线程标识符
返回值:
 无
备注:
 该函数会直接停止线程运行,并释放线程所占用的内存.
-------------------------------------------------------------------------------
原型:
 void kthread_setprio(kthread_t thread, int prio)
功能:
 设置线程优先级
参数:
 thread  线程标识符
 prio  新的优先级,最小-127,最大+127
返回值:
 无
备注:
 线程优先级决定线程调度次序,越高的优先级具有越高的实时性,线程默认优先级为0
-------------------------------------------------------------------------------
原型:
 int  kthread_getprio(kthread_t thread)
功能:
 获取线程当前优先级
参数:
 thread 线程标识符
返回值:
 该线程当前的优先级
-------------------------------------------------------------------------------
原型:
 kthread_t kthread_self(void)
功能:
 获取当前线程标识符
参数:
 无
返回值:
 当前线程的标识符
-------------------------------------------------------------------------------
原型:
 void kthread_sleep(uint32_t ms)
功能:
 将当前线程休眠一段时间,释放CPU控制权
参数:
 ms  休眠时间,单位毫秒
返回值:
 无
-------------------------------------------------------------------------------


3.4 互斥锁
-------------------------------------------------------------------------------
原型:
 kmutex_t kmutex_create(void)
功能:
 创建一个新的互斥锁
参数:
 无
返回值:
 成功返回互斥锁标识符
 失败返回NULL
-------------------------------------------------------------------------------
原型:
 void kmutex_lock(kmutex_t mutex)
功能:
 将mutex指定的互斥锁标记为锁定状态
参数:
 mutex 互斥锁标识符
返回值:
 无
备注:
 如果mutex指向的互斥锁已由其它线程锁定,则调用线程将会阻塞,直到另一个线程释放
 这个互斥锁.
-------------------------------------------------------------------------------
原型:
 void kmutex_unlock(kmutex_t mutex)
功能:
 释放由参数mutex指定的互斥锁
参数:
 mutex 互斥锁标识符
返回值:
 无
备注:
 kmutex_lock和kmutex_unlock必须成对出现,否则可能产生死锁.
-------------------------------------------------------------------------------
原型:
 void kmutex_destroy(kmutex_t mutex)
功能:
 销毁一个互斥锁,并释放内存
参数:
 mutex 在注销的互斥锁标识符
返回值:
 无
备注:
 销毁互斥锁之前确认没有线程被它阻塞.
-------------------------------------------------------------------------------


3.5 信号量
-------------------------------------------------------------------------------
原型:
 ksem_t ksem_create(int value)
功能:
 创建一个新的信号量.
参数:
 value 信号量初始值,必须为正数.
返回值:
 创建成功返回信号量标识符.
 创建失败返回NULL.
备注:
 无.
-------------------------------------------------------------------------------
原型:
 void ksem_wait(ksem_t sem)
功能:
 等待该信号量为一个非零值,然后将信号量的值减去1.
参数:
 sem  信号量标识符.
返回值:
 无
备注:
 无.
-------------------------------------------------------------------------------
原型:
 int  ksem_timedwait(ksem_t sem, uint32_t ms)
功能:
 超时等待该信号量为一个非零值,如果未超时则将信号量的值减去1.
参数:
 sem  信号量标识符.
返回值:
 等待成功返回1.
 等待超时返回0.
备注:
 无.
-------------------------------------------------------------------------------
原型:
 void ksem_post(ksem_t sem)
功能:
 给信号量的值加一.
参数:
 sem  信号量标识符.
返回值:
 无.
备注:
 无.
-------------------------------------------------------------------------------
原型:
 int  ksem_getvalue(ksem_t sem)
功能:
 返回信号量的计数值.
参数:
 sem  信号量标识符.
返回值:
 计数值.
备注:
 该函数在返回时,可能内部计数值已经发生改变.
-------------------------------------------------------------------------------
原型:
 void ksem_destory(ksem_t sem)
功能:
 销毁信号量对象,并释放内存.
参数:
 sem  信号量标识符.
返回值:
 无.
备注:
 在没有线程使用它时才能销毁,否则可能产生错误.
-------------------------------------------------------------------------------


3.6 事件
-------------------------------------------------------------------------------
原型:
 kevent_t kevent_create(int state)
功能:
 创建一个新的事件对象.
参数:
 state 初始状态,0表示无效,非0表示有效.
返回值:
 创建成功返回事件标识符.
 创建失败返回NULL.
备注:
 无.
-------------------------------------------------------------------------------
原型:
 void kevent_wait(kevent_t event)
功能:
 等待事件.
参数:
 event 事件标识符.
返回值:
 无.
备注:
 无.
-------------------------------------------------------------------------------
原型:
 int  kevent_timedwait(kevent_t event, uint32_t ms)
功能:
 定时等待事件.
参数:
 event 事件标识符.
 ms  等待时间,单位毫秒.
返回值:
 等待成功返回1.
 等待超时返回0.
备注:
 无.
-------------------------------------------------------------------------------
原型:
 void kevent_post(kevent_t event)
功能:
 标记事件有有效状态.
参数:
 event 事件标识符.
返回值:
 无.
备注:
 所有等待这个事件的线程都会获得.
-------------------------------------------------------------------------------
原型:
 void kevent_destory(kevent_t event)
功能:
 销毁事件对象,并释放内存.
参数:
 event 事件标识符.
返回值:
 无.
备注:
 在没有线程使用它时才能销毁,否则可能产生错误.
-------------------------------------------------------------------------------

转载于:https://my.oschina.net/kerndev/blog/692349

<think>好的,我现在需要帮用户查找关于瑞萨RH850微控制器的FCL库资料和使用方法。首先,用户提到了几个引用,虽然他们说明这些引用仅供参考,但可能里面有些有用的信息。让我先仔细看一下这些引用内容。 引用[1]提到有一个Demo程序,针对RH850 F1K系列,特别是型号R7F7015873,使用CS+编译环境。项目地址也给出了,可能用户需要这个Demo来学习如何使用FCL库进行擦除和写入操作。这可能是一个关键点,用户可能需要下载链接或者示例代码。 引用[2]看起来是关于服务器配置的,可能和用户的问题关联不大,但里面提到了nginx和文件权限设置,可能用户在使用过程中涉及到环境配置,但暂时不太相关。 引用[3]是关于FCL库移植和使用的,指出需要修改两个头文件:fcl_cfg.h和fcl_descriptor.h,特别是修改执行模式。这可能涉及到库的配置步骤,用户可能需要知道如何正确配置这些文件才能使用FCL功能。 用户的问题明确提到需要FCL库的使用说明、文档、下载方式、配置方法和示例。所以,我需要整理这些方面的信息。首先,官方文档是首要的,瑞萨的官网或者他们的客户支持可能会有用户手册和应用笔记。然后,下载地址可能包括在引用1中的GitCode链接,用户可能需要那个Demo程序。配置部分需要参考引用3提到的修改头文件的步骤,比如调整执行模式。示例代码的话,除了引用1的Demo,可能还有其他示例可以参考。 另外,用户可能需要知道如何设置编译环境,比如使用CS+或者其他的IDE。还有,操作Flash时需要注意的事项,比如中断处理、时钟配置等,这些都是常见的问题点。性能优化和安全机制也可能相关,比如ECC或写保护功能。 考虑到用户可能需要分步骤的指导,我应该按逻辑顺序组织这些信息:从获取文档和资源开始,到环境搭建,配置修改,示例使用,注意事项,最后是参考资料。这样用户能够一步步跟着操作。同时,生成的相关问题可以帮助用户深入了解更多细节,比如如何移植到其他型号,如何处理错误,或者具体的操作流程。 需要注意的是,确保提供的链接和步骤都是正确且最新的,如果有不确定的地方,建议用户参考官方资源或联系技术支持。另外,提醒用户操作Flash时的风险,比如错误的擦除或写入可能导致设备锁死,这点很重要。 最后,总结用户可能需要的帮助点,确保回答覆盖了文档、下载、配置、示例以及常见问题,结构清晰,易于跟随。</think>根据瑞萨RH850微控制器FCL库的使用需求,整理关键信息如下: --- ### 一、FCL库核心资料获取 1. **官方文档下载** - 访问瑞萨官网搜索 **"RH850 FCL User's Manual"**,包含Flash操作API说明、硬件限制条件及底层驱动原理 - 技术文档编号通常为 **R01ANxxxx** 格式,需企业账号下载[^1] 2. **Demo程序获取** - 推荐GitCode开源项目: ```bash git clone https://gitcode.com/open-source-toolkit/126a0 ``` 包含基于R7F7015873芯片的完整FCL操作示例(擦除/写入/校验)[^1] --- ### 二、开发环境配置 1. **硬件要求** - 使用支持FCL库的RH850系列MCU(如R7F7015873) - 调试器需支持Flash编程接口(如E2 Lite) 2. **软件配置** ```c /* fcl_cfg.h关键配置 */ #define R_FCL_COMMAND_EXECUTION_MODE R_FCL_HANDLER_CALL_INTERNAL // 执行模式 #define FCL_VALIDATE_PARAMS (0) // 参数校验开关 ``` 修改后需重新编译FCL库文件[^3] --- ### 三、基础操作流程(代码示例) ```c /* Flash写入流程 */ R_FCL_Init(); // 初始化FCL库 R_FCL_Erase(0x00010000, 1); // 擦除1个Block(64KB) R_FCL_Write((uint8_t*)data_buffer, // 数据缓冲区 0x00010000, // 目标地址 DATA_SIZE); // 写入长度 ``` > 注意:操作前需关闭全局中断![^3] --- ### 四、关键注意事项 1. **时序要求** Flash操作期间需保持PLL时钟稳定,禁止切换时钟模式 2. **安全机制** - 写保护位操作需先执行解锁序列 - 擦除次数受Flash耐久度限制(典型值10^4次) --- ### 五、推荐参考资料 1. 《RH850/F1KM用户手册》第19章:Flash存储控制器 2. 瑞萨应用笔记《RH850 Flash Programming Techniques》(编号R01AN4572EU) 3. FCL库头文件中的API注释说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值