对Si446x驱动库的一些修改

折腾了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.c
uint8_t Pro2Cmd[16];                      //si446x_api_lib.c

改完之后,发现心里的确是是舒坦了好多。这下子,连低端的51应该也不会吃力了吧。。

时间: 2024-10-03 22:29:02

对Si446x驱动库的一些修改的相关文章

HAL驱动库学习-ADC

如何使用ADC驱动库 1  实现如下两个函数 a: HAL_ADC_MspInit()使能ADC时钟,设置时钟源, 使能ADC Pin,设置为输入模式,可选 DMA,中断 b:HAL_ADC_MspDeInit() 与 HAL_ADC_MspInit()作用相反,用来关闭ADC,可选 DMA,中断 2  配置ADC参数,详细参数描述参考ADC属性定义.通过HAL_ADC_Init()来加载参数 3  配置ADC通道,包括使用的通道,采样时间等 HAL_ADC_ConfigChannel() 4

往android的内核添加驱动及 ueventd.rc 修改

转载! 向android的内核添加驱动,其实就是向linux内核添加驱动.主要在两个文件里添加点信息,一个是Kconfig文件,一个是Makefile文件.比如你添加的驱动你代码放到drivers目录下面的XXX目录,那么修在该目录下的Kconfig文件和Makefile文件. 具体的修改方法: 比如我现在修改drivers/staging/android/下的Kconfig文件. config ANDROID_LOGGER tristate "Android log driver"

MDT 2013 从入门到精通之驱动库创建

之前在每个群里活跃的时候总是能看到大家提出有关MDT驱动添加后类似报错的问题,其实生产环境中每个使用MDT的朋友都会遇到此类问题,本文主要介绍有关MDT新添加驱动如何通过驱动库创建排除驱动问题等: 一.驱动库创建: 1.1.打开Advanced Configuration,选择Selection Profiles,鼠标右键选择New Selection Profile: 1.2.输入驱动库描述信息: 1.3.勾选对应品牌各型号笔记本.台式机驱动文件夹: 1.4.确定相关信息: 1.5.完成创建:

MangoDB的C#驱动库(.net framewokr 4.0)

编写运维工具,需要联接MangoDB 基于我陈旧的技术栈,就用c#开发了 驱动库下载地址记录到至此,需要的可以下载 注意,此驱动是老版本的,只支持.net framewokr 4.0 看了半天,觉得够用,没下更高的版本,主要是电脑已经跑不动VS2017了... 链接:https://pan.baidu.com/s/1Q2oE2zDvIm3IKlRiAiqvmA 密码:2o1t 链接:https://pan.baidu.com/s/19glIfhTFhCgPpmn_te_E2Q 密码:f4ye e

基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)

源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throughput on Nucleo STM32F401RE Using SPI DMA 原文地址:https://www.cnblogs.com/LittleTiger/p/10142827.html

MYSQL 从库过滤在线修改

有时候,我们要对从库做在线修改过滤表的参数,刚开始的时候我们是直接修改配置文件的. 现在我们可以直接修改,比如我们修改Replicate_Do_Table 从库复制指定的表: 可以执行以下指令 1. stop slave: 关闭 从库复制 2. 修改: CHANGE REPLICATION FILTER Replicate_Do_Table=(ios_logs.money_change_20191027,ios_logs.money_change_20191101); 3.start slave

MySQL生产库中添加修改表字段引起主从崩溃的问题总结

上周末和开发人员对线上库中的部分表的在线DDL和update,这过程中出现了一些意料之外的问题,现将过程.分析和解决方案在这里总结一下 一. 需求背景: 要在如下表中添加字段(modified_at)并且更改默认值 table_name { baby_compbaby_comp_statusbaby_usrbaby_ad_userbaby_campbaby_ordbaby_acc_eva } 每张表执行如下操作ALTER TABLE `$table_name` ADD COLUMN `modif

全库特定字符串修改

需求:网站更名 原名:www.zhangsan.com 改名:www.lisi.cn 需要将数据库里面所有表里面含有www.zhansan.com改成 www.lisi.cn 思路: 思路通过字典表information_schema.table得知整个数据库的所有表和字段 将每列和表匹配查询到含有www.zhangsan.com的字段,查询到的改成www.lisi.cn即可 步骤: 第一步:写一个存储过程 DELIMITER $$ CREATE     PROCEDURE `test`.`fi

HAL驱动库学习-SPI

如何使用SPI库1 声明SPI hanlde, 例如: SPI_HandleTypeDef hspi2 通过实现HAL_SPI_MspInit()函数初始化底层资源 以下两个必须进行初始化 a 使能spi时钟 b 配置spi pins 以下根据需要初始化 c NVIC 中断配置 d DMA配置3 配置hspi,包括模式,datasize,baudrate,msb/lsb,crc等4 调用HAL_SPI_Init()函数,初始化spi配置以及底层资源(通过调用HAL_SPI_MspInit())