程序需要使用SPI,再添加SPI初始化后发现程序不运行,在SPI初始化前后各加了打印函数。然后只会打印第一个。
SDITask_PrintfToUART("%s\r\n", "Hello from SPP BLE Server!");
HwSPIInit();
SDITask_PrintfToUART("%s\r\n", "Hello from SPP BLE Server!");
后来发现修改任务栈大小后,可能会一个都不能打印,#define SBP_TASK_STACK_SIZE 1144//644,1044,1344。
1144大小就不能打印了。1044可以打印1个。但是如果不加这个SPI初始化,1344仍可以打印2个,而且会执行到后面的广播,会打印广播信息。这是RAM不够用吗?
在.MAP文件里发现RAM只用了13K。难道程序在运行的过程中,会消耗7k的RAM,SPI消耗的大?麻烦了解的大佬给指点下,是什么原因,我改如何调试?
还有我也不确定是否使用uDMA,我想使用uDMA应该如何配置?
89 739 bytes of readonly code memory
10 542 bytes of readonly data memory
13 043 bytes of readwrite data memory
void HwSPIInit(void)
{
// hSPIPins = PIN_open(&SPIPins, SPIPinsCfg); //SPIIO配置,后再主程序开始时配置
SPI_init();
SDITask_PrintfToUART("%s\r\n", "Hello from SPP BLE Server!"); //执行不到此处
SPI_Params_init(&SPIparams);
SPIparams.bitRate = 2000000; //2MHz 32:1.8432MHz
SPIparams.dataSize = 8;
SPIparams.frameFormat = SPI_POL0_PHA1; //相位1极性0
SPIparams.mode = SPI_MASTER; //SPI主从模式
SPIparams.transferMode = SPI_MODE_CALLBACK; //回调模式
SPIparams.transferCallbackFxn = spiSlaveCallback;//回调函数
SPIparams.transferTimeout = SPI_WAIT_FOREVER;
}
/*
* =============================== SPI DMA ===============================
*/
#include <ti/drivers/SPI.h>
#include <ti/drivers/spi/***.h>
*** ***[CC2640R2DK_4XS_SPICOUNT];
const *** ***[CC2640R2DK_4XS_SPICOUNT] = {
{
.baseAddr = SSI0_BASE,
.intNum = INT_SSI0_COMB,
.intPriority = ~0,
.swiPriority = 0,
.powerMngrId = PowerCC26XX_PERIPH_SSI0,
.defaultTxBufValue = 0,
.rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
.txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
.mosiPin = CC2640R2DK_4XS_SPI0_MOSI,
.misoPin = CC2640R2DK_4XS_SPI0_MISO,
.clkPin = CC2640R2DK_4XS_SPI0_CLK,
.csnPin = CC2640R2DK_4XS_SPI0_CSN
}
};
const SPI_Config SPI_config[CC2640R2DK_4XS_SPICOUNT] = {
{
.fxnTablePtr = &***,
.object = &***[CC2640R2DK_4XS_SPI0],
.hwAttrs = &***[CC2640R2DK_4XS_SPI0]
}
};
const uint_least8_t SPI_count = CC2640R2DK_4XS_SPICOUNT;