扩大sbl代码段

一、简介

本文以SimpleBLEPeripheral工程为例,介绍如何将SBL的bootloader的默认大小从2K修改为8K。


二、实验平台

协议栈版本:BLE-CC254x-1.4.0

编译软件:IAR 8.20.2

硬件平台:Smart RF(主芯片CC2541)

下载软件:SerialBootTool-v1.3.2


三、版权声明

此博文转载

博主:甜甜的大香瓜


原文地址:http://blog.csdn.net/feilusia

联系方式:897503845@qq.com

技术交流QQ群(香瓜BLE之CC2541):127442605


四、实验前提

在进行本文步骤前,请先阅读以下博文:

1、《CC2541之SBL》:http://blog.csdn.net/feilusia/article/details/52016766


五、实验步骤

1、修改SBL的xcl文件(……\BLE-CC254x-1.4.0\Projects\ble\util\SBL\app\cc254x\sbl_cc254x.xcl)

[cpp]  view plain  copy
  1. // CODE Root - Taking the first 2K of flash (the 1st page contains the INTVEC's).  
  2. //  
  3. -D_IVEC_BEG=0x0000  
  4. -D_IVEC_END=0x07FF  

修改为

[cpp]  view plain  copy
  1. //8K  
  2. -D_IVEC_BEG=0x0000  
  3. -D_IVEC_END=0x1FFF  

注意这里必须要修改,不能用//注释,否则后面工程编译会报错。


2、修改SBL工程中的文件(……BLE-CC254x-1.4.0\Projects\ble\util\SBL\iar\cc254x\sbl.eww

1)修改跳转地址(sbl_main.c

[cpp]  view plain  copy
  1. asm("LJMP 0x2000");       //8K asm("LJMP 0x800");    

2)修改跳转地址(sbl_ivec.s51)

[cpp]  view plain  copy
  1. OFFSET   EQU    0x2000//8K 0x800  

3)修改CRC地址(sbl_app.h)

[cpp]  view plain  copy
  1. /* 
  2. #define HAL_SBL_IMG_BEG                (uint16)(0x800 / HAL_FLASH_WORD_SIZE) 
  3. #define HAL_SBL_IMG_CRC                (uint16)(0x890 / HAL_FLASH_WORD_SIZE) 
  4. */  
  5. //8K  
  6. #define HAL_SBL_IMG_BEG                (uint16)(0x2000 / HAL_FLASH_WORD_SIZE)  
  7. #define HAL_SBL_IMG_CRC                (uint16)(0x2090 / HAL_FLASH_WORD_SIZE)  

3、修改应用工程的xcl文件(……\BLE-CC254x-1.4.0\Projects\ble\common\cc2540\cc254x_f256_sbl.xcl)

1)修改应用代码首地址

[cpp]  view plain  copy
  1. // CODE  
  2. //  
  3. -D_CODE_BEG=0x0800  
  4. -D_CODE_END=0x7FFF  
修改为

[cpp]  view plain  copy
  1. // CODE  
  2. //  
  3. -D_CODE_BEG=0x2000  
  4. -D_CODE_END=0x7FFF  

2)修改CRC地址

[cpp]  view plain  copy
  1. -Z(CODE)CHECKSUM=0x890-0x891  
  2. -Z(CODE)CRC_SHDW=0x892-0x893  
修改为

[cpp]  view plain  copy
  1. -Z(CODE)CHECKSUM=0x2090-0x2091  
  2. -Z(CODE)CRC_SHDW=0x2092-0x2093  

3)修改CRC算法中使用到的CRC地址

[cpp]  view plain  copy
  1. -J2,crc16,=_CODE_BEG-890,894-_BANK7_END  
修改为

[cpp]  view plain  copy
  1. -J2,crc16,=_CODE_BEG-2090,2094-_BANK7_END  

4、实验结果

1)按照《CC2541之SBL》中的步骤重做,会发现应用工程中的simpleBLEPeripheral.map中的应用代码位置由2K(0x800)位置变为8K(0x2000)位置,对比如下图



首先,我们需要安装一个稀疏贝叶斯学习工具箱(Sparse Bayesian Learning Toolbox),可以从以下链接下载并安装:https://github.com/SheffieldML/sparsbayes。 接下来,我们可以使用以下代码实现off-grid SBL: ``` %% Load data load('data.mat'); % replace with your data file %% Set parameters M = 50; % number of atoms in dictionary N = size(Y,1); % number of measurements K = size(Y,2); % number of signals sigma = 0.1; % noise level alpha = 1/sigma^2; % prior variance gamma = 1; % hyperparameter for sparse prior %% Construct dictionary D = dctmtx(N); D = D(1:M,:); %% Initialize variables w = zeros(M,K); lambda = ones(M,K)*gamma/alpha; a = zeros(M,K); %% Perform off-grid SBL for iter = 1:100 % set number of iterations % Update coefficients for k = 1:K a(:,k) = w(:,k).*lambda(:,k)./(lambda(:,k) + alpha); end % Update noise variance alpha = sum(sum((Y-D*a).^2))/(N*K); % Update sparse prior hyperparameter gamma = M/(sum(sum(abs(a)))+eps); % Update precision matrix for k = 1:K lambda(:,k) = gamma./(abs(a(:,k))+eps); end % Update mean for k = 1:K w(:,k) = D'*((D*diag(lambda(:,k))*D'+alpha*eye(N))\Y(:,k)); end end %% Display results for k = 1:K figure; subplot(2,1,1); plot(Y(:,k)); title('Original Signal'); subplot(2,1,2); plot(D*a(:,k)); title('Recovered Signal'); end ``` 其中,data.mat是一个包含观测信号Y的MATLAB数据文件。 这段代码实现了一个基于稀疏贝叶斯学习的离散字典的信号重构算法。我们首先构造一个大小为M的离散字典,然后通过迭代来更新系数矩阵a、噪声方差alpha、稀疏先验超参数gamma和精度矩阵lambda,最后使用更新后的系数矩阵a重构原始信号并显示结果。 请注意,这只是一个简单的示例,您需要根据您的数据和需求进行适当的调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值