对Si446x驱动库的一些修改
来源:互联网 发布:lol请检查网络连接 编辑:程序博客网 时间:2024/06/07 09:53
折腾了3天,终于能够用EFM32+Si446x接收到报文信息了。这个驱动库确实还不错,就是对于Si的RF芯片无任何经验的新手来说,稍显复杂了一些。
但是编译通过,运行正常,接收到报文,LED能够闪烁,心情还是挺开朗的。唯独看着消耗的RAM,心里比较烦躁,难道更年期到了??呵呵。
如下我是修改的地方,其实就是将变量第一成const型,用Flash换RAM空间,这样在一些RAM比较少的MCU上,会更实用一些。
请注意的是,以下的修改,是针对Si446x的接收端的修改。切记切记。
在radio.c里,将如下的几个全局变量用const修饰:
/***************************************************************************** * Global Variables *****************************************************************************/const uint8_t Radio_Configuration_Data_Array[] = RADIO_CONFIGURATION_DATA_ARRAY;const tRadioConfiguration RadioConfiguration = RADIO_CONFIGURATION_DATA;tRadioConfiguration const *pRadioConfiguration = &RadioConfiguration;
在radio.h里,用const修饰Radio_ConfigurationArray:
/***************************************************************************** * Global Typedefs & Enums *****************************************************************************/typedef struct{ uint8_t const *Radio_ConfigurationArray; uint8_t Radio_ChannelNumber; uint8_t Radio_PacketLength; uint8_t Radio_State_After_Power_Up; uint16_t Radio_Delay_Cnt_After_Reset; uint8_t Radio_CustomPayload[RADIO_MAX_PACKET_LENGTH];} tRadioConfiguration;
在radio.h用const修饰变量*pRadioConfiguration和Radio_Configuration_Data_Array[]
/***************************************************************************** * Global Variable Declarations *****************************************************************************/extern tRadioConfiguration const *pRadioConfiguration;extern uint8_t fixRadioPacket[RADIO_MAX_PACKET_LENGTH];/*! Si446x configuration array */extern const uint8_t Radio_Configuration_Data_Array[];
在radio.c里,将该函数中传入的参数强行转换成(uint8_t *)
/* Load radio configuration */ while (SI446X_SUCCESS != si446x_configuration_init((uint8_t *)pRadioConfiguration->Radio_ConfigurationArray)) { Delay(2); /* Power Up the radio chip */ vRadio_PowerUp(); }
希望没有遗漏的地方。全部改成const之后,整个驱动库的RAM占用量,就取决于如下几个变量了:
uint8_t fixRadioPacket[RADIO_MAX_PACKET_LENGTH]; //radio.c
<pre name="code" class="cpp">union si446x_cmd_reply_union Si446xCmd; //si446x_api_lib.cuint8_t Pro2Cmd[16]; //si446x_api_lib.c
改完之后,发现心里的确是是舒坦了好多。这下子,连低端的51应该也不会吃力了吧。。
1 0
- 对Si446x驱动库的一些修改
- 关于对驱动的一些理解
- 对程序驱动机制的一些理解
- 对测试驱动开发的一些理解
- 对owncloud 进行一些小的修改
- 基于 Si446x 上的 RSSI 测量的自动操作
- 修改LCD和触摸屏驱动的一些经验
- 修改LCD和触摸屏驱动的一些经验
- 对驱动型键盘记录程序Klog的修改
- 对mmap的一些测试-linux设备驱动开发
- 在应用的时候,自己对内核的一些修改
- 对ecshop电子商务系统的,一些经典的小修改,一些基本的修改.
- hpi 驱动修改及一些杂碎
- 关于选择smarttemplate的一些原因,以及对其做的一些修改
- 关于fragment、ActionBar与ViewPager的一些总结(二)增加对(一)的一些修改
- 对驱动的理解
- 关于“对驱动型键盘记录程序Klog的修改”的补充
- 对关于字符驱动的一些重要数据结构(file_operations, file, inode, cdev)的理解
- 在xml中定义直线路径Custom straight line path in xml
- easyui--form load 异步变同步
- JVM监控与调优
- 网络基本功(十八):细说tcpdump的妙用(下)
- Longest Consecutive Sequence
- 对Si446x驱动库的一些修改
- 如何检查后台服务(Android的Service类)是否正在运行?
- MongoDB数据库管理数据备份恢复
- Expert的View——GestureOverlayView属性
- 面试问答【一】——如何设计搜索输入框测试用例
- 向mysql中导入导出txt文件
- shell chown改变文件属主命令
- Mongodb用户管理
- NSString实现trim