码迷,mamicode.com
首页 > 其他好文 > 详细

对Si446x驱动库的一些修改

时间:2015-01-29 16:06:29      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

折腾了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应该也不会吃力了吧。。




对Si446x驱动库的一些修改

标签:

原文地址:http://blog.csdn.net/efm32/article/details/43271007

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!