128 lines
2.4 KiB
C
128 lines
2.4 KiB
C
/***
|
|
* @Author:
|
|
* @Date: 2023-04-04 08:13:11
|
|
* @LastEditors: xxx
|
|
* @LastEditTime: 2023-04-04 08:16:58
|
|
* @Description:
|
|
* @email:
|
|
* @Copyright (c) 2023 by xxx, All Rights Reserved.
|
|
*/
|
|
|
|
#ifndef __OSEL_ARCH_H__
|
|
#define __OSEL_ARCH_H__
|
|
|
|
#include "lib.h"
|
|
|
|
#define hal_int_state_t char
|
|
#ifdef STM32
|
|
#include "stm32l0xx.h"
|
|
|
|
#define HAL_ENTER_CRITICAL(s) \
|
|
s = s; \
|
|
__ASM volatile("cpsid i");
|
|
#define HAL_EXIT_CRITICAL(s) \
|
|
__ASM volatile("cpsie i");
|
|
#else
|
|
#define HAL_ENTER_CRITICAL(s)
|
|
|
|
#define HAL_EXIT_CRITICAL(s)
|
|
|
|
#endif
|
|
|
|
#define osel_memset _memset
|
|
#define osel_memcmp _memcmp
|
|
#define osel_memcpy memcpyL
|
|
#define osel_memcpyr memcpyR
|
|
#define osel_reverse _reverse
|
|
#define osel_mem_alloc _malloc
|
|
#define osel_mem_free _free
|
|
#define osel_quick_sort _quick_sort
|
|
static inline void *_malloc(uint32_t size)
|
|
{
|
|
return mymalloc(SRAMIN, size);
|
|
}
|
|
|
|
static inline void _free(void *ptr)
|
|
{
|
|
myfree(SRAMIN, ptr);
|
|
}
|
|
|
|
static inline void _memset(uint8_t *dst, uint8_t value, uint16_t size)
|
|
{
|
|
while (size--)
|
|
{
|
|
*dst++ = value;
|
|
}
|
|
}
|
|
|
|
static inline int8_t _memcmp(const uint8_t *dst, const uint8_t *src, uint16_t size)
|
|
{
|
|
while (size--)
|
|
{
|
|
if (*dst++ != *src++)
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static inline void memcpyL(uint8_t *dst, const uint8_t *src, uint16_t size)
|
|
{
|
|
while (size--)
|
|
{
|
|
*dst++ = *src++;
|
|
}
|
|
}
|
|
|
|
static inline void memcpyR(uint8_t *dst, const uint8_t *src, uint16_t size)
|
|
{
|
|
dst = dst + (size - 1);
|
|
while (size--)
|
|
{
|
|
*dst-- = *src++;
|
|
}
|
|
}
|
|
|
|
// 字节数组反序
|
|
static inline void _reverse(uint8_t *buf, uint16_t len)
|
|
{
|
|
uint8_t temp = 0;
|
|
uint16_t i;
|
|
for (i = 0; i < len / 2; i++)
|
|
{
|
|
temp = buf[i];
|
|
buf[i] = buf[len - i - 1];
|
|
buf[len - i - 1] = temp;
|
|
}
|
|
}
|
|
|
|
// 快速排序
|
|
static inline void _quick_sort(uint16_t *array, int left, int right)
|
|
{
|
|
if (left >= right)
|
|
{
|
|
return;
|
|
}
|
|
int i = left;
|
|
int j = right;
|
|
uint16_t key = array[left];
|
|
while (i < j)
|
|
{
|
|
while (i < j && array[j] > key)
|
|
{
|
|
j--;
|
|
}
|
|
array[i] = array[j];
|
|
while (i < j && array[i] <= key)
|
|
{
|
|
i++;
|
|
}
|
|
array[j] = array[i];
|
|
}
|
|
array[i] = key;
|
|
_quick_sort(array, left, i - 1);
|
|
_quick_sort(array, i + 1, right);
|
|
}
|
|
#endif // __OSEL_ARCH_H__
|