add kv fs component
1. a true wear-leveling kv fs for norflash, especially optimize for some onchip norflash with "write once on one single write unit" like stm32l4, a true "no earse before write" flash algorithm. 2. an "as less as possible" gc strategy, do best to save norflash's life. 3. full "power down protection" support 4. see "examples" of kv, project in "TencentOS_tiny_EVB_MX_Plus", with onchip flash and qspiflash sample.
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#include "tos_kv.h"
|
||||
#include "stm32l4xx.h"
|
||||
|
||||
#define ONCHIP_FLASH_ADDR_START 0x08000000 // start address for onchip flash for stm32l431RCTX
|
||||
#define ONCHIP_FLASH_ADDR_MAX 0x0803FFFF // 256K flash addr for stm32l431RCTX
|
||||
|
||||
#define SECTOR_SIZE 2048 // sector size for stm32l431RCTX
|
||||
#define SECTOR_SIZE_LOG2 11 // 2 ^ 11 = 2048
|
||||
|
||||
#define FOR_KV_FLASH_SIZE (2 * SECTOR_SIZE) // storage for kv
|
||||
#define FOR_KV_FLASH_START 0x803d000
|
||||
|
||||
int stm32l4_norflash_onchip_read(uint32_t addr, void *buf, size_t len)
|
||||
{
|
||||
memcpy(buf, (void *)addr, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int stm32l4_norflash_onchip_write(uint32_t addr, const void *buf, size_t len)
|
||||
{
|
||||
int i = 0;
|
||||
uint8_t *array = (uint8_t *)buf;
|
||||
HAL_StatusTypeDef hal_status;
|
||||
|
||||
HAL_FLASH_Unlock();
|
||||
tos_cpu_int_disable();
|
||||
|
||||
for (i = 0; i < len; i += 8) {
|
||||
hal_status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD,
|
||||
addr + i,
|
||||
*(uint64_t *)&array[i]);
|
||||
if (hal_status != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
HAL_FLASH_Lock();
|
||||
tos_cpu_int_enable();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int stm32l4_norflash_onchip_erase(uint32_t addr, size_t size)
|
||||
{
|
||||
uint32_t page_err = 0;
|
||||
HAL_StatusTypeDef hal_status;
|
||||
FLASH_EraseInitTypeDef erase_para;
|
||||
|
||||
erase_para.TypeErase = FLASH_TYPEERASE_PAGES;
|
||||
erase_para.Banks = FLASH_BANK_1;
|
||||
erase_para.Page = addr / SECTOR_SIZE;
|
||||
erase_para.NbPages = size / SECTOR_SIZE;
|
||||
HAL_FLASH_Unlock();
|
||||
tos_cpu_int_disable();
|
||||
hal_status = HAL_FLASHEx_Erase(&erase_para, &page_err);
|
||||
HAL_FLASH_Lock();
|
||||
tos_cpu_int_enable();
|
||||
|
||||
if (hal_status != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
kv_flash_drv_t stm32l4_norflash_onchip_drv = {
|
||||
.write = stm32l4_norflash_onchip_write,
|
||||
.read = stm32l4_norflash_onchip_read,
|
||||
.erase = stm32l4_norflash_onchip_erase,
|
||||
};
|
||||
|
||||
kv_flash_prop_t stm32l4_norflash_onchip_prop = {
|
||||
.sector_size_log2 = SECTOR_SIZE_LOG2,
|
||||
.pgm_type = KV_FLASH_PROGRAM_TYPE_DOUBLEWORD,
|
||||
.flash_start = FOR_KV_FLASH_START,
|
||||
.flash_size = FOR_KV_FLASH_SIZE,
|
||||
};
|
||||
|
@@ -0,0 +1,407 @@
|
||||
#include "hal_qspi_flash.h"
|
||||
#include "stm32l4xx.h"
|
||||
|
||||
#ifdef HAL_QSPI_MODULE_ENABLED
|
||||
|
||||
#define QSPI_FLASH_PAGESIZE 256
|
||||
#define QSPI_FLASH_SECTOR 4096
|
||||
#define QSPI_FLASH_ID 0xEF4017
|
||||
#define QSPI_FLASH_TOTAL_SIZE 0x7FFFFF
|
||||
|
||||
#define QSPI_FLASH_WriteEnable 0x06
|
||||
#define QSPI_FLASH_WriteDisable 0x04
|
||||
#define QSPI_FLASH_ReadStatusReg 0x05
|
||||
#define QSPI_FLASH_WriteStatusReg 0x01
|
||||
#define QSPI_FLASH_ReadData 0x03
|
||||
#define QSPI_FLASH_FastReadData 0x0B
|
||||
#define QSPI_FLASH_FastReadDual 0x3B
|
||||
#define QSPI_FLASH_PageProgram 0x02
|
||||
#define QSPI_FLASH_BlockErase 0xD8
|
||||
#define QSPI_FLASH_SectorErase 0x20
|
||||
#define QSPI_FLASH_ChipErase 0xC7
|
||||
#define QSPI_FLASH_PowerDown 0xB9
|
||||
#define QSPI_FLASH_ReleasePowerDown 0xAB
|
||||
#define QSPI_FLASH_DeviceID 0xAB
|
||||
#define QSPI_FLASH_ManufactDeviceID 0x90
|
||||
#define QSPI_FLASH_JedecDeviceID 0x9F
|
||||
#define QSPI_FLASH_WIP_FLAG 0x01
|
||||
#define QSPI_FLASH_DUMMY_BYTE 0xFF
|
||||
|
||||
#define CHOOSE_BIT_16 16
|
||||
#define CHOOSE_BIT_8 8
|
||||
|
||||
|
||||
#define CHECK_RET_RETURN(ret) \
|
||||
do \
|
||||
{ \
|
||||
if ((ret) < 0) \
|
||||
{ \
|
||||
return ret; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
extern QSPI_HandleTypeDef hqspi;
|
||||
|
||||
/* This function is called by inner-HAL lib */
|
||||
static void HAL_QSPI_MspInit(QSPI_HandleTypeDef* qspiHandle)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
if(qspiHandle->Instance==QUADSPI)
|
||||
{
|
||||
/* USER CODE BEGIN QUADSPI_MspInit 0 */
|
||||
|
||||
/* USER CODE END QUADSPI_MspInit 0 */
|
||||
/* QUADSPI clock enable */
|
||||
__HAL_RCC_QSPI_CLK_ENABLE();
|
||||
|
||||
/**QUADSPI GPIO Configuration
|
||||
PB0 ------> QUADSPI_BK1_IO1
|
||||
PB1 ------> QUADSPI_BK1_IO0
|
||||
PB10 ------> QUADSPI_CLK
|
||||
PB11 ------> QUADSPI_BK1_NCS
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN QUADSPI_MspInit 1 */
|
||||
|
||||
/* USER CODE END QUADSPI_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* This function is called by inner-HAL lib */
|
||||
static void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* qspiHandle)
|
||||
{
|
||||
|
||||
if(qspiHandle->Instance==QUADSPI)
|
||||
{
|
||||
/* USER CODE BEGIN QUADSPI_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END QUADSPI_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_QSPI_CLK_DISABLE();
|
||||
|
||||
/**QUADSPI GPIO Configuration
|
||||
PB0 ------> QUADSPI_BK1_IO1
|
||||
PB1 ------> QUADSPI_BK1_IO0
|
||||
PB10 ------> QUADSPI_CLK
|
||||
PB11 ------> QUADSPI_BK1_NCS
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11);
|
||||
|
||||
/* USER CODE BEGIN QUADSPI_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END QUADSPI_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief QSPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @param instruction Ҫ<><D2AA><EFBFBD>͵<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* @param address <09><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ŀ<EFBFBD>ĵ<EFBFBD>ַ
|
||||
* @param dummyCycles <09><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param instructionMode ָ<><D6B8>ģʽ;QSPI_INSTRUCTION_NONE,QSPI_INSTRUCTION_1_LINE,QSPI_INSTRUCTION_2_LINE,QSPI_INSTRUCTION_4_LINE
|
||||
* @param addressMode <09><>ַģʽ; QSPI_ADDRESS_NONE,QSPI_ADDRESS_1_LINE,QSPI_ADDRESS_2_LINE,QSPI_ADDRESS_4_LINE
|
||||
* @param addressSize <09><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>;QSPI_ADDRESS_8_BITS,QSPI_ADDRESS_16_BITS,QSPI_ADDRESS_24_BITS,QSPI_ADDRESS_32_BITS
|
||||
* @param dataMode <09><><EFBFBD><EFBFBD>ģʽ; QSPI_DATA_NONE,QSPI_DATA_1_LINE,QSPI_DATA_2_LINE,QSPI_DATA_4_LINE
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
uint32_t QSPI_Send_CMD(uint32_t instruction, uint32_t address, uint32_t dummyCycles, uint32_t instructionMode, uint32_t addressMode, uint32_t addressSize, uint32_t dataMode)
|
||||
{
|
||||
QSPI_CommandTypeDef s_command;
|
||||
|
||||
s_command.Instruction = instruction; //ָ<><D6B8>
|
||||
s_command.Address = address; //<2F><>ַ
|
||||
s_command.DummyCycles = dummyCycles; //<2F><><EFBFBD>ÿ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
s_command.InstructionMode = instructionMode; //ָ<><D6B8>ģʽ
|
||||
s_command.AddressMode = addressMode; //<2F><>ַģʽ
|
||||
s_command.AddressSize = addressSize; //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
|
||||
s_command.DataMode = dataMode; //<2F><><EFBFBD><EFBFBD>ģʽ
|
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; //ÿ<>ζ<EFBFBD><CEB6><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; //<2F><EFBFBD><DEBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; //<2F>ر<EFBFBD>DDRģʽ
|
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
|
||||
|
||||
return HAL_QSPI_Command(&hqspi, &s_command, 5000);
|
||||
}
|
||||
|
||||
uint8_t QSPI_Receive(const uint8_t * buf, uint32_t datalen)
|
||||
{
|
||||
hqspi.Instance->DLR = datalen - 1; //Configuration data length
|
||||
if(HAL_QSPI_Receive(&hqspi, (uint8_t * )buf, 5000) == HAL_OK) return 0; //receive data
|
||||
|
||||
else return 1;
|
||||
}
|
||||
|
||||
uint8_t QSPI_Transmit(const int8_t * buf, uint32_t datalen)
|
||||
{
|
||||
hqspi.Instance->DLR = datalen - 1; //Configuration data length
|
||||
if(HAL_QSPI_Transmit(&hqspi, (uint8_t * )buf, 5000) == HAL_OK) return 0; //send data
|
||||
|
||||
else return 1;
|
||||
}
|
||||
|
||||
static void prv_spi_flash_write_enable(void)
|
||||
{
|
||||
QSPI_Send_CMD(QSPI_FLASH_WriteEnable, 0, 0, QSPI_INSTRUCTION_1_LINE, QSPI_ADDRESS_NONE, QSPI_ADDRESS_8_BITS, QSPI_DATA_NONE);
|
||||
}
|
||||
|
||||
static void prv_spi_flash_wait_write_end(void)
|
||||
{
|
||||
uint8_t status = 0;
|
||||
|
||||
|
||||
/* Loop as long as the memory is busy with a write cycle */
|
||||
do
|
||||
{
|
||||
/* Send a dummy byte to generate the clock needed by the FLASH
|
||||
and put the value of the status register in status variable */
|
||||
QSPI_Send_CMD(QSPI_FLASH_ReadStatusReg, 0, 0, QSPI_INSTRUCTION_1_LINE, QSPI_ADDRESS_NONE, QSPI_ADDRESS_8_BITS, QSPI_DATA_1_LINE);
|
||||
QSPI_Receive(&status, 1);
|
||||
|
||||
} while ((status & QSPI_FLASH_WIP_FLAG) == SET); /* Write in progress */
|
||||
|
||||
}
|
||||
|
||||
static int prv_spi_flash_write_page(const uint8_t* buf, uint32_t addr, int32_t len)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if(0 == len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
prv_spi_flash_write_enable(); //Write enable
|
||||
|
||||
QSPI_Send_CMD(QSPI_FLASH_PageProgram, addr, 0, QSPI_INSTRUCTION_1_LINE, QSPI_ADDRESS_1_LINE, QSPI_ADDRESS_24_BITS, QSPI_DATA_1_LINE);
|
||||
QSPI_Transmit((const int8_t *)buf, len);
|
||||
|
||||
prv_spi_flash_wait_write_end(); //Waiting for Writing to End
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int prv_spi_flash_erase_sector(uint32_t addr)
|
||||
{
|
||||
//printf("fe:%x\r\n",addr); //<2F><><EFBFBD><EFBFBD>flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int ret = 0;
|
||||
prv_spi_flash_write_enable(); //Write enable
|
||||
prv_spi_flash_wait_write_end();
|
||||
|
||||
ret=QSPI_Send_CMD(QSPI_FLASH_SectorErase, addr, 0, QSPI_INSTRUCTION_1_LINE, QSPI_ADDRESS_1_LINE, QSPI_ADDRESS_24_BITS, QSPI_DATA_NONE);
|
||||
|
||||
prv_spi_flash_wait_write_end(); //Waiting for Writing to End
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void hal_spi_flash_config(void)
|
||||
{
|
||||
hqspi.Instance = QUADSPI;
|
||||
hqspi.Init.ClockPrescaler = 0;
|
||||
hqspi.Init.FifoThreshold = 4;
|
||||
hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
|
||||
hqspi.Init.FlashSize = POSITION_VAL(0x1000000) - 1;
|
||||
hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_4_CYCLE;
|
||||
hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
|
||||
hqspi.Init.FlashID = QSPI_FLASH_ID_1;
|
||||
hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
|
||||
if (HAL_QSPI_Init(&hqspi) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int hal_spi_flash_erase(uint32_t addr, int32_t len)
|
||||
{
|
||||
uint32_t begin;
|
||||
uint32_t end;
|
||||
int i;
|
||||
|
||||
if (len < 0
|
||||
|| addr > QSPI_FLASH_TOTAL_SIZE
|
||||
|| addr + len > QSPI_FLASH_TOTAL_SIZE)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
begin = addr / QSPI_FLASH_SECTOR * QSPI_FLASH_SECTOR;
|
||||
end = (addr + len - 1) / QSPI_FLASH_SECTOR * QSPI_FLASH_SECTOR;
|
||||
|
||||
for (i = begin; i <= end; i += QSPI_FLASH_SECTOR)
|
||||
{
|
||||
if (prv_spi_flash_erase_sector(i) == -1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hal_spi_flash_write(const void* buf, int32_t len, uint32_t* location)
|
||||
{
|
||||
const uint8_t* pbuf = (const uint8_t*)buf;
|
||||
int page_cnt = 0;
|
||||
int remain_cnt = 0;
|
||||
int temp = 0;
|
||||
uint32_t loc_addr;
|
||||
uint8_t addr = 0;
|
||||
uint8_t count = 0;
|
||||
int i;
|
||||
int ret = 0;
|
||||
|
||||
if (NULL == pbuf
|
||||
|| NULL == location
|
||||
|| len < 0
|
||||
|| *location > QSPI_FLASH_TOTAL_SIZE
|
||||
|| len + *location > QSPI_FLASH_TOTAL_SIZE)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
loc_addr = *location;
|
||||
addr = loc_addr % QSPI_FLASH_PAGESIZE;
|
||||
count = QSPI_FLASH_PAGESIZE - addr;
|
||||
page_cnt = len / QSPI_FLASH_PAGESIZE;
|
||||
remain_cnt = len % QSPI_FLASH_PAGESIZE;
|
||||
|
||||
if (addr == 0) /* addr is aligned to SPI_FLASH_PAGESIZE */
|
||||
{
|
||||
if (page_cnt == 0) /* len < SPI_FLASH_PAGESIZE */
|
||||
{
|
||||
ret = prv_spi_flash_write_page(pbuf, loc_addr, len);
|
||||
CHECK_RET_RETURN(ret);
|
||||
}
|
||||
else /* len > SPI_FLASH_PAGESIZE */
|
||||
{
|
||||
for (i = 0; i < page_cnt; ++i)
|
||||
{
|
||||
ret = prv_spi_flash_write_page(pbuf + i * QSPI_FLASH_PAGESIZE, loc_addr, QSPI_FLASH_PAGESIZE);
|
||||
CHECK_RET_RETURN(ret);
|
||||
loc_addr += QSPI_FLASH_PAGESIZE;
|
||||
}
|
||||
|
||||
ret = prv_spi_flash_write_page(pbuf + page_cnt * QSPI_FLASH_PAGESIZE, loc_addr, remain_cnt);
|
||||
CHECK_RET_RETURN(ret);
|
||||
}
|
||||
}
|
||||
else /* addr is not aligned to SPI_FLASH_PAGESIZE */
|
||||
{
|
||||
if (page_cnt == 0) /* len < SPI_FLASH_PAGESIZE */
|
||||
{
|
||||
if (remain_cnt > count) /* (len + loc_addr) > SPI_FLASH_PAGESIZE */
|
||||
{
|
||||
temp = remain_cnt - count;
|
||||
|
||||
ret = prv_spi_flash_write_page(pbuf, loc_addr, count);
|
||||
CHECK_RET_RETURN(ret);
|
||||
|
||||
ret = prv_spi_flash_write_page(pbuf + count, loc_addr + count, temp);
|
||||
CHECK_RET_RETURN(ret);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = prv_spi_flash_write_page(pbuf, loc_addr, len);
|
||||
CHECK_RET_RETURN(ret);
|
||||
}
|
||||
}
|
||||
else /* len > SPI_FLASH_PAGESIZE */
|
||||
{
|
||||
len -= count;
|
||||
page_cnt = len / QSPI_FLASH_PAGESIZE;
|
||||
remain_cnt = len % QSPI_FLASH_PAGESIZE;
|
||||
|
||||
ret = prv_spi_flash_write_page(pbuf, loc_addr, count);
|
||||
CHECK_RET_RETURN(ret);
|
||||
loc_addr += count;
|
||||
|
||||
for (i = 0; i < page_cnt; ++i)
|
||||
{
|
||||
ret = prv_spi_flash_write_page(pbuf + count + i * QSPI_FLASH_PAGESIZE, loc_addr, QSPI_FLASH_PAGESIZE);
|
||||
CHECK_RET_RETURN(ret);
|
||||
loc_addr += QSPI_FLASH_PAGESIZE;
|
||||
}
|
||||
|
||||
if (remain_cnt != 0)
|
||||
{
|
||||
ret = prv_spi_flash_write_page(pbuf + count + page_cnt * QSPI_FLASH_PAGESIZE, loc_addr, remain_cnt);
|
||||
CHECK_RET_RETURN(ret);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*location += len;
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
int hal_spi_flash_erase_write(const void* buf, int32_t len, uint32_t location)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = hal_spi_flash_erase(location, len);
|
||||
CHECK_RET_RETURN(ret);
|
||||
ret = hal_spi_flash_write(buf, len, &location);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int hal_spi_flash_read(void* buf, int32_t len, uint32_t location)
|
||||
{
|
||||
int ret = 0;
|
||||
uint8_t* pbuf = (uint8_t*)buf;
|
||||
|
||||
if (NULL == pbuf
|
||||
|| len < 0
|
||||
|| location > QSPI_FLASH_TOTAL_SIZE
|
||||
|| len + location > QSPI_FLASH_TOTAL_SIZE)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
QSPI_Send_CMD(QSPI_FLASH_FastReadData, location, 8, QSPI_INSTRUCTION_1_LINE, QSPI_ADDRESS_1_LINE, QSPI_ADDRESS_24_BITS, QSPI_DATA_1_LINE);
|
||||
QSPI_Receive(buf, len);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
int hal_spi_flash_get_id(void)
|
||||
{
|
||||
QSPI_CommandTypeDef s_command;
|
||||
uint8_t temp[3];
|
||||
uint32_t deviceid;
|
||||
|
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;
|
||||
s_command.Instruction = QSPI_FLASH_JedecDeviceID;
|
||||
s_command.AddressMode = QSPI_ADDRESS_1_LINE;
|
||||
s_command.AddressSize = QSPI_ADDRESS_24_BITS;
|
||||
s_command.DataMode = QSPI_DATA_1_LINE;
|
||||
s_command.AddressMode = QSPI_ADDRESS_NONE;
|
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
|
||||
s_command.DummyCycles = 0;
|
||||
s_command.NbData = 3;
|
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE;
|
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
|
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;
|
||||
|
||||
HAL_QSPI_Command(&hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE);
|
||||
|
||||
QSPI_Receive(temp, 3);
|
||||
deviceid = (temp[1]<<8)|( temp[0]<<16)|(temp[2]);
|
||||
return deviceid;
|
||||
}
|
||||
|
||||
|
||||
#endif /* HAL_QSPI_MODULE_ENABLED */
|
@@ -0,0 +1,23 @@
|
||||
#ifndef __HAL_SPI_FLASH_H__
|
||||
#define __HAL_SPI_FLASH_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void hal_spi_flash_config(void);
|
||||
|
||||
int hal_spi_flash_erase(uint32_t addr, int32_t len);
|
||||
|
||||
int hal_spi_flash_write(const void* buf, int32_t len, uint32_t* location);
|
||||
|
||||
int hal_spi_flash_erase_write(const void* buf, int32_t len, uint32_t location);
|
||||
|
||||
int hal_spi_flash_read(void* buf, int32_t len, uint32_t location);
|
||||
|
||||
int hal_spi_flash_get_id(void);
|
||||
|
||||
void hal_spi_flash_power_down(void);
|
||||
|
||||
void hal_spi_flash_wake_up(void);
|
||||
|
||||
#endif /* _HAL_SPI_FLASH_H_ */
|
||||
|
@@ -0,0 +1,40 @@
|
||||
#include "tos_kv.h"
|
||||
#include "hal_qspi_flash.h"
|
||||
|
||||
#define SECTOR_SIZE 4096 // sector size for qspiflash
|
||||
#define SECTOR_SIZE_LOG2 12 // 2 ^ 12 = 4096
|
||||
|
||||
#define FOR_KV_FLASH_SIZE (2 * SECTOR_SIZE)
|
||||
#define FOR_KV_FLASH_START 0x0
|
||||
|
||||
int stm32l4_qspiflash_read(uint32_t addr, void *buf, size_t len)
|
||||
{
|
||||
return hal_spi_flash_read(buf, len, addr);
|
||||
}
|
||||
|
||||
int stm32l4_qspiflash_write(uint32_t addr, const void *buf, size_t len)
|
||||
{
|
||||
uint32_t location = addr;
|
||||
|
||||
return hal_spi_flash_write(buf, len, &location);
|
||||
}
|
||||
|
||||
int stm32l4_qspiflash_erase(uint32_t addr, size_t size)
|
||||
{
|
||||
return hal_spi_flash_erase(addr, size);
|
||||
}
|
||||
|
||||
kv_flash_drv_t stm32l4_qspiflash_drv = {
|
||||
.write = stm32l4_qspiflash_write,
|
||||
.read = stm32l4_qspiflash_read,
|
||||
.erase = stm32l4_qspiflash_erase,
|
||||
};
|
||||
|
||||
kv_flash_prop_t stm32l4_qspiflash_prop = {
|
||||
.sector_size_log2 = SECTOR_SIZE_LOG2,
|
||||
.pgm_type = KV_FLASH_PROGRAM_TYPE_BYTE,
|
||||
.flash_start = FOR_KV_FLASH_START,
|
||||
.flash_size = FOR_KV_FLASH_SIZE,
|
||||
};
|
||||
|
||||
|
79
board/TencentOS_tiny_EVB_MX_Plus/BSP/Inc/quadspi.h
Normal file
79
board/TencentOS_tiny_EVB_MX_Plus/BSP/Inc/quadspi.h
Normal file
@@ -0,0 +1,79 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* File Name : QUADSPI.h
|
||||
* Description : This file provides code for the configuration
|
||||
* of the QUADSPI instances.
|
||||
******************************************************************************
|
||||
** This notice applies to any and all portions of this file
|
||||
* that are not between comment pairs USER CODE BEGIN and
|
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools
|
||||
* are owned by their respective copyright owners.
|
||||
*
|
||||
* COPYRIGHT(c) 2019 STMicroelectronics
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __quadspi_H
|
||||
#define __quadspi_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32l4xx_hal.h"
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern QSPI_HandleTypeDef hqspi;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_QUADSPI_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /*__ quadspi_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@@ -78,7 +78,7 @@
|
||||
/*#define HAL_OSPI_MODULE_ENABLED */
|
||||
/*#define HAL_PCD_MODULE_ENABLED */
|
||||
/*#define HAL_QSPI_MODULE_ENABLED */
|
||||
/*#define HAL_QSPI_MODULE_ENABLED */
|
||||
#define HAL_QSPI_MODULE_ENABLED
|
||||
/*#define HAL_RNG_MODULE_ENABLED */
|
||||
#define HAL_RTC_MODULE_ENABLED
|
||||
/*#define HAL_SAI_MODULE_ENABLED */
|
||||
|
139
board/TencentOS_tiny_EVB_MX_Plus/BSP/Src/quadspi.c
Normal file
139
board/TencentOS_tiny_EVB_MX_Plus/BSP/Src/quadspi.c
Normal file
@@ -0,0 +1,139 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* File Name : QUADSPI.c
|
||||
* Description : This file provides code for the configuration
|
||||
* of the QUADSPI instances.
|
||||
******************************************************************************
|
||||
** This notice applies to any and all portions of this file
|
||||
* that are not between comment pairs USER CODE BEGIN and
|
||||
* USER CODE END. Other portions of this file, whether
|
||||
* inserted by the user or by software development tools
|
||||
* are owned by their respective copyright owners.
|
||||
*
|
||||
* COPYRIGHT(c) 2019 STMicroelectronics
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "quadspi.h"
|
||||
|
||||
#include "gpio.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
QSPI_HandleTypeDef hqspi;
|
||||
|
||||
/* QUADSPI init function */
|
||||
void MX_QUADSPI_Init(void)
|
||||
{
|
||||
|
||||
hqspi.Instance = QUADSPI;
|
||||
hqspi.Init.ClockPrescaler = 0;
|
||||
hqspi.Init.FifoThreshold = 4;
|
||||
hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
|
||||
hqspi.Init.FlashSize = 25;
|
||||
hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_4_CYCLE;
|
||||
hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
|
||||
hqspi.Init.FlashID = QSPI_FLASH_ID_1;
|
||||
hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
|
||||
if (HAL_QSPI_Init(&hqspi) != HAL_OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HAL_QSPI_MspInit(QSPI_HandleTypeDef* qspiHandle)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
if(qspiHandle->Instance==QUADSPI)
|
||||
{
|
||||
/* USER CODE BEGIN QUADSPI_MspInit 0 */
|
||||
|
||||
/* USER CODE END QUADSPI_MspInit 0 */
|
||||
/* QUADSPI clock enable */
|
||||
__HAL_RCC_QSPI_CLK_ENABLE();
|
||||
|
||||
/**QUADSPI GPIO Configuration
|
||||
PB0 ------> QUADSPI_BK1_IO1
|
||||
PB1 ------> QUADSPI_BK1_IO0
|
||||
PB10 ------> QUADSPI_CLK
|
||||
PB11 ------> QUADSPI_BK1_NCS
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN QUADSPI_MspInit 1 */
|
||||
|
||||
/* USER CODE END QUADSPI_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* qspiHandle)
|
||||
{
|
||||
|
||||
if(qspiHandle->Instance==QUADSPI)
|
||||
{
|
||||
/* USER CODE BEGIN QUADSPI_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END QUADSPI_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_QSPI_CLK_DISABLE();
|
||||
|
||||
/**QUADSPI GPIO Configuration
|
||||
PB0 ------> QUADSPI_BK1_IO1
|
||||
PB1 ------> QUADSPI_BK1_IO0
|
||||
PB10 ------> QUADSPI_CLK
|
||||
PB11 ------> QUADSPI_BK1_NCS
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11);
|
||||
|
||||
/* USER CODE BEGIN QUADSPI_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END QUADSPI_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@@ -0,0 +1,97 @@
|
||||
// File: STM32L43x_44x_45x_46x.dbgconf
|
||||
// Version: 1.0.0
|
||||
// Note: refer to STM32L43xxx STM32L44xxx STM32L45xxx STM32L46xxx Reference manual (RM0394)
|
||||
// refer to STM32L431xx, STM32L432xx, STM32L433xx, STM32L442xx, STM32L443xx, STM32L451xx, STM32L452xx, STM32L462xx datasheets
|
||||
|
||||
// <<< Use Configuration Wizard in Context Menu >>>
|
||||
|
||||
// <h> Debug MCU configuration register (DBGMCU_CR)
|
||||
// <o0.2> DBG_STANDBY
|
||||
// <i> Debug Standby mode
|
||||
// <i> 0: (FCLK=Off, HCLK=Off) The whole digital part is unpowered.
|
||||
// <i> 1: (FCLK=On, HCLK=On) The digital part is not unpowered and FCLK and HCLK are provided by the internal RC oscillator which remains active
|
||||
// <o0.1> DBG_STOP
|
||||
// <i> Debug Stop mode
|
||||
// <i> 0: (FCLK=Off, HCLK=Off) In STOP mode, the clock controller disables all clocks (including HCLK and FCLK).
|
||||
// <i> 1: (FCLK=On, HCLK=On) When entering STOP mode, FCLK and HCLK are provided by the internal RC oscillator which remains active in STOP mode.
|
||||
// <o0.0> DBG_SLEEP
|
||||
// <i> Debug Sleep mode
|
||||
// <i> 0: (FCLK=On, HCLK=Off) In Sleep mode, FCLK is clocked by the system clock as previously configured by the software while HCLK is disabled.
|
||||
// <i> 1: (FCLK=On, HCLK=On) When entering Sleep mode, HCLK is fed by the same clock that is provided to FCLK (system clock as previously configured by the software).
|
||||
// </h>
|
||||
DbgMCU_CR = 0x00000007;
|
||||
|
||||
// <h> Debug MCU APB1 freeze register1 (DBGMCU_APB1FZR1)
|
||||
// <o0.31> DBG_LPTIM1_STOP
|
||||
// <i> LPTIM1 counter stopped when core is halted
|
||||
// <i> 0: The counter clock of LPTIM1 is fed even if the core is halted
|
||||
// <i> 1: The counter clock of LPTIM1 is stopped when the core is halted
|
||||
// <o0.25> DBG_CAN_STOP
|
||||
// <i> bxCAN1 stopped when core is halted
|
||||
// <i> 0: Same behavior as in normal mode
|
||||
// <i> 1: The bxCAN1 receive registers are frozen
|
||||
// <o0.23> DBG_I2C3_STOP
|
||||
// <i> I2C3 SMBUS timeout counter stopped when core is halted
|
||||
// <i> 0: Same behavior as in normal mode
|
||||
// <i> 1: The I2C3 SMBus timeout is frozen
|
||||
// <o0.22> DBG_I2C2_STOP
|
||||
// <i> I2C2 SMBUS timeout counter stopped when core is halted
|
||||
// <i> 0: Same behavior as in normal mode
|
||||
// <i> 1: The I2C2 SMBus timeout is frozen
|
||||
// <o0.21> DBG_I2C1_STOP
|
||||
// <i> I2C1 SMBUS timeout counter stopped when core is halted
|
||||
// <i> 0: Same behavior as in normal mode
|
||||
// <i> 1: The I2C1 SMBus timeout is frozen
|
||||
// <o0.12> DBG_IWDG_STOP
|
||||
// <i> Independent watchdog counter stopped when core is halted
|
||||
// <i> 0: The independent watchdog counter clock continues even if the core is halted
|
||||
// <i> 1: The independent watchdog counter clock is stopped when the core is halted
|
||||
// <o0.11> DBG_WWDG_STOP
|
||||
// <i> Window watchdog counter stopped when core is halted
|
||||
// <i> 0: The window watchdog counter clock continues even if the core is halted
|
||||
// <i> 1: The window watchdog counter clock is stopped when the core is halted
|
||||
// <o0.10> DBG_RTC_STOP
|
||||
// <i> RTC counter stopped when core is halted
|
||||
// <i> 0: The clock of the RTC counter is fed even if the core is halted
|
||||
// <i> 1: The clock of the RTC counter is stopped when the core is halted
|
||||
// <o0.5> DBG_TIM7_STOP
|
||||
// <i> TIM7 counter stopped when core is halted
|
||||
// <i> 0: The counter clock of TIM7 is fed even if the core is halted
|
||||
// <i> 1: The counter clock of TIM7 is stopped when the core is halted
|
||||
// <o0.4> DBG_TIM6_STOP
|
||||
// <i> TIM6 counter stopped when core is halted
|
||||
// <i> 0: The counter clock of TIM6 is fed even if the core is halted
|
||||
// <i> 1: The counter clock of TIM6 is stopped when the core is halted
|
||||
// <o0.0> DBG_TIM2_STOP
|
||||
// <i> TIM2 counter stopped when core is halted
|
||||
// <i> 0: The counter clock of TIM2 is fed even if the core is halted
|
||||
// <i> 1: The counter clock of TIM2 is stopped when the core is halted
|
||||
// </h>
|
||||
DbgMCU_APB1_Fz1 = 0x00000000;
|
||||
|
||||
// <h> Debug MCU APB1 freeze register 2 (DBGMCU_APB1FZR2)
|
||||
// <o0.5> DBG_LPTIM2_STOP
|
||||
// <i> LPTIM2 counter stopped when core is halted
|
||||
// <i> 0: The counter clock of LPTIM2 is fed even if the core is halted
|
||||
// <i> 1: The counter clock of LPTIM2 is stopped when the core is halted
|
||||
// </h>
|
||||
DbgMCU_APB1_Fz2 = 0x00000000;
|
||||
|
||||
// <h> Debug MCU APB2 freeze register (DBGMCU_APB2FZR)
|
||||
// <o0.17> DBG_TIM16_STOP
|
||||
// <i> TIM16 counter stopped when core is halted
|
||||
// <i> 0: The clock of the TIM16 counter is fed even if the core is halted
|
||||
// <i> 1: The clock of the TIM16 counter is stopped when the core is halted
|
||||
// <o0.16> DBG_TIM15_STOP
|
||||
// <i> TIM15 counter stopped when core is halted
|
||||
// <i> 0: The clock of the TIM15 counter is fed even if the core is halted
|
||||
// <i> 1: The clock of the TIM15 counter is stopped when the core is halted
|
||||
// <o0.11> DBG_TIM1_STOP
|
||||
// <i> TIM1 counter stopped when core is halted
|
||||
// <i> 0: The clock of the TIM1 counter is fed even if the core is halted
|
||||
// <i> 1: The clock of the TIM1 counter is stopped when the core is halted
|
||||
// </h>
|
||||
DbgMCU_APB2_Fz = 0x00000000;
|
||||
// </h>
|
||||
|
||||
// <<< end of configuration section >>>
|
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
|
||||
|
||||
<component name="EventRecorderStub" version="1.0.0"/> <!--name and version of the component-->
|
||||
<events>
|
||||
</events>
|
||||
|
||||
</component_viewer>
|
@@ -0,0 +1,20 @@
|
||||
|
||||
/*
|
||||
* Auto generated Run-Time-Environment Component Configuration File
|
||||
* *** Do not modify ! ***
|
||||
*
|
||||
* Project: 'TencentOS_tiny'
|
||||
* Target: 'TencentOS_tiny'
|
||||
*/
|
||||
|
||||
#ifndef RTE_COMPONENTS_H
|
||||
#define RTE_COMPONENTS_H
|
||||
|
||||
|
||||
/*
|
||||
* Define the Device Header File:
|
||||
*/
|
||||
#define CMSIS_device_header "stm32l4xx.h"
|
||||
|
||||
|
||||
#endif /* RTE_COMPONENTS_H */
|
1252
board/TencentOS_tiny_EVB_MX_Plus/KEIL/kv/TencentOS_tiny.uvoptx
Normal file
1252
board/TencentOS_tiny_EVB_MX_Plus/KEIL/kv/TencentOS_tiny.uvoptx
Normal file
File diff suppressed because it is too large
Load Diff
827
board/TencentOS_tiny_EVB_MX_Plus/KEIL/kv/TencentOS_tiny.uvprojx
Normal file
827
board/TencentOS_tiny_EVB_MX_Plus/KEIL/kv/TencentOS_tiny.uvprojx
Normal file
@@ -0,0 +1,827 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
|
||||
|
||||
<SchemaVersion>2.1</SchemaVersion>
|
||||
|
||||
<Header>### uVision Project, (C) Keil Software</Header>
|
||||
|
||||
<Targets>
|
||||
<Target>
|
||||
<TargetName>TencentOS_tiny</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32L431RCTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32L4xx_DFP.2.0.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack</PackURL>
|
||||
<Cpu>IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x803FFFF) CLOCK(8000000) FPU2 CPUTYPE("Cortex-M4")</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
<FlashDriverDll></FlashDriverDll>
|
||||
<DeviceId></DeviceId>
|
||||
<RegisterFile></RegisterFile>
|
||||
<MemoryEnv></MemoryEnv>
|
||||
<Cmp></Cmp>
|
||||
<Asm></Asm>
|
||||
<Linker></Linker>
|
||||
<OHString></OHString>
|
||||
<InfinionOptionDll></InfinionOptionDll>
|
||||
<SLE66CMisc></SLE66CMisc>
|
||||
<SLE66AMisc></SLE66AMisc>
|
||||
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||
<SFDFile>$$Device:STM32L431RCTx$CMSIS\SVD\STM32L4x1.svd</SFDFile>
|
||||
<bCustSvd>0</bCustSvd>
|
||||
<UseEnv>0</UseEnv>
|
||||
<BinPath></BinPath>
|
||||
<IncludePath></IncludePath>
|
||||
<LibPath></LibPath>
|
||||
<RegisterFilePath></RegisterFilePath>
|
||||
<DBRegisterFilePath></DBRegisterFilePath>
|
||||
<TargetStatus>
|
||||
<Error>0</Error>
|
||||
<ExitCodeStop>0</ExitCodeStop>
|
||||
<ButtonStop>0</ButtonStop>
|
||||
<NotGenerated>0</NotGenerated>
|
||||
<InvalidFlash>1</InvalidFlash>
|
||||
</TargetStatus>
|
||||
<OutputDirectory>.\obj\</OutputDirectory>
|
||||
<OutputName>TencentOS_tiny</OutputName>
|
||||
<CreateExecutable>1</CreateExecutable>
|
||||
<CreateLib>0</CreateLib>
|
||||
<CreateHexFile>1</CreateHexFile>
|
||||
<DebugInformation>1</DebugInformation>
|
||||
<BrowseInformation>0</BrowseInformation>
|
||||
<ListingPath>.\list\</ListingPath>
|
||||
<HexFormatSelection>1</HexFormatSelection>
|
||||
<Merge32K>0</Merge32K>
|
||||
<CreateBatchFile>0</CreateBatchFile>
|
||||
<BeforeCompile>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopU1X>0</nStopU1X>
|
||||
<nStopU2X>0</nStopU2X>
|
||||
</BeforeCompile>
|
||||
<BeforeMake>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopB1X>0</nStopB1X>
|
||||
<nStopB2X>0</nStopB2X>
|
||||
</BeforeMake>
|
||||
<AfterMake>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopA1X>0</nStopA1X>
|
||||
<nStopA2X>0</nStopA2X>
|
||||
</AfterMake>
|
||||
<SelectedForBatchBuild>0</SelectedForBatchBuild>
|
||||
<SVCSIdString></SVCSIdString>
|
||||
</TargetCommonOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>0</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>0</AlwaysBuild>
|
||||
<GenerateAssemblyFile>0</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>0</AssembleAssemblyFile>
|
||||
<PublicsOnly>0</PublicsOnly>
|
||||
<StopOnExitCode>3</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>0</ComprImg>
|
||||
</CommonProperty>
|
||||
<DllOption>
|
||||
<SimDllName>SARMCM3.DLL</SimDllName>
|
||||
<SimDllArguments>-REMAP -MPU</SimDllArguments>
|
||||
<SimDlgDll>DCM.DLL</SimDlgDll>
|
||||
<SimDlgDllArguments>-pCM4</SimDlgDllArguments>
|
||||
<TargetDllName>SARMCM3.DLL</TargetDllName>
|
||||
<TargetDllArguments>-MPU</TargetDllArguments>
|
||||
<TargetDlgDll>TCM.DLL</TargetDlgDll>
|
||||
<TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
|
||||
</DllOption>
|
||||
<DebugOption>
|
||||
<OPTHX>
|
||||
<HexSelection>1</HexSelection>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
<Oh166RecLen>16</Oh166RecLen>
|
||||
</OPTHX>
|
||||
</DebugOption>
|
||||
<Utilities>
|
||||
<Flash1>
|
||||
<UseTargetDll>1</UseTargetDll>
|
||||
<UseExternalTool>0</UseExternalTool>
|
||||
<RunIndependent>0</RunIndependent>
|
||||
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
|
||||
<Capability>1</Capability>
|
||||
<DriverSelection>4107</DriverSelection>
|
||||
</Flash1>
|
||||
<bUseTDR>1</bUseTDR>
|
||||
<Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2>
|
||||
<Flash3></Flash3>
|
||||
<Flash4></Flash4>
|
||||
<pFcarmOut></pFcarmOut>
|
||||
<pFcarmGrp></pFcarmGrp>
|
||||
<pFcArmRoot></pFcArmRoot>
|
||||
<FcArmLst>0</FcArmLst>
|
||||
</Utilities>
|
||||
<TargetArmAds>
|
||||
<ArmAdsMisc>
|
||||
<GenerateListings>0</GenerateListings>
|
||||
<asHll>1</asHll>
|
||||
<asAsm>1</asAsm>
|
||||
<asMacX>1</asMacX>
|
||||
<asSyms>1</asSyms>
|
||||
<asFals>1</asFals>
|
||||
<asDbgD>1</asDbgD>
|
||||
<asForm>1</asForm>
|
||||
<ldLst>0</ldLst>
|
||||
<ldmm>1</ldmm>
|
||||
<ldXref>1</ldXref>
|
||||
<BigEnd>0</BigEnd>
|
||||
<AdsALst>1</AdsALst>
|
||||
<AdsACrf>1</AdsACrf>
|
||||
<AdsANop>0</AdsANop>
|
||||
<AdsANot>0</AdsANot>
|
||||
<AdsLLst>1</AdsLLst>
|
||||
<AdsLmap>1</AdsLmap>
|
||||
<AdsLcgr>1</AdsLcgr>
|
||||
<AdsLsym>1</AdsLsym>
|
||||
<AdsLszi>1</AdsLszi>
|
||||
<AdsLtoi>1</AdsLtoi>
|
||||
<AdsLsun>1</AdsLsun>
|
||||
<AdsLven>1</AdsLven>
|
||||
<AdsLsxf>1</AdsLsxf>
|
||||
<RvctClst>0</RvctClst>
|
||||
<GenPPlst>0</GenPPlst>
|
||||
<AdsCpuType>"Cortex-M4"</AdsCpuType>
|
||||
<RvctDeviceName></RvctDeviceName>
|
||||
<mOS>0</mOS>
|
||||
<uocRom>0</uocRom>
|
||||
<uocRam>0</uocRam>
|
||||
<hadIROM>1</hadIROM>
|
||||
<hadIRAM>1</hadIRAM>
|
||||
<hadXRAM>0</hadXRAM>
|
||||
<uocXRam>0</uocXRam>
|
||||
<RvdsVP>2</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<hadIRAM2>0</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
<useUlib>1</useUlib>
|
||||
<EndSel>0</EndSel>
|
||||
<uLtcg>0</uLtcg>
|
||||
<nSecure>0</nSecure>
|
||||
<RoSelD>3</RoSelD>
|
||||
<RwSelD>3</RwSelD>
|
||||
<CodeSel>0</CodeSel>
|
||||
<OptFeed>0</OptFeed>
|
||||
<NoZi1>0</NoZi1>
|
||||
<NoZi2>0</NoZi2>
|
||||
<NoZi3>0</NoZi3>
|
||||
<NoZi4>0</NoZi4>
|
||||
<NoZi5>0</NoZi5>
|
||||
<Ro1Chk>0</Ro1Chk>
|
||||
<Ro2Chk>0</Ro2Chk>
|
||||
<Ro3Chk>0</Ro3Chk>
|
||||
<Ir1Chk>1</Ir1Chk>
|
||||
<Ir2Chk>0</Ir2Chk>
|
||||
<Ra1Chk>0</Ra1Chk>
|
||||
<Ra2Chk>0</Ra2Chk>
|
||||
<Ra3Chk>0</Ra3Chk>
|
||||
<Im1Chk>1</Im1Chk>
|
||||
<Im2Chk>0</Im2Chk>
|
||||
<OnChipMemories>
|
||||
<Ocm1>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm1>
|
||||
<Ocm2>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm2>
|
||||
<Ocm3>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm3>
|
||||
<Ocm4>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm4>
|
||||
<Ocm5>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm5>
|
||||
<Ocm6>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm6>
|
||||
<IRAM>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x20000000</StartAddress>
|
||||
<Size>0x10000</Size>
|
||||
</IRAM>
|
||||
<IROM>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x8000000</StartAddress>
|
||||
<Size>0x40000</Size>
|
||||
</IROM>
|
||||
<XRAM>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</XRAM>
|
||||
<OCR_RVCT1>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT1>
|
||||
<OCR_RVCT2>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT2>
|
||||
<OCR_RVCT3>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT3>
|
||||
<OCR_RVCT4>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x8000000</StartAddress>
|
||||
<Size>0x40000</Size>
|
||||
</OCR_RVCT4>
|
||||
<OCR_RVCT5>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT5>
|
||||
<OCR_RVCT6>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT6>
|
||||
<OCR_RVCT7>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT7>
|
||||
<OCR_RVCT8>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT8>
|
||||
<OCR_RVCT9>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x20000000</StartAddress>
|
||||
<Size>0x10000</Size>
|
||||
</OCR_RVCT9>
|
||||
<OCR_RVCT10>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT10>
|
||||
</OnChipMemories>
|
||||
<RvctStartVector></RvctStartVector>
|
||||
</ArmAdsMisc>
|
||||
<Cads>
|
||||
<interw>1</interw>
|
||||
<Optim>1</Optim>
|
||||
<oTime>0</oTime>
|
||||
<SplitLS>0</SplitLS>
|
||||
<OneElfS>1</OneElfS>
|
||||
<Strict>0</Strict>
|
||||
<EnumInt>0</EnumInt>
|
||||
<PlainCh>0</PlainCh>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<wLevel>2</wLevel>
|
||||
<uThumb>0</uThumb>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<uC99>1</uC99>
|
||||
<uGnu>0</uGnu>
|
||||
<useXO>0</useXO>
|
||||
<v6Lang>1</v6Lang>
|
||||
<v6LangP>1</v6LangP>
|
||||
<vShortEn>1</vShortEn>
|
||||
<vShortWch>1</vShortWch>
|
||||
<v6Lto>0</v6Lto>
|
||||
<v6WtE>0</v6WtE>
|
||||
<v6Rtti>0</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define>USE_HAL_DRIVER,STM32L431xx,WITH_TOS_NET_ADAPTER,USE_ESP8266</Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\kernel\core\include;..\..\TOS-CONFIG;..\..\..\..\platform\arch\arm\cortex-m4\keil;..\..\..\..\kernel\pm\include;..\..\..\..\osal\cmsis_os;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\BSP\Hardware\DHT11;..\..\BSP\Hardware\OLED;..\..\BSP\Hardware\BH1750;..\..\..\..\components\fs\kv\include</IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
<Aads>
|
||||
<interw>1</interw>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<thumb>0</thumb>
|
||||
<SplitLS>0</SplitLS>
|
||||
<SwStkChk>0</SwStkChk>
|
||||
<NoWarn>0</NoWarn>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<useXO>0</useXO>
|
||||
<uClangAs>0</uClangAs>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Aads>
|
||||
<LDads>
|
||||
<umfTarg>1</umfTarg>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<noStLib>0</noStLib>
|
||||
<RepFail>1</RepFail>
|
||||
<useFile>0</useFile>
|
||||
<TextAddressRange>0x08000000</TextAddressRange>
|
||||
<DataAddressRange>0x20000000</DataAddressRange>
|
||||
<pXoBase></pXoBase>
|
||||
<ScatterFile></ScatterFile>
|
||||
<IncludeLibs></IncludeLibs>
|
||||
<IncludeLibsPath></IncludeLibsPath>
|
||||
<Misc></Misc>
|
||||
<LinkerInputFile></LinkerInputFile>
|
||||
<DisabledWarnings></DisabledWarnings>
|
||||
</LDads>
|
||||
</TargetArmAds>
|
||||
</TargetOption>
|
||||
<Groups>
|
||||
<Group>
|
||||
<GroupName>Application/MDK-ARM</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>startup_stm32l431xx.s</FileName>
|
||||
<FileType>2</FileType>
|
||||
<FilePath>startup_stm32l431xx.s</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Application/User</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>gpio.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\gpio.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>main.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\main.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>mcu_init.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\mcu_init.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_msp.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\stm32l4xx_hal_msp.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_it.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\stm32l4xx_it.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>usart.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\usart.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>adc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\adc.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>dac.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\dac.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>i2c.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\i2c.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>spi.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\spi.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>quadspi.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\quadspi.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>examples</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>kv_sample.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\examples\kv\kv_sample.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Drivers/STM32L4xx_HAL_Driver</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_tim.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_tim_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_uart.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_uart_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_i2c.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_i2c_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_rcc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_rcc_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_flash.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_flash_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_flash_ramfunc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ramfunc.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_gpio.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_dma.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_dma_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_pwr.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_pwr_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_cortex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_adc_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_adc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_dac.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_dac_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_spi.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_spi_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32l4xx_hal_qspi.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_qspi.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Drivers/CMSIS</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>system_stm32l4xx.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Src\system_stm32l4xx.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Hardware</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>onchip_flash.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Hardware\ONCHIP_FLASH\onchip_flash.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>hal_qspi_flash.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Hardware\QSPI_FLASH\hal_qspi_flash.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>DHT11_BUS.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Hardware\DHT11\DHT11_BUS.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>oled.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Hardware\OLED\oled.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>qspi_flash_kv.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\BSP\Hardware\QSPI_FLASH\qspi_flash_kv.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>kernel</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>tos_binary_heap.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_binary_heap.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_char_fifo.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_char_fifo.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_completion.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_completion.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_countdownlatch.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_countdownlatch.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_event.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_event.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_global.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_global.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_mail_queue.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_mail_queue.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_message_queue.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_message_queue.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_mmblk.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_mmblk.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_mmheap.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_mmheap.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_mutex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_mutex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_pend.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_pend.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_priority_mail_queue.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_priority_mail_queue.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_priority_message_queue.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_priority_message_queue.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_priority_queue.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_priority_queue.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_ring_queue.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_ring_queue.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_robin.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_robin.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_sched.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_sched.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_sem.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_sem.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_sys.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_sys.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_task.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_task.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_tick.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_tick.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_time.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_time.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_timer.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\kernel\core\tos_timer.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>cpu</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>port_s.S</FileName>
|
||||
<FileType>2</FileType>
|
||||
<FilePath>..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_s.S</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tos_cpu.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\arch\arm\arm-v7m\common\tos_cpu.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>port_c.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_c.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>cmsis</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>cmsis_os.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\osal\cmsis_os\cmsis_os.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>config</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>tos_config.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\..\TOS-CONFIG\tos_config.h</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>kv</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>tos_kv.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\..\..\components\fs\kv\tos_kv.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
</Group>
|
||||
</Groups>
|
||||
</Target>
|
||||
</Targets>
|
||||
|
||||
<RTE>
|
||||
<apis/>
|
||||
<components>
|
||||
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="4.3.0" condition="CMSIS Core">
|
||||
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="4.5.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="TencentOS_tiny"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
</components>
|
||||
<files/>
|
||||
</RTE>
|
||||
|
||||
</Project>
|
3389
board/TencentOS_tiny_EVB_MX_Plus/KEIL/kv/obj/TencentOS_tiny.htm
Normal file
3389
board/TencentOS_tiny_EVB_MX_Plus/KEIL/kv/obj/TencentOS_tiny.htm
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
||||
; *************************************************************
|
||||
; *** Scatter-Loading Description File generated by uVision ***
|
||||
; *************************************************************
|
||||
|
||||
LR_IROM1 0x08000000 0x00040000 { ; load region size_region
|
||||
ER_IROM1 0x08000000 0x00040000 { ; load address = execution address
|
||||
*.o (RESET, +First)
|
||||
*(InRoot$$Sections)
|
||||
.ANY (+RO)
|
||||
.ANY (+XO)
|
||||
}
|
||||
RW_IRAM1 0x20000000 0x00010000 { ; RW data
|
||||
.ANY (+RW +ZI)
|
||||
}
|
||||
}
|
||||
|
404
board/TencentOS_tiny_EVB_MX_Plus/KEIL/kv/startup_stm32l431xx.s
Normal file
404
board/TencentOS_tiny_EVB_MX_Plus/KEIL/kv/startup_stm32l431xx.s
Normal file
@@ -0,0 +1,404 @@
|
||||
;********************** COPYRIGHT(c) 2017 STMicroelectronics ******************
|
||||
;* File Name : startup_stm32l431xx.s
|
||||
;* Author : MCD Application Team
|
||||
;* Description : STM32L431xx Ultra Low Power devices vector table for MDK-ARM toolchain.
|
||||
;* This module performs:
|
||||
;* - Set the initial SP
|
||||
;* - Set the initial PC == Reset_Handler
|
||||
;* - Set the vector table entries with the exceptions ISR address
|
||||
;* - Branches to __main in the C library (which eventually
|
||||
;* calls main()).
|
||||
;* After Reset the Cortex-M4 processor is in Thread mode,
|
||||
;* priority is Privileged, and the Stack is set to Main.
|
||||
;* <<< Use Configuration Wizard in Context Menu >>>
|
||||
;*******************************************************************************
|
||||
;*
|
||||
;* Redistribution and use in source and binary forms, with or without modification,
|
||||
;* are permitted provided that the following conditions are met:
|
||||
;* 1. Redistributions of source code must retain the above copyright notice,
|
||||
;* this list of conditions and the following disclaimer.
|
||||
;* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
;* this list of conditions and the following disclaimer in the documentation
|
||||
;* and/or other materials provided with the distribution.
|
||||
;* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
;* may be used to endorse or promote products derived from this software
|
||||
;* without specific prior written permission.
|
||||
;*
|
||||
;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
;*
|
||||
;*******************************************************************************
|
||||
;
|
||||
; Amount of memory (in bytes) allocated for Stack
|
||||
; Tailor this value to your application needs
|
||||
; <h> Stack Configuration
|
||||
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Stack_Size EQU 0x100
|
||||
|
||||
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||
Stack_Mem SPACE Stack_Size
|
||||
__initial_sp
|
||||
|
||||
|
||||
; <h> Heap Configuration
|
||||
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Heap_Size EQU 0x100
|
||||
|
||||
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||
__heap_base
|
||||
Heap_Mem SPACE Heap_Size
|
||||
__heap_limit
|
||||
|
||||
PRESERVE8
|
||||
THUMB
|
||||
|
||||
|
||||
; Vector Table Mapped to Address 0 at Reset
|
||||
AREA RESET, DATA, READONLY
|
||||
EXPORT __Vectors
|
||||
EXPORT __Vectors_End
|
||||
EXPORT __Vectors_Size
|
||||
|
||||
__Vectors DCD __initial_sp ; Top of Stack
|
||||
DCD Reset_Handler ; Reset Handler
|
||||
DCD NMI_Handler ; NMI Handler
|
||||
DCD HardFault_Handler ; Hard Fault Handler
|
||||
DCD MemManage_Handler ; MPU Fault Handler
|
||||
DCD BusFault_Handler ; Bus Fault Handler
|
||||
DCD UsageFault_Handler ; Usage Fault Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD SVC_Handler ; SVCall Handler
|
||||
DCD DebugMon_Handler ; Debug Monitor Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD PendSV_Handler ; PendSV Handler
|
||||
DCD SysTick_Handler ; SysTick Handler
|
||||
|
||||
; External Interrupts
|
||||
DCD WWDG_IRQHandler ; Window WatchDog
|
||||
DCD PVD_PVM_IRQHandler ; PVD/PVM1/PVM2/PVM3/PVM4 through EXTI Line detection
|
||||
DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line
|
||||
DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line
|
||||
DCD FLASH_IRQHandler ; FLASH
|
||||
DCD RCC_IRQHandler ; RCC
|
||||
DCD EXTI0_IRQHandler ; EXTI Line0
|
||||
DCD EXTI1_IRQHandler ; EXTI Line1
|
||||
DCD EXTI2_IRQHandler ; EXTI Line2
|
||||
DCD EXTI3_IRQHandler ; EXTI Line3
|
||||
DCD EXTI4_IRQHandler ; EXTI Line4
|
||||
DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
|
||||
DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2
|
||||
DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
|
||||
DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4
|
||||
DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5
|
||||
DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
|
||||
DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7
|
||||
DCD ADC1_IRQHandler ; ADC1
|
||||
DCD CAN1_TX_IRQHandler ; CAN1 TX
|
||||
DCD CAN1_RX0_IRQHandler ; CAN1 RX0
|
||||
DCD CAN1_RX1_IRQHandler ; CAN1 RX1
|
||||
DCD CAN1_SCE_IRQHandler ; CAN1 SCE
|
||||
DCD EXTI9_5_IRQHandler ; External Line[9:5]s
|
||||
DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15
|
||||
DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16
|
||||
DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation
|
||||
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
|
||||
DCD TIM2_IRQHandler ; TIM2
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD I2C1_EV_IRQHandler ; I2C1 Event
|
||||
DCD I2C1_ER_IRQHandler ; I2C1 Error
|
||||
DCD I2C2_EV_IRQHandler ; I2C2 Event
|
||||
DCD I2C2_ER_IRQHandler ; I2C2 Error
|
||||
DCD SPI1_IRQHandler ; SPI1
|
||||
DCD SPI2_IRQHandler ; SPI2
|
||||
DCD USART1_IRQHandler ; USART1
|
||||
DCD USART2_IRQHandler ; USART2
|
||||
DCD USART3_IRQHandler ; USART3
|
||||
DCD EXTI15_10_IRQHandler ; External Line[15:10]
|
||||
DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD SDMMC1_IRQHandler ; SDMMC1
|
||||
DCD 0 ; Reserved
|
||||
DCD SPI3_IRQHandler ; SPI3
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors
|
||||
DCD TIM7_IRQHandler ; TIM7
|
||||
DCD DMA2_Channel1_IRQHandler ; DMA2 Channel 1
|
||||
DCD DMA2_Channel2_IRQHandler ; DMA2 Channel 2
|
||||
DCD DMA2_Channel3_IRQHandler ; DMA2 Channel 3
|
||||
DCD DMA2_Channel4_IRQHandler ; DMA2 Channel 4
|
||||
DCD DMA2_Channel5_IRQHandler ; DMA2 Channel 5
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD COMP_IRQHandler ; COMP Interrupt
|
||||
DCD LPTIM1_IRQHandler ; LP TIM1 interrupt
|
||||
DCD LPTIM2_IRQHandler ; LP TIM2 interrupt
|
||||
DCD 0 ; Reserved
|
||||
DCD DMA2_Channel6_IRQHandler ; DMA2 Channel 6
|
||||
DCD DMA2_Channel7_IRQHandler ; DMA2 Channel 7
|
||||
DCD LPUART1_IRQHandler ; LP UART1 interrupt
|
||||
DCD QUADSPI_IRQHandler ; Quad SPI global interrupt
|
||||
DCD I2C3_EV_IRQHandler ; I2C3 event
|
||||
DCD I2C3_ER_IRQHandler ; I2C3 error
|
||||
DCD SAI1_IRQHandler ; Serial Audio Interface 1 global interrupt
|
||||
DCD 0 ; Reserved
|
||||
DCD SWPMI1_IRQHandler ; Serial Wire Interface 1 global interrupt
|
||||
DCD TSC_IRQHandler ; Touch Sense Controller global interrupt
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD RNG_IRQHandler ; RNG global interrupt
|
||||
DCD FPU_IRQHandler ; FPU
|
||||
DCD CRS_IRQHandler ; CRS interrupt
|
||||
|
||||
__Vectors_End
|
||||
|
||||
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||
|
||||
AREA |.text|, CODE, READONLY
|
||||
|
||||
; Reset handler
|
||||
Reset_Handler PROC
|
||||
EXPORT Reset_Handler [WEAK]
|
||||
IMPORT SystemInit
|
||||
IMPORT __main
|
||||
|
||||
LDR R0, =SystemInit
|
||||
BLX R0
|
||||
LDR R0, =__main
|
||||
BX R0
|
||||
ENDP
|
||||
|
||||
; Dummy Exception Handlers (infinite loops which can be modified)
|
||||
|
||||
NMI_Handler PROC
|
||||
EXPORT NMI_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
HardFault_Handler\
|
||||
PROC
|
||||
EXPORT HardFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
MemManage_Handler\
|
||||
PROC
|
||||
EXPORT MemManage_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
BusFault_Handler\
|
||||
PROC
|
||||
EXPORT BusFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
UsageFault_Handler\
|
||||
PROC
|
||||
EXPORT UsageFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SVC_Handler PROC
|
||||
EXPORT SVC_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
DebugMon_Handler\
|
||||
PROC
|
||||
EXPORT DebugMon_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
PendSV_Handler PROC
|
||||
EXPORT PendSV_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SysTick_Handler PROC
|
||||
EXPORT SysTick_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
Default_Handler PROC
|
||||
|
||||
EXPORT WWDG_IRQHandler [WEAK]
|
||||
EXPORT PVD_PVM_IRQHandler [WEAK]
|
||||
EXPORT TAMP_STAMP_IRQHandler [WEAK]
|
||||
EXPORT RTC_WKUP_IRQHandler [WEAK]
|
||||
EXPORT FLASH_IRQHandler [WEAK]
|
||||
EXPORT RCC_IRQHandler [WEAK]
|
||||
EXPORT EXTI0_IRQHandler [WEAK]
|
||||
EXPORT EXTI1_IRQHandler [WEAK]
|
||||
EXPORT EXTI2_IRQHandler [WEAK]
|
||||
EXPORT EXTI3_IRQHandler [WEAK]
|
||||
EXPORT EXTI4_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel1_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel2_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel3_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel4_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel5_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel6_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel7_IRQHandler [WEAK]
|
||||
EXPORT ADC1_IRQHandler [WEAK]
|
||||
EXPORT CAN1_TX_IRQHandler [WEAK]
|
||||
EXPORT CAN1_RX0_IRQHandler [WEAK]
|
||||
EXPORT CAN1_RX1_IRQHandler [WEAK]
|
||||
EXPORT CAN1_SCE_IRQHandler [WEAK]
|
||||
EXPORT EXTI9_5_IRQHandler [WEAK]
|
||||
EXPORT TIM1_BRK_TIM15_IRQHandler [WEAK]
|
||||
EXPORT TIM1_UP_TIM16_IRQHandler [WEAK]
|
||||
EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
|
||||
EXPORT TIM1_CC_IRQHandler [WEAK]
|
||||
EXPORT TIM2_IRQHandler [WEAK]
|
||||
EXPORT I2C1_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C1_ER_IRQHandler [WEAK]
|
||||
EXPORT I2C2_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C2_ER_IRQHandler [WEAK]
|
||||
EXPORT SPI1_IRQHandler [WEAK]
|
||||
EXPORT SPI2_IRQHandler [WEAK]
|
||||
EXPORT USART1_IRQHandler [WEAK]
|
||||
EXPORT USART2_IRQHandler [WEAK]
|
||||
EXPORT USART3_IRQHandler [WEAK]
|
||||
EXPORT EXTI15_10_IRQHandler [WEAK]
|
||||
EXPORT RTC_Alarm_IRQHandler [WEAK]
|
||||
EXPORT SDMMC1_IRQHandler [WEAK]
|
||||
EXPORT SPI3_IRQHandler [WEAK]
|
||||
EXPORT TIM6_DAC_IRQHandler [WEAK]
|
||||
EXPORT TIM7_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel1_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel2_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel3_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel4_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel5_IRQHandler [WEAK]
|
||||
EXPORT COMP_IRQHandler [WEAK]
|
||||
EXPORT LPTIM1_IRQHandler [WEAK]
|
||||
EXPORT LPTIM2_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel6_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel7_IRQHandler [WEAK]
|
||||
EXPORT LPUART1_IRQHandler [WEAK]
|
||||
EXPORT QUADSPI_IRQHandler [WEAK]
|
||||
EXPORT I2C3_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C3_ER_IRQHandler [WEAK]
|
||||
EXPORT SAI1_IRQHandler [WEAK]
|
||||
EXPORT SWPMI1_IRQHandler [WEAK]
|
||||
EXPORT TSC_IRQHandler [WEAK]
|
||||
EXPORT RNG_IRQHandler [WEAK]
|
||||
EXPORT FPU_IRQHandler [WEAK]
|
||||
EXPORT CRS_IRQHandler [WEAK]
|
||||
|
||||
WWDG_IRQHandler
|
||||
PVD_PVM_IRQHandler
|
||||
TAMP_STAMP_IRQHandler
|
||||
RTC_WKUP_IRQHandler
|
||||
FLASH_IRQHandler
|
||||
RCC_IRQHandler
|
||||
EXTI0_IRQHandler
|
||||
EXTI1_IRQHandler
|
||||
EXTI2_IRQHandler
|
||||
EXTI3_IRQHandler
|
||||
EXTI4_IRQHandler
|
||||
DMA1_Channel1_IRQHandler
|
||||
DMA1_Channel2_IRQHandler
|
||||
DMA1_Channel3_IRQHandler
|
||||
DMA1_Channel4_IRQHandler
|
||||
DMA1_Channel5_IRQHandler
|
||||
DMA1_Channel6_IRQHandler
|
||||
DMA1_Channel7_IRQHandler
|
||||
ADC1_IRQHandler
|
||||
CAN1_TX_IRQHandler
|
||||
CAN1_RX0_IRQHandler
|
||||
CAN1_RX1_IRQHandler
|
||||
CAN1_SCE_IRQHandler
|
||||
EXTI9_5_IRQHandler
|
||||
TIM1_BRK_TIM15_IRQHandler
|
||||
TIM1_UP_TIM16_IRQHandler
|
||||
TIM1_TRG_COM_IRQHandler
|
||||
TIM1_CC_IRQHandler
|
||||
TIM2_IRQHandler
|
||||
I2C1_EV_IRQHandler
|
||||
I2C1_ER_IRQHandler
|
||||
I2C2_EV_IRQHandler
|
||||
I2C2_ER_IRQHandler
|
||||
SPI1_IRQHandler
|
||||
SPI2_IRQHandler
|
||||
USART1_IRQHandler
|
||||
USART2_IRQHandler
|
||||
USART3_IRQHandler
|
||||
EXTI15_10_IRQHandler
|
||||
RTC_Alarm_IRQHandler
|
||||
SDMMC1_IRQHandler
|
||||
SPI3_IRQHandler
|
||||
TIM6_DAC_IRQHandler
|
||||
TIM7_IRQHandler
|
||||
DMA2_Channel1_IRQHandler
|
||||
DMA2_Channel2_IRQHandler
|
||||
DMA2_Channel3_IRQHandler
|
||||
DMA2_Channel4_IRQHandler
|
||||
DMA2_Channel5_IRQHandler
|
||||
COMP_IRQHandler
|
||||
LPTIM1_IRQHandler
|
||||
LPTIM2_IRQHandler
|
||||
DMA2_Channel6_IRQHandler
|
||||
DMA2_Channel7_IRQHandler
|
||||
LPUART1_IRQHandler
|
||||
QUADSPI_IRQHandler
|
||||
I2C3_EV_IRQHandler
|
||||
I2C3_ER_IRQHandler
|
||||
SAI1_IRQHandler
|
||||
SWPMI1_IRQHandler
|
||||
TSC_IRQHandler
|
||||
RNG_IRQHandler
|
||||
FPU_IRQHandler
|
||||
CRS_IRQHandler
|
||||
|
||||
B .
|
||||
|
||||
ENDP
|
||||
|
||||
ALIGN
|
||||
|
||||
;*******************************************************************************
|
||||
; User Stack and Heap initialization
|
||||
;*******************************************************************************
|
||||
IF :DEF:__MICROLIB
|
||||
|
||||
EXPORT __initial_sp
|
||||
EXPORT __heap_base
|
||||
EXPORT __heap_limit
|
||||
|
||||
ELSE
|
||||
|
||||
IMPORT __use_two_region_memory
|
||||
EXPORT __user_initial_stackheap
|
||||
|
||||
__user_initial_stackheap
|
||||
|
||||
LDR R0, = Heap_Mem
|
||||
LDR R1, =(Stack_Mem + Stack_Size)
|
||||
LDR R2, = (Heap_Mem + Heap_Size)
|
||||
LDR R3, = Stack_Mem
|
||||
BX LR
|
||||
|
||||
ALIGN
|
||||
|
||||
ENDIF
|
||||
|
||||
END
|
||||
|
||||
;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
|
333
components/fs/kv/include/tos_kv.h
Normal file
333
components/fs/kv/include/tos_kv.h
Normal file
@@ -0,0 +1,333 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
* Tencent is pleased to support the open source community by making TencentOS
|
||||
* available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||
*
|
||||
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||
* License, except for the third-party components listed below which are
|
||||
* subject to different license terms. Your integration of TencentOS into your
|
||||
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||
* as the other licenses applicable to the third-party components included
|
||||
* within TencentOS.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _TOS_KV_H_
|
||||
#define _TOS_KV_H_
|
||||
|
||||
#include "tos.h"
|
||||
#include "tos_kv_err.h"
|
||||
#include "tos_kv_flash.h"
|
||||
|
||||
/* the max length of write unit, DOUBLEWORD, 64-bit
|
||||
a better way is to change kv_wunit_t according the the flash program type by precompile,
|
||||
if to do this, should let user config the flash program type as a macro, and that is not so friendly.
|
||||
we typedef kv_wunit_t as uint64_t, so the user can focus on the code rather than how to use kv.
|
||||
(althrough there may cause some waste of flash space, just a little, but much more comfortable for coding)
|
||||
*/
|
||||
typedef uint64_t kv_wunit_t;
|
||||
|
||||
typedef uint8_t kv_byte_t; // byte
|
||||
typedef uint16_t kv_hword_t; // half word
|
||||
typedef uint32_t kv_word_t; // word
|
||||
typedef uint64_t kv_dword_t; // double word
|
||||
|
||||
/*
|
||||
add delete no more space
|
||||
fresh -----> inuse --------> dirty | inuse ---------------> dirty
|
||||
|
||||
add no more space
|
||||
fresh -----> inuse ---------------> NONE
|
||||
|
||||
if bad, probably the flash block is broken, no more try to use.
|
||||
if hanging, maybe another chance to rebuild index.
|
||||
there is a situation: dirty | hanging
|
||||
*/
|
||||
#define KV_BLK_FLAG_FRESH 0x01 /* a totally virgin block */
|
||||
#define KV_BLK_FLAG_INUSE 0x02 /* in-use */
|
||||
#define KV_BLK_FLAG_DIRTY 0x04 /* has discarded item inside */
|
||||
#define KV_BLK_FLAG_BAD 0x08 /* bad block, maybe device error */
|
||||
#define KV_BLK_FLAG_HANGING 0x10 /* index building failed, we mark a hanging flag here, and will give another chance to do a retry */
|
||||
|
||||
#define KV_FLASH_START (kv_ctl.flash_ctl.flash_start)
|
||||
#define KV_FLASH_SIZE (kv_ctl.flash_ctl.flash_size)
|
||||
#define KV_FLASH_END (KV_FLASH_START + KV_FLASH_SIZE)
|
||||
#define KV_FLASH_SECTOR_SIZE_LOG2 (kv_ctl.flash_ctl.sector_size_log2)
|
||||
#define KV_FLASH_SECTOR_SIZE (1 << KV_FLASH_SECTOR_SIZE_LOG2)
|
||||
#define KV_FLASH_WRITE_ALIGN (kv_ctl.flash_ctl.flash_write_align)
|
||||
|
||||
#define KV_FLASH_WRITE ((kv_flash_write_t)(kv_ctl.flash_ctl.flash_drv.write))
|
||||
#define KV_FLASH_READ ((kv_flash_read_t)(kv_ctl.flash_ctl.flash_drv.read))
|
||||
#define KV_FLASH_ERASE ((kv_flash_erase_t)(kv_ctl.flash_ctl.flash_drv.erase))
|
||||
|
||||
#define KV_IS_ALINGED(v, align) ((v) % (align) == 0)
|
||||
#define KV_IS_ALINGED_LOG2(v, align_log2) KV_IS_ALINGED(v, (1 << (align_log2)))
|
||||
#define KV_ALIGN_UP(v, align) (((v) + ((align) - 1)) & ~((align) - 1))
|
||||
#define KV_ALIGN_DOWN(v, align) ((v) - ((v) & ((align) - 1)))
|
||||
#define KV_ADDR_OF_FIELD(addr, type, field) (addr + TOS_OFFSET_OF_FIELD(type, field))
|
||||
|
||||
#define KV_ALIGNED_SIZE(len) KV_ALIGN_UP(len, KV_FLASH_WRITE_ALIGN)
|
||||
|
||||
#define KV_MGR_LOCK (&kv_ctl.mgr_ctl.kv_lock)
|
||||
#define KV_MGR_BLK_NUM_FRESH (kv_ctl.mgr_ctl.blk_info.num_fresh)
|
||||
#define KV_MGR_BLK_NUM_INUSE (kv_ctl.mgr_ctl.blk_info.num_inuse)
|
||||
#define KV_MGR_BLK_NUM_HANGING (kv_ctl.mgr_ctl.blk_info.num_hanging)
|
||||
#define KV_MGR_BLK_NUM_TOTAL (kv_ctl.mgr_ctl.blk_info.num_total)
|
||||
#define KV_MGR_BLK_DETAIL (kv_ctl.mgr_ctl.blk_info.blk_detail)
|
||||
#define KV_MGR_WORKSPACE (kv_ctl.mgr_ctl.workspace)
|
||||
|
||||
#define KV_NO_WRITEABLE_BLK() (KV_MGR_BLK_NUM_INUSE == 0 && KV_MGR_BLK_NUM_FRESH == 0)
|
||||
|
||||
#define KV_ITEM_HDR_MAGIC 0xABCD1234DCBA4321
|
||||
#define KV_ITEM_DISCARDED 0x0F0F0F0F0F0F0F0F
|
||||
#define KV_ITEM_IS_DISCARDED(item_hdr) ((item_hdr)->discarded_flag == KV_ITEM_DISCARDED)
|
||||
#define KV_ITEM_IS_LEGAL(item_hdr) ((item_hdr)->magic == KV_ITEM_HDR_MAGIC)
|
||||
#define KV_ITEM_IS_FRESH(item_hdr) ((item_hdr)->magic == (kv_wunit_t)-1 && \
|
||||
(item_hdr)->discarded_flag == (kv_wunit_t)-1 && \
|
||||
(item_hdr)->checksum == (uint8_t)-1 && \
|
||||
(item_hdr)->k_len == (uint8_t)-1 && \
|
||||
(item_hdr)->v_len == (uint16_t)-1 && \
|
||||
(item_hdr)->prev_pos == (uint32_t)-1)
|
||||
|
||||
#define KV_ITEM_ADDR2BLK(item_start) (KV_ALIGN_DOWN((item_start) - KV_FLASH_START, KV_BLK_SIZE) + KV_FLASH_START)
|
||||
#define KV_ITEM_HDR_SIZE KV_ALIGNED_SIZE(sizeof(kv_item_hdr_t))
|
||||
#define KV_ITEM_BODY_SIZE(k_len, v_len) KV_ALIGNED_SIZE(k_len + v_len)
|
||||
#define KV_ITEM_SIZE(k_len, v_len) (KV_ITEM_HDR_SIZE + KV_ITEM_BODY_SIZE(k_len, v_len))
|
||||
#define KV_ITEM_SIZE_OF_ITEM(item) KV_ITEM_SIZE(item->hdr.k_len, item->hdr.v_len)
|
||||
#define KV_ITEM_SIZE_OF_BODY(item) KV_ITEM_BODY_SIZE(item->hdr.k_len, item->hdr.v_len)
|
||||
#define KV_ITEM_ADDR_OF_BODY(item) (item->pos + KV_ITEM_HDR_SIZE)
|
||||
|
||||
#define KV_BLK_HDR_MAGIC 0x1234ABCD4321DCBA
|
||||
#define KV_BLK_IS_LEGAL(blk_hdr) ((blk_hdr)->magic == KV_BLK_HDR_MAGIC)
|
||||
#define KV_BLK_INVALID ((uint32_t)-1)
|
||||
#define KV_BLK_HDR_SIZE KV_ALIGNED_SIZE(sizeof(kv_blk_hdr_t))
|
||||
#define KV_BLK_SIZE (KV_FLASH_SECTOR_SIZE)
|
||||
#define KV_BLK_FRESH_SIZE (KV_BLK_SIZE - KV_BLK_HDR_SIZE)
|
||||
#define KV_BLK_END(blk_start) (blk_start + KV_BLK_SIZE)
|
||||
#define KV_BLK_USABLE_ADDR(blk_start) (KV_BLK_END(blk_start) - kv_blk_freesz_get(blk_start))
|
||||
#define KV_BLK_ADDR2IDX(blk_start) ((blk_start - KV_FLASH_START) / KV_BLK_SIZE)
|
||||
#define KV_BLK_FIRST_ITEM(blk_start) (blk_start + KV_BLK_HDR_SIZE)
|
||||
#define KV_BLK_NEXT(blk_start) (blk_start + KV_BLK_SIZE >= KV_FLASH_END ? KV_FLASH_START : blk_start + KV_BLK_SIZE)
|
||||
|
||||
#define KV_BLK_FOREACH_FROM(cur_blk, start_blk) \
|
||||
for (cur_blk = KV_BLK_NEXT(start_blk); \
|
||||
cur_blk != start_blk; \
|
||||
cur_blk = KV_BLK_NEXT(cur_blk))
|
||||
|
||||
#define KV_BLK_FOREACH(cur_blk) \
|
||||
for (cur_blk = KV_FLASH_START; \
|
||||
cur_blk < KV_FLASH_END; \
|
||||
cur_blk += KV_BLK_SIZE)
|
||||
|
||||
typedef struct kv_flash_control_st {
|
||||
uint8_t sector_size_log2;
|
||||
uint8_t flash_write_align;
|
||||
uint32_t flash_start;
|
||||
uint32_t flash_size;
|
||||
|
||||
kv_flash_drv_t flash_drv;
|
||||
} kv_flash_ctl_t;
|
||||
|
||||
typedef struct kv_blk_detail_st {
|
||||
uint8_t blk_flags; /*< flags indicating the status of the blk, see KV_BLK_FLAG_* */
|
||||
uint32_t free_size; /*< how many usable flash left */
|
||||
} kv_blk_detail_t;
|
||||
|
||||
typedef struct kv_blk_info_st {
|
||||
uint16_t num_inuse;
|
||||
uint16_t num_fresh;
|
||||
uint16_t num_hanging;
|
||||
uint16_t num_total;
|
||||
|
||||
kv_blk_detail_t *blk_detail;
|
||||
} kv_blk_info_t;
|
||||
|
||||
typedef struct kv_manager_control_st {
|
||||
uint32_t workspace;
|
||||
kv_blk_info_t blk_info;
|
||||
|
||||
k_mutex_t kv_lock;
|
||||
} kv_mgr_ctl_t;
|
||||
|
||||
typedef struct kv_control_st {
|
||||
kv_flash_ctl_t flash_ctl;
|
||||
kv_mgr_ctl_t mgr_ctl;
|
||||
} kv_ctl_t;
|
||||
|
||||
typedef struct kv_block_header_st {
|
||||
kv_wunit_t magic; /*< is this block formatted? */
|
||||
} __PACKED__ kv_blk_hdr_t;
|
||||
|
||||
typedef struct kv_item_header_st {
|
||||
kv_wunit_t discarded_flag; /*< is this item a discarded one, deleted or updated */
|
||||
kv_wunit_t magic; /*< for item header integrity verification */
|
||||
uint8_t checksum; /*< checksum for key/value buffer */
|
||||
uint8_t k_len; /*< key length */
|
||||
uint16_t v_len; /*< value length */
|
||||
uint32_t prev_pos; /*< previous position of this item
|
||||
if meet a power down while updating an item, and we have saved the new item,
|
||||
but do not get a chance to delete the old one(we have two copy of the item with
|
||||
the same key on flash), we should do the real delete when system is power on next time */
|
||||
} __PACKED__ kv_item_hdr_t;
|
||||
|
||||
typedef struct kv_item_st {
|
||||
kv_item_hdr_t hdr; /*< item header */
|
||||
uint32_t pos; /*< where this item is */
|
||||
uint8_t *body; /*< item body: key/value buffer */
|
||||
} kv_item_t;
|
||||
|
||||
__STATIC__ kv_ctl_t kv_ctl;
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_freesz_set(uint32_t blk_start, uint32_t free_size)
|
||||
{
|
||||
KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].free_size = free_size;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ uint32_t kv_blk_freesz_get(uint32_t blk_start)
|
||||
{
|
||||
return KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].free_size;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_freesz_reduce(uint32_t blk_start, uint32_t size_reduced)
|
||||
{
|
||||
kv_blk_freesz_set(blk_start, kv_blk_freesz_get(blk_start) - size_reduced);
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ int kv_blk_is_full(uint32_t blk_start)
|
||||
{
|
||||
return kv_blk_freesz_get(blk_start) <= KV_ITEM_HDR_SIZE;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_flags_set(uint32_t blk_start, uint8_t blk_flags)
|
||||
{
|
||||
KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].blk_flags = blk_flags;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ uint8_t kv_blk_flags_get(uint32_t blk_start)
|
||||
{
|
||||
return KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].blk_flags;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_flags_add(uint32_t blk_start, uint8_t blk_flags)
|
||||
{
|
||||
KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].blk_flags |= blk_flags;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_flags_rmv(uint32_t blk_start, uint8_t blk_flags)
|
||||
{
|
||||
KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].blk_flags &= ~blk_flags;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ int kv_blk_is_fresh(uint32_t blk_start)
|
||||
{
|
||||
return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_FRESH;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ int kv_blk_is_inuse(uint32_t blk_start)
|
||||
{
|
||||
return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_INUSE;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ int kv_blk_is_dirty(uint32_t blk_start)
|
||||
{
|
||||
return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_DIRTY;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ int kv_blk_is_bad(uint32_t blk_start)
|
||||
{
|
||||
return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_BAD;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ int kv_blk_is_hanging(uint32_t blk_start)
|
||||
{
|
||||
return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_HANGING;
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_set_fresh(uint32_t blk_start)
|
||||
{
|
||||
if (!kv_blk_is_fresh(blk_start)) {
|
||||
++KV_MGR_BLK_NUM_FRESH;
|
||||
}
|
||||
|
||||
kv_blk_freesz_set(blk_start, KV_BLK_FRESH_SIZE);
|
||||
kv_blk_flags_set(blk_start, KV_BLK_FLAG_FRESH);
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_set_inuse(uint32_t blk_start)
|
||||
{
|
||||
if (!kv_blk_is_inuse(blk_start)) {
|
||||
++KV_MGR_BLK_NUM_INUSE;
|
||||
}
|
||||
|
||||
kv_blk_flags_add(blk_start, KV_BLK_FLAG_INUSE);
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_set_dirty(uint32_t blk_start)
|
||||
{
|
||||
kv_blk_flags_add(blk_start, KV_BLK_FLAG_DIRTY);
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_set_bad(uint32_t blk_start)
|
||||
{
|
||||
kv_blk_flags_set(blk_start, KV_BLK_FLAG_BAD);
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_set_hanging(uint32_t blk_start)
|
||||
{
|
||||
if (!kv_blk_is_hanging(blk_start)) {
|
||||
++KV_MGR_BLK_NUM_HANGING;
|
||||
}
|
||||
|
||||
kv_blk_flags_add(blk_start, KV_BLK_FLAG_HANGING);
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_reset_fresh(uint32_t blk_start)
|
||||
{
|
||||
if (kv_blk_is_fresh(blk_start)) {
|
||||
--KV_MGR_BLK_NUM_FRESH;
|
||||
}
|
||||
|
||||
kv_blk_flags_rmv(blk_start, KV_BLK_FLAG_FRESH);
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_reset_inuse(uint32_t blk_start)
|
||||
{
|
||||
if (kv_blk_is_inuse(blk_start)) {
|
||||
--KV_MGR_BLK_NUM_INUSE;
|
||||
}
|
||||
|
||||
kv_blk_flags_rmv(blk_start, KV_BLK_FLAG_INUSE);
|
||||
}
|
||||
|
||||
__STATIC_INLINE__ void kv_blk_reset_hanging(uint32_t blk_start)
|
||||
{
|
||||
if (kv_blk_is_hanging(blk_start)) {
|
||||
--KV_MGR_BLK_NUM_HANGING;
|
||||
}
|
||||
|
||||
kv_blk_flags_rmv(blk_start, KV_BLK_FLAG_HANGING);
|
||||
}
|
||||
|
||||
typedef kv_err_t (*kv_item_walker_t)(kv_item_t *item, const void *patten);
|
||||
|
||||
__API__ kv_err_t tos_kv_init(kv_flash_drv_t *flash_drv, kv_flash_prop_t *flash_prop);
|
||||
|
||||
__API__ kv_err_t tos_kv_deinit(void);
|
||||
|
||||
__API__ kv_err_t tos_kv_set(const char *key, const void *value, size_t v_len);
|
||||
|
||||
__API__ kv_err_t tos_kv_get(const char *key, void *value_buf, size_t value_buf_size, size_t *v_len);
|
||||
|
||||
__API__ int tos_kv_has_key(const char *key);
|
||||
|
||||
__API__ kv_err_t tos_kv_del(const char *key);
|
||||
|
||||
__DEBUG__ kv_err_t tos_kv_walkthru(void);
|
||||
|
||||
__STATIC__ kv_err_t kv_gc(void);
|
||||
|
||||
#endif /* _TOS_KV_H_ */
|
||||
|
52
components/fs/kv/include/tos_kv_err.h
Normal file
52
components/fs/kv/include/tos_kv_err.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
* Tencent is pleased to support the open source community by making TencentOS
|
||||
* available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||
*
|
||||
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||
* License, except for the third-party components listed below which are
|
||||
* subject to different license terms. Your integration of TencentOS into your
|
||||
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||
* as the other licenses applicable to the third-party components included
|
||||
* within TencentOS.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _TOS_KV_ERR_H_
|
||||
#define _TOS_KV_ERR_H_
|
||||
|
||||
typedef enum kv_err_en {
|
||||
KV_ERR_NONE = 0u,
|
||||
|
||||
KV_ERR_BUF_TOO_SHORT = 10u,
|
||||
KV_ERR_BLK_STATUS_ERROR,
|
||||
|
||||
KV_ERR_DATA_FETCH_FAILED = 20u,
|
||||
|
||||
KV_ERR_FLASH_ERASE_FAILED = 30u,
|
||||
KV_ERR_FLASH_READ_FAILED,
|
||||
KV_ERR_FLASH_WRITE_FAILED,
|
||||
|
||||
KV_ERR_GC_NOTHING = 40u,
|
||||
|
||||
KV_ERR_INTERNAL_ERROR = 50u,
|
||||
KV_ERR_INSUFFICIENT_SPACE,
|
||||
KV_ERR_INVALID_PARAM,
|
||||
KV_ERR_INVALID_ITEM,
|
||||
|
||||
KV_ERR_NEXT_LOOP = 60u,
|
||||
KV_ERR_NOT_EXIST,
|
||||
KV_ERR_NO_WRITEABLE_BLK,
|
||||
|
||||
KV_ERR_OUT_OF_MEMORY = 70u,
|
||||
|
||||
KV_ERR_POS_FIX_FAILED =80u,
|
||||
|
||||
KV_ERR_SIZE_EXCEEDED = 90u,
|
||||
} kv_err_t;
|
||||
|
||||
#endif /* _TOS_KV_ERR_H_ */
|
||||
|
46
components/fs/kv/include/tos_kv_flash.h
Normal file
46
components/fs/kv/include/tos_kv_flash.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
* Tencent is pleased to support the open source community by making TencentOS
|
||||
* available.
|
||||
*
|
||||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||
*
|
||||
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||
* License, except for the third-party components listed below which are
|
||||
* subject to different license terms. Your integration of TencentOS into your
|
||||
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||
* as the other licenses applicable to the third-party components included
|
||||
* within TencentOS.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _TOS_KV_FLASH_H_
|
||||
#define _TOS_KV_FLASH_H_
|
||||
|
||||
typedef enum kv_flash_program_type_en {
|
||||
KV_FLASH_PROGRAM_TYPE_BYTE, /*!< Program byte (8-bit) at a specified address */
|
||||
KV_FLASH_PROGRAM_TYPE_HALFWORD, /*!< Program a half-word (16-bit) at a specified address */
|
||||
KV_FLASH_PROGRAM_TYPE_WORD, /*!< Program a word (32-bit) at a specified address */
|
||||
KV_FLASH_PROGRAM_TYPE_DOUBLEWORD, /*!< Program a double word (64-bit) at a specified address */
|
||||
} kv_flash_pgm_type_t;
|
||||
|
||||
typedef int (*kv_flash_write_t)(uint32_t addr, const void *buf, size_t len);
|
||||
typedef int (*kv_flash_read_t)(uint32_t addr, void *buf, size_t len);
|
||||
typedef int (*kv_flash_erase_t)(uint32_t addr, size_t len);
|
||||
|
||||
typedef struct kv_flash_drv_st {
|
||||
kv_flash_write_t write;
|
||||
kv_flash_read_t read;
|
||||
kv_flash_erase_t erase;
|
||||
} kv_flash_drv_t;
|
||||
|
||||
typedef struct kv_flash_property_st {
|
||||
uint8_t sector_size_log2;
|
||||
kv_flash_pgm_type_t pgm_type;
|
||||
uint32_t flash_start;
|
||||
uint32_t flash_size;
|
||||
} kv_flash_prop_t;
|
||||
|
||||
#endif /* _TOS_KV_FLASH_H_ */
|
||||
|
1348
components/fs/kv/tos_kv.c
Normal file
1348
components/fs/kv/tos_kv.c
Normal file
File diff suppressed because it is too large
Load Diff
105
examples/kv/kv_sample.c
Normal file
105
examples/kv/kv_sample.c
Normal file
@@ -0,0 +1,105 @@
|
||||
#include "tos_kv.h"
|
||||
|
||||
#include "cmsis_os.h"
|
||||
|
||||
#define TASK_STK_SIZE 2048
|
||||
void task(void *arg);
|
||||
osThreadDef(task, osPriorityNormal, 1, TASK_STK_SIZE);
|
||||
|
||||
// #define USING_ONCHIP_FLASH
|
||||
|
||||
#ifdef USING_ONCHIP_FLASH
|
||||
extern kv_flash_drv_t stm32l4_norflash_onchip_drv;
|
||||
extern kv_flash_prop_t stm32l4_norflash_onchip_prop;
|
||||
#else
|
||||
extern kv_flash_drv_t stm32l4_qspiflash_drv;
|
||||
extern kv_flash_prop_t stm32l4_qspiflash_prop;
|
||||
#endif
|
||||
|
||||
void disp_value(uint8_t *value, uint32_t value_len)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
printf("value_len: %d\n", value_len);
|
||||
|
||||
printf("\"");
|
||||
for (i = 0; i < value_len; ++i) {
|
||||
printf("%c", value[i]);
|
||||
}
|
||||
printf("\"\n\n");
|
||||
}
|
||||
|
||||
void task(void *arg)
|
||||
{
|
||||
int has_key;
|
||||
kv_err_t err;
|
||||
uint8_t value_buf[40];
|
||||
uint32_t value_len;
|
||||
|
||||
#ifndef USING_ONCHIP_FLASH // use qspiflash
|
||||
extern void MX_QUADSPI_Init(void);
|
||||
MX_QUADSPI_Init();
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
stm32l4_norflash_onchip_erase(0x803d000, 2048);
|
||||
stm32l4_norflash_onchip_erase(0x803d000 + 2048, 2048);
|
||||
return;
|
||||
#endif
|
||||
|
||||
#ifdef USING_ONCHIP_FLASH
|
||||
err = tos_kv_init(&stm32l4_norflash_onchip_drv, &stm32l4_norflash_onchip_prop);
|
||||
printf("kv init, rc: %d\n", err);
|
||||
#else
|
||||
err = tos_kv_init(&stm32l4_qspiflash_drv, &stm32l4_qspiflash_prop);
|
||||
printf("kv init, rc: %d\n", err);
|
||||
#endif
|
||||
|
||||
has_key = tos_kv_has_key("key00");
|
||||
printf("has key[%s] ? %s\n\n", "key00", has_key ? "True" : "False");
|
||||
|
||||
err = tos_kv_set("key00", "value_00", strlen("value_00"));
|
||||
printf("kv set(%s), rc: %d\n\n", "key00", err);
|
||||
|
||||
has_key = tos_kv_has_key("key00");
|
||||
printf("has key[%s] ? %s\n\n", "key00", has_key ? "True" : "False");
|
||||
|
||||
if (err == KV_ERR_NONE) {
|
||||
err = tos_kv_get("key00", value_buf, sizeof(value_buf), &value_len);
|
||||
printf("kv get(%s), rc: %d\n\n", "key00", err);
|
||||
|
||||
if (err == KV_ERR_NONE) {
|
||||
disp_value(value_buf, value_len);
|
||||
}
|
||||
|
||||
tos_kv_walkthru();
|
||||
}
|
||||
|
||||
err = tos_kv_set("key00", "value_xx", strlen("value_xx"));
|
||||
printf("kv set(%s), rc: %d\n\n", "key00", err);
|
||||
|
||||
if (err == KV_ERR_NONE) {
|
||||
err = tos_kv_get("key00", value_buf, sizeof(value_buf), &value_len);
|
||||
printf("kv get(%s), rc: %d\n\n", "key00", err);
|
||||
|
||||
if (err == KV_ERR_NONE) {
|
||||
disp_value(value_buf, value_len);
|
||||
}
|
||||
|
||||
tos_kv_walkthru();
|
||||
}
|
||||
|
||||
err = tos_kv_del("key00");
|
||||
printf("kv del(%s), rc: %d\n\n", "key00", err);
|
||||
|
||||
has_key = tos_kv_has_key("key00");
|
||||
printf("has key[%s] ? %s\n\n", "key00", has_key ? "True" : "False");
|
||||
|
||||
tos_kv_walkthru();
|
||||
}
|
||||
|
||||
void application_entry(void *arg)
|
||||
{
|
||||
osThreadCreate(osThread(task), NULL); // Create task1
|
||||
}
|
||||
|
@@ -61,7 +61,7 @@
|
||||
|
||||
typedef void (*k_task_entry_t)(void *arg);
|
||||
|
||||
typedef void (*k_task_walker)(k_task_t *task);
|
||||
typedef void (*k_task_walker_t)(k_task_t *task);
|
||||
|
||||
/**
|
||||
* task control block
|
||||
@@ -339,7 +339,7 @@ __API__ k_err_t tos_task_stack_draught_depth(k_task_t *task, int *depth);
|
||||
*
|
||||
* @return None
|
||||
*/
|
||||
__API__ void tos_task_walkthru(k_task_walker walker);
|
||||
__API__ void tos_task_walkthru(k_task_walker_t walker);
|
||||
|
||||
/**
|
||||
* @brief A debug API for display all tasks information.
|
||||
|
@@ -191,7 +191,7 @@ __STATIC_INLINE__ void *blk_to_ptr(const mmheap_blk_t *blk)
|
||||
}
|
||||
|
||||
/* Return location of next block after block of given size. */
|
||||
__STATIC_INLINE__ mmheap_blk_t *offset_to_block(const void *ptr, int diff)
|
||||
__STATIC_INLINE__ mmheap_blk_t *offset_to_blk(const void *ptr, int diff)
|
||||
{
|
||||
return (mmheap_blk_t *)((cpu_addr_t)ptr + diff);
|
||||
}
|
||||
@@ -207,7 +207,7 @@ __STATIC__ mmheap_blk_t *blk_next(const mmheap_blk_t *blk)
|
||||
{
|
||||
mmheap_blk_t *next_blk;
|
||||
|
||||
next_blk = offset_to_block(blk_to_ptr(blk), blk_size(blk) - K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
next_blk = offset_to_blk(blk_to_ptr(blk), blk_size(blk) - K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
return next_blk;
|
||||
}
|
||||
|
||||
@@ -331,7 +331,7 @@ __STATIC__ mmheap_blk_t *blk_split(mmheap_blk_t *blk, size_t size)
|
||||
size_t remain_size;
|
||||
|
||||
/* Calculate the amount of space left in the remaining block. */
|
||||
remaining = offset_to_block(blk_to_ptr(blk), size - K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
remaining = offset_to_blk(blk_to_ptr(blk), size - K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
remain_size = blk_size(blk) - (size + K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
|
||||
blk_set_size(remaining, remain_size);
|
||||
@@ -735,7 +735,7 @@ __API__ k_err_t tos_mmheap_pool_add(void *pool_start, size_t pool_size)
|
||||
** so that the prev_phys_block field falls outside of the pool -
|
||||
** it will never be used.
|
||||
*/
|
||||
curr_blk = offset_to_block(pool_start, -K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
curr_blk = offset_to_blk(pool_start, -K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
blk_set_size(curr_blk, size_aligned);
|
||||
blk_set_free(curr_blk);
|
||||
blk_set_prev_used(curr_blk);
|
||||
@@ -763,7 +763,7 @@ __API__ k_err_t tos_mmheap_pool_rmv(void *pool_start)
|
||||
return K_ERR_MMHEAP_POOL_NOT_EXIST;
|
||||
}
|
||||
|
||||
blk = offset_to_block(pool_start, -K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
blk = offset_to_blk(pool_start, -K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
mapping_insert(blk_size(blk), &fl, &sl);
|
||||
remove_free_block(blk, fl, sl);
|
||||
|
||||
@@ -780,7 +780,7 @@ __API__ k_err_t tos_mmheap_pool_check(void *pool_start, k_mmheap_info_t *info)
|
||||
|
||||
memset(info, 0, sizeof(k_mmheap_info_t));
|
||||
|
||||
blk = offset_to_block(pool_start, -K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
blk = offset_to_blk(pool_start, -K_MMHEAP_BLK_HEADER_OVERHEAD);
|
||||
|
||||
while (blk && !blk_is_last(blk)) {
|
||||
if (blk_is_free(blk)) {
|
||||
|
@@ -547,7 +547,7 @@ __API__ k_task_t *tos_task_curr_task_get(void)
|
||||
return curr_task;
|
||||
}
|
||||
|
||||
__API__ void tos_task_walkthru(k_task_walker walker)
|
||||
__API__ void tos_task_walkthru(k_task_walker_t walker)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
k_task_t *task;
|
||||
|
Reference in New Issue
Block a user