精简项目
删除了不需要的文件,并整理了文件夹
631
PORTING/CNN/cnn.c
Normal file
@@ -0,0 +1,631 @@
|
||||
#include "cnn.h"
|
||||
|
||||
u8 isrun;
|
||||
|
||||
void _cnn_run(){
|
||||
isrun = 1;
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>*/
|
||||
/// @brief <20><>ӡͼ<D3A1><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param array_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵĸ<DCB5><C4B8><EFBFBD>
|
||||
/// @param elements_per_line ÿһ<C3BF>еĸ<D0B5><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
void PrintfArray(float *array, int array_num, int elements_per_line)
|
||||
{
|
||||
for (int i = 0; i < array_num; i++)
|
||||
{
|
||||
printf("%f ", array[i]); // <20><>ӡ<EFBFBD><D3A1>ǰԪ<C7B0><D4AA>
|
||||
// ÿ<><C3BF>ӡ<EFBFBD><D3A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
if ((i + 1) % elements_per_line == 0)
|
||||
{
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ԫ<EFBFBD>ز<EFBFBD><D8B2>㣬<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (array_num % elements_per_line != 0)
|
||||
{
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PrintfResArray(float *array, int array_num, int elements_per_line)
|
||||
{
|
||||
for (int i = 0; i < array_num; i++)
|
||||
{
|
||||
printf("%f ", array[i]); // <20><>ӡ<EFBFBD><D3A1>ǰԪ<C7B0><D4AA>
|
||||
// ÿ<><C3BF>ӡ<EFBFBD><D3A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
if ((i + 1) % elements_per_line == 0)
|
||||
{
|
||||
printf("\t");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*<2A><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>*/
|
||||
/// @brief <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>ΪelementSize
|
||||
/// @param depth <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[depth][]
|
||||
/// @param num <20><><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[][num]
|
||||
/// @param elementSize <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void **allocate2DArray(int depth, int num, size_t elementSize)
|
||||
{
|
||||
void **array = (void **)mymalloc(SRAMEX, depth * sizeof(void *));
|
||||
for (int d = 0; d < depth; d++)
|
||||
{
|
||||
array[d] = mymalloc(SRAMEX, num * elementSize);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
/// @brief <20>ͷ<EFBFBD>ͨ<EFBFBD><CDA8>allocate2DArray<61><79><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param array <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param depth <20><><EFBFBD><EFBFBD>
|
||||
void free2DArray(float **array, int depth)
|
||||
{
|
||||
for (int d = 0; d < depth; d++)
|
||||
{
|
||||
myfree(SRAMEX, array[d]);
|
||||
}
|
||||
myfree(SRAMEX, array);
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>*/
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺100<30><30>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>100<30><30>Ԫ<EFBFBD><D4AA>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Full(float *inputArray, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 0; i < ((input_size + 2) * (input_size + 2)); i++)
|
||||
{
|
||||
outputArray[i] = 0;
|
||||
}
|
||||
for (i = 0; i < input_size; i++)
|
||||
{
|
||||
for (j = 0; j < input_size; j++)
|
||||
{
|
||||
outputArray[(i + 1) * (input_size + 2) + (j + 1)] = inputArray[i * input_size + j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>гػ<D0B3><D8BB><EFBFBD>ѡȡkernel_size*kernel_size<7A>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊstep
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param kernel_size <20>ػ<EFBFBD><D8BB>˵ĵ<CBB5><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param step <20><><EFBFBD><EFBFBD>ֵ
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Pooling(float *inputArray, int input_size,
|
||||
int kernel_size, unsigned int step,
|
||||
float *outputArray)
|
||||
{
|
||||
int output_size = (input_size - kernel_size) / step + 1;
|
||||
|
||||
for (int i = 0; i < output_size; i++)
|
||||
{
|
||||
for (int j = 0; j < output_size; j++)
|
||||
{
|
||||
float max_value = 0;
|
||||
|
||||
for (int m = 0; m < kernel_size; m++)
|
||||
{
|
||||
for (int n = 0; n < kernel_size; n++)
|
||||
{
|
||||
int input_row = i * step + m;
|
||||
int input_col = j * step + n;
|
||||
int input_idx = input_row * input_size + input_col;
|
||||
|
||||
if (inputArray[input_idx] > max_value)
|
||||
{
|
||||
max_value = inputArray[input_idx];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int output_idx = i * output_size + j;
|
||||
outputArray[output_idx] = max_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>ѡȡkernel_size*kernel_size<7A>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD>ﲽ<EFBFBD><EFB2BD>Ϊ1
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param kernel <20><><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>kernel_size * kernel_size<7A>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
/// @param kernel_size <20>ػ<EFBFBD><D8BB>˵ĵ<CBB5><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Convolution(float *inputArray, int input_size,
|
||||
float *kernel, int kernel_size,
|
||||
float *outputArray)
|
||||
{
|
||||
int i, j, m, n;
|
||||
int half_k = kernel_size / 2;
|
||||
int output_size = input_size - 2 * half_k;
|
||||
|
||||
for (i = half_k; i < input_size - half_k; i++)
|
||||
{
|
||||
for (j = half_k; j < input_size - half_k; j++)
|
||||
{
|
||||
float sum = 0;
|
||||
|
||||
for (m = 0; m < kernel_size; m++)
|
||||
{
|
||||
for (n = 0; n < kernel_size; n++)
|
||||
{
|
||||
int input_row = i + m - half_k;
|
||||
int input_col = j + n - half_k;
|
||||
int input_idx = input_row * input_size + input_col;
|
||||
int kernel_idx = m * kernel_size + n;
|
||||
sum += inputArray[input_idx] * kernel[kernel_idx];
|
||||
}
|
||||
}
|
||||
int output_idx = (i - half_k) * output_size + (j - half_k);
|
||||
outputArray[output_idx] = sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20>Զ<EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧλ<D3A6><CEBB><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_depth <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[input_depth][]
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Combine(float **inputArray, int input_depth, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j, k;
|
||||
int input_idx;
|
||||
|
||||
for (i = 0; i < input_size; i++)
|
||||
{
|
||||
|
||||
for (j = 0; j < input_size; j++)
|
||||
{
|
||||
float sum = 0;
|
||||
|
||||
input_idx = i * input_size + j;
|
||||
for (k = 0; k < input_depth; k++)
|
||||
{
|
||||
sum += inputArray[k][input_idx];
|
||||
}
|
||||
outputArray[i * input_size + j] = sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief չ<><D5B9><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_depth <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[input_depth][]
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Flatten2D(float **inputArray, int input_depth, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j, k;
|
||||
for (k = 0; k < input_depth; k++)
|
||||
{
|
||||
for (i = 0; i < input_size; i++)
|
||||
{
|
||||
for (j = 0; j < input_size; j++)
|
||||
{
|
||||
int input_idx = i * input_size + j;
|
||||
outputArray[k * input_size * input_size + input_idx] = inputArray[k][input_idx];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ÿһλ<D2BB><CEBB><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param bias ƫ<>ú<EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void AddBias(float *inputArray, int input_num, float bias, float *outputArray)
|
||||
{
|
||||
for (int i = 0; i < input_num; i++)
|
||||
{
|
||||
outputArray[i] = inputArray[i] + bias;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief ȫ<><C8AB><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param input_w <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD>غ<EFBFBD>
|
||||
/// @param input_b <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ú<EFBFBD>
|
||||
/// @return һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfloat
|
||||
float ConnectedLayer(float *inputArray, int input_num,
|
||||
float *input_w, float input_b)
|
||||
{
|
||||
int i;
|
||||
float sum = 0;
|
||||
for (i = 0; i < input_num; i++)
|
||||
{
|
||||
sum += inputArray[i] * input_w[i];
|
||||
}
|
||||
sum = sum + input_b;
|
||||
return sum;
|
||||
}
|
||||
|
||||
/// @brief ReLU<4C><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3BA>ֵ<EFBFBD><D6B5><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
void ReLU1(float *inputArray, int num, float *outputArray)
|
||||
{
|
||||
for (int i = 0; i < num; i++) {
|
||||
outputArray[i] = (inputArray[i] > 0) ? inputArray[i] : 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief ReLU<4C><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3BA>ֵ<EFBFBD><D6B5><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
/// @param data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfloat
|
||||
float ReLU2(float data)
|
||||
{
|
||||
if (data > 0) {
|
||||
return data;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
/// @brief <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͱ<EFBFBD><EFBFBD><D7BC>
|
||||
/// @param arr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param size <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param max_val <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
/// @param mean ƽ<><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
/// @param std_dev <20><><EFBFBD><EFBFBD><EEB1A3>
|
||||
void calculate_statistics(float arr[], int size, float *max_val, float *mean, float *std_dev)
|
||||
{
|
||||
*max_val = fabs(arr[0]);
|
||||
float sum = 0.0;
|
||||
float sum_sq = 0.0;
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
float abs_val = fabs(arr[i]);
|
||||
|
||||
if (abs_val > *max_val) {
|
||||
*max_val = abs_val;
|
||||
}
|
||||
sum += abs_val;
|
||||
sum_sq += abs_val * abs_val;
|
||||
}
|
||||
|
||||
*mean = sum / size;
|
||||
|
||||
float variance = (sum_sq / size) - (*mean * *mean);
|
||||
*std_dev = sqrt(variance);
|
||||
}
|
||||
//<2F>жϷŵ<CFB7>
|
||||
|
||||
/// @brief <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ŵ<EFBFBD>
|
||||
/// @param arr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param size <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param mean ƽ<><C6BD>ֵ
|
||||
/// @param std_dev <20><><EFBFBD><D7BC>
|
||||
/// @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
int check_threshold(float arr[], int size, float *mean, float *std_dev)
|
||||
{
|
||||
const float threshold = 20.0;
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
float K = (arr[i] - *mean) / *std_dev;
|
||||
if (K > threshold) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD>100*100<30><30><EFBFBD><EFBFBD>
|
||||
/// @param get_data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param Max_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
/// @param totalPoints <20>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param CNN_data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8>ά<EFBFBD><CEAC>
|
||||
void generateMatrix(float *get_data, float Max_value, int totalPoints, float CNN_data[100*100])
|
||||
{
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int j = 0; j < 100; j++) {
|
||||
CNN_data[i*100+j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int pointsPerInterval = totalPoints / 100;
|
||||
float amplitudeStep = Max_value / 100;
|
||||
|
||||
for (int i = 0; i < totalPoints; i++) {
|
||||
float amplitudeValue = fabsf(get_data[i]);
|
||||
|
||||
if (amplitudeValue == 0.0f) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int intervalIndex = i / pointsPerInterval;
|
||||
if (intervalIndex >= 100) intervalIndex = 99;
|
||||
|
||||
int amplitudeIndex = 99 - (int)(amplitudeValue / amplitudeStep);
|
||||
if (amplitudeIndex < 0) amplitudeIndex = 0;
|
||||
|
||||
CNN_data[amplitudeIndex*100+intervalIndex]++;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param input_array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param output_array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @return <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>+1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a[0]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>
|
||||
int calculate_probabilities(float *input_array, float *output_array, int input_num)
|
||||
{
|
||||
float sum = 0.0;
|
||||
float temp[input_num];
|
||||
for (int i = 0; i < input_num; i++)
|
||||
{
|
||||
temp[i] = exp(input_array[i]);
|
||||
sum = sum + temp[i];
|
||||
}
|
||||
for (int j = 0; j < input_num; j++)
|
||||
{
|
||||
output_array[j] = temp[j] / sum;
|
||||
}
|
||||
int max_index = 0;
|
||||
float max_value = output_array[0];
|
||||
for (int k = 1; k < input_num; k++)
|
||||
{
|
||||
if (output_array[k] > max_value)
|
||||
{
|
||||
max_value = output_array[k];
|
||||
max_index = k;
|
||||
}
|
||||
}
|
||||
return max_index + 1;
|
||||
}
|
||||
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD>*/
|
||||
|
||||
/*ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||||
*Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD>֤<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>㣬<EFBFBD>п<EFBFBD><D0BF>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*Ŀǰû<C7B0><C3BB><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>㡣
|
||||
*ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD> --> data.array<61><79><EFBFBD><EFBFBD>
|
||||
/// @param size ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD> --> data.maxlength<74><68><EFBFBD><EFBFBD>
|
||||
void cnn_run()
|
||||
{
|
||||
float maxvalue = 0.0; //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
float meanvalue = 0.0; //ƽ<><C6BD>ֵ
|
||||
float std_devvalue = 0.0; //<2F><><EFBFBD><D7BC>
|
||||
int index = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>ɶ<EFBFBD>ģ<EFBFBD>
|
||||
float *Matrix_data = (float*)mymalloc(SRAMEX, sizeof(float) * 100 * 100); //<2F><><EFBFBD>ɵ<EFBFBD>100*100<30>ľ<EFBFBD><C4BE><EFBFBD><F3B1A3B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
printf("CNNģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\nData<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>Ϊ<EFBFBD><EFBFBD>%s\r\n",data.dname);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",0,data.array[0]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1,data.array[1]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",2,data.array[2]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",299,data.array[299]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",300,data.array[300]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",301,data.array[301]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249997,data.array[1249997]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249998,data.array[1249998]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249999,data.array[1249999]);
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
calculate_statistics(data.array, data.maxlength, &maxvalue, &meanvalue,&std_devvalue);
|
||||
|
||||
/*<2A>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B3ACB9><EFBFBD>ֵ*/
|
||||
int x = check_threshold(data.array, data.maxlength, &meanvalue, &std_devvalue);
|
||||
if (x == 1) {
|
||||
printf("Start\r\n");
|
||||
//pre <20><>ʼԤ<CABC><D4A4><EFBFBD><EFBFBD>
|
||||
/*<2A><><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>*/
|
||||
generateMatrix(data.array, maxvalue, data.maxlength, Matrix_data);
|
||||
float *CNN_data = (float*)mymalloc(SRAMEX, sizeof(float) * 100 * 100);
|
||||
/*<2A><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>תһά<D2BB><CEAC><EFBFBD>飬<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int j = 0; j < 100; j++) {
|
||||
CNN_data[9999 - index++] = Matrix_data[i*100+j];
|
||||
}
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>һ<EFBFBD>㣡\r\n");
|
||||
//1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>*/
|
||||
float* Full_output1 = (float*)mymalloc(SRAMEX, sizeof(float) * 102 * 102);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
Full(CNN_data, 100, Full_output1);
|
||||
float** Convolution_result1_before = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
float** Convolution_result1_relu = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
float** Convolution_result1 = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>û<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>*/
|
||||
float conv1_weight_new[9] = {
|
||||
conv1_weight.array[i*9+0],conv1_weight.array[i*9+1],
|
||||
conv1_weight.array[i*9+2],conv1_weight.array[i*9+3],
|
||||
conv1_weight.array[i*9+4],conv1_weight.array[i*9+5],
|
||||
conv1_weight.array[i*9+6],conv1_weight.array[i*9+7],
|
||||
conv1_weight.array[i*9+8] };
|
||||
Convolution(Full_output1, 102, conv1_weight_new, 3, Convolution_result1_before[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
AddBias(Convolution_result1_before[i], 100 * 100, conv1_bias.array[i], Convolution_result1_relu[i]);
|
||||
}
|
||||
/*<2A><>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
ReLU1(Convolution_result1_relu[i], 100 * 100, Convolution_result1[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float ** Pooling_result1 = (float**)allocate2DArray(32, 50 * 50, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
Pooling(Convolution_result1[i], 100, 2, 2, Pooling_result1[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
myfree(SRAMEX, Full_output1);
|
||||
free2DArray(Convolution_result1_relu,32);
|
||||
free2DArray(Convolution_result1_before,32);
|
||||
free2DArray(Convolution_result1,32);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Full_output2 = (float**)allocate2DArray(32, 52 * 52, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
Full(Pooling_result1[i], 50, Full_output2[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD>Դ*/
|
||||
float** Convolution_result_temp_2 = (float**)allocate2DArray(32, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2_before = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2_relu = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2 = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
for (int j = 0; j < 32; j++) {
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float conv2_weight_new[9] = {
|
||||
conv2_weight.array[i*32*9+9*j+0],conv2_weight.array[i*32*9+9*j+1],
|
||||
conv2_weight.array[i*32*9+9*j+2],conv2_weight.array[i*32*9+9*j+3],
|
||||
conv2_weight.array[i*32*9+9*j+4],conv2_weight.array[i*32*9+9*j+5],
|
||||
conv2_weight.array[i*32*9+9*j+6],conv2_weight.array[i*32*9+9*j+7],
|
||||
conv2_weight.array[i*32*9+9*j+8]
|
||||
};
|
||||
Convolution(Full_output2[j], 52, conv2_weight_new, 3, Convolution_result_temp_2[j]);
|
||||
}
|
||||
/*ÿһ<C3BF><D2BB><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ϲ<EFBFBD>*/
|
||||
Combine(Convolution_result_temp_2, 32, 50, Convolution_result2_before[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
AddBias(Convolution_result2_before[i], 50 * 50, conv2_bias.array[i], Convolution_result2_relu[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
ReLU1(Convolution_result2_relu[i], 50 * 50, Convolution_result2[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Pooling_result2 = (float**)allocate2DArray(64, 25 * 25, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Pooling(Convolution_result2[i], 50, 2, 2, Pooling_result2[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Full_output2,32);
|
||||
free2DArray(Pooling_result1,32);
|
||||
free2DArray(Convolution_result_temp_2,32);
|
||||
free2DArray(Convolution_result2_relu,64);
|
||||
free2DArray(Convolution_result2_before,64);
|
||||
free2DArray(Convolution_result2,64);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Full_output3 = (float**)allocate2DArray(64, 27 * 27, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Full(Pooling_result2[i], 25, Full_output3[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD>Դ*/
|
||||
float** Convolution_result_temp_3 = (float**)allocate2DArray(64, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3_before = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3_relu = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3 = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
for (int j = 0; j < 64; j++) {
|
||||
float conv3_weight_new[9] = {
|
||||
conv3_weight.array[i*64*9+9*j+0],conv3_weight.array[i*64*9+9*j+1],
|
||||
conv3_weight.array[i*64*9+9*j+2],conv3_weight.array[i*64*9+9*j+3],
|
||||
conv3_weight.array[i*64*9+9*j+4],conv3_weight.array[i*64*9+9*j+5],
|
||||
conv3_weight.array[i*64*9+9*j+6],conv3_weight.array[i*64*9+9*j+7],
|
||||
conv3_weight.array[i*64*9+9*j+8]
|
||||
};
|
||||
Convolution(Full_output3[j], 27, conv3_weight_new, 3, Convolution_result_temp_3[j]);
|
||||
}
|
||||
/*<2A><>ͼ<EFBFBD><CDBC><EFBFBD>ϲ<EFBFBD>*/
|
||||
Combine(Convolution_result_temp_3, 64, 25, Convolution_result3_before[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
AddBias(Convolution_result3_before[i], 25 * 25, conv3_bias.array[i], Convolution_result3_relu[i]);
|
||||
}
|
||||
/*ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
ReLU1(Convolution_result3_relu[i], 25 * 25, Convolution_result3[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Pooling_result3 = (float**)allocate2DArray(128, 12 * 12, sizeof(float));
|
||||
for (int i = 0; i < 128; i++) {
|
||||
Pooling(Convolution_result3_before[i], 25, 2, 2, Pooling_result3[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>*/
|
||||
float* xi = (float *)mymalloc(SRAMEX, sizeof(float) * 128 * 12 * 12);
|
||||
Flatten2D(Pooling_result3, 128, 12, xi);
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//4 <20><>һ<EFBFBD><D2BB><EFBFBD>Ӳ<EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Full_output3,64);
|
||||
free2DArray(Pooling_result2,64);
|
||||
free2DArray(Convolution_result_temp_3,64);
|
||||
free2DArray(Convolution_result3_relu,128);
|
||||
free2DArray(Convolution_result3_before,128);
|
||||
free2DArray(Convolution_result3,128);
|
||||
/*<2A><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
//float yi[128] = {0};
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>IJ㣡\r\n");
|
||||
float* yi = (float *)mymalloc(SRAMEX, 128 * sizeof(float));
|
||||
memset(yi, 0, 128 * sizeof(float));
|
||||
for (int i = 0; i < 128; i++) {
|
||||
float sum = 0;
|
||||
//float fc1_weight_new[128*12*12];
|
||||
float* fc1_weight_new = (float*)mymalloc(SRAMEX, sizeof(float) * 128 * 12 * 12);
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
memcpy(fc1_weight_new,&fc1_weight.array[i*128*12*12],128*12*12 * sizeof(float));
|
||||
sum = ConnectedLayer(xi, 128 * 12 * 12, fc1_weight_new, fc1_bias.array[i]);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
yi[i] = ReLU2(sum);
|
||||
myfree(SRAMEX, fc1_weight_new);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Pooling_result3,128);
|
||||
/*<2A><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float zi[7] = {0};
|
||||
// float *zi = (float *)mymalloc(SRAMEX, 7 * sizeof(float));
|
||||
// memset(zi, 0, 7 * sizeof(float));
|
||||
for (int i = 0; i < 7; i++) {
|
||||
//float fc2_weight_new[128];
|
||||
float* fc2_weight_new = (float*)mymalloc(SRAMEX, sizeof(float) * 128);
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
memcpy(fc2_weight_new,&fc2_weight.array[i*128],128 * sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
zi[i] = ConnectedLayer(yi, 128, fc2_weight_new, fc2_bias.array[i]);
|
||||
myfree(SRAMEX, fc2_weight_new);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//end <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float result[7];
|
||||
int max_probability_idx = calculate_probabilities(zi,result,7);
|
||||
PrintfResArray(zi,7,7);
|
||||
PrintfResArray(result,7,7);
|
||||
printf("%f, Label %d\t", result[max_probability_idx - 1] * 100, max_probability_idx);
|
||||
myfree(SRAMEX, xi);
|
||||
myfree(SRAMEX, yi);
|
||||
myfree(SRAMEX, CNN_data);
|
||||
myfree(SRAMEX, Full_output1);
|
||||
myfree(SRAMEX, Matrix_data);
|
||||
}
|
||||
else printf("No\r\n");/*<2A><><EFBFBD><EFBFBD>û<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>ӡ<EFBFBD><D3A1>No<4E><6F>*/
|
||||
printf("maxvalue is:%f\t",maxvalue);
|
||||
printf("meanvalue is:%f\t",meanvalue);
|
||||
printf("std_devvalue is:%f\r\n",std_devvalue);
|
||||
isrun = 0;
|
||||
}
|
||||
|
||||
34
PORTING/CNN/cnn.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#ifndef _CNN_H_
|
||||
#define _CNN_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "cnn_model.h"
|
||||
|
||||
extern u8 isrun;
|
||||
|
||||
void PrintfArray(float *array, int array_num, int elements_per_line);
|
||||
void **allocate2DArray(int depth, int num, size_t elementSize);
|
||||
void free2DArray(float **array, int depth);
|
||||
void Full(float *inputArray, int input_size, float *outputArray);
|
||||
void Pooling(float *inputArray, int input_size, int kernel_size, unsigned int step, float *outputArray);
|
||||
void Convolution(float *inputArray, int input_size, float *kernel, int kernel_size, float *outputArray);
|
||||
void Combine(float **inputArray, int input_depth, int input_size, float *outputArray);
|
||||
void Flatten2D(float **inputArray, int input_depth, int input_size, float *outputArray);
|
||||
float ConnectedLayer(float *inputArray, int input_num, float *input_w, float input_b);
|
||||
void ReLU1(float *inputArray, int num, float *outputArray);
|
||||
float ReLU2(float data);
|
||||
void AddBias(float *inputArray, int input_num, float bias, float *outputArray);
|
||||
|
||||
int calculate_probabilities(float *input_array, float *output_array, int input_num);
|
||||
void generateMatrix(float *get_data, float Max_value, int totalPoints, float CNN_data[100*100]);
|
||||
void calculate_statistics(float arr[], int size, float *max_val, float *mean, float *std_dev);
|
||||
int check_threshold(float arr[], int size, float *mean, float *std_dev);
|
||||
|
||||
void _cnn_run(void);
|
||||
void cnn_run(void);
|
||||
void PrintfResArray(float *array, int array_num, int elements_per_line);
|
||||
|
||||
#endif
|
||||
393
PORTING/CNN/cnn_model.c
Normal file
@@ -0,0 +1,393 @@
|
||||
#include "cnn_model.h"
|
||||
|
||||
|
||||
|
||||
Model conv1_bias;
|
||||
Model conv1_weight;
|
||||
Model conv2_bias;
|
||||
Model conv2_weight;
|
||||
Model conv3_bias;
|
||||
Model conv3_weight;
|
||||
Model fc1_bias;
|
||||
Model fc1_weight;
|
||||
Model fc2_bias;
|
||||
Model fc2_weight;
|
||||
Model data;
|
||||
|
||||
|
||||
|
||||
float* modelmym_init(char* model_name){
|
||||
if(conv1_bias.array == NULL && strcmp(model_name, "conv1_bias") == 0)
|
||||
return conv1_bias.array = (float*)mymalloc(SRAMEX, CONV1_BIAS_ARRSIZE * sizeof(float));
|
||||
else if(conv1_weight.array == NULL && strcmp(model_name, "conv1_weight") == 0)
|
||||
return conv1_weight.array = (float*)mymalloc(SRAMEX, CONV1_WEIGHT_ARRSIZE * sizeof(float));
|
||||
else if(conv2_bias.array == NULL && strcmp(model_name, "conv2_bias") == 0)
|
||||
return conv2_bias.array = (float*)mymalloc(SRAMEX, CONV2_BIAS_ARRSIZE * sizeof(float));
|
||||
else if(conv2_weight.array == NULL && strcmp(model_name, "conv2_weight") == 0)
|
||||
return conv2_weight.array = (float*)mymalloc(SRAMEX, CONV2_WEIGHT_ARRSIZE * sizeof(float));
|
||||
else if(conv3_bias.array == NULL && strcmp(model_name, "conv3_bias") == 0)
|
||||
return conv3_bias.array = (float*)mymalloc(SRAMEX, CONV3_BIAS_ARRSIZE * sizeof(float));
|
||||
else if(conv3_weight.array == NULL && strcmp(model_name, "conv3_weight") == 0)
|
||||
return conv3_weight.array = (float*)mymalloc(SRAMEX, CONV3_WEIGHT_ARRSIZE * sizeof(float));
|
||||
else if(fc1_bias.array == NULL && strcmp(model_name, "fc1_bias") == 0)
|
||||
return fc1_bias.array = (float*)mymalloc(SRAMEX, FC1_BIAS_ARRSIZE * sizeof(float));
|
||||
else if(fc1_weight.array == NULL && strcmp(model_name, "fc1_weight") == 0)
|
||||
return fc1_weight.array = (float*)mymalloc(SRAMEX, FC1_WEIGHT_ARRSIZE * sizeof(float));
|
||||
else if(fc2_bias.array == NULL && strcmp(model_name, "fc2_bias") == 0)
|
||||
return fc2_bias.array = (float*)mymalloc(SRAMEX, FC2_BIAS_ARRSIZE * sizeof(float));
|
||||
else if(fc2_weight.array == NULL && strcmp(model_name, "fc2_weight") == 0)
|
||||
return fc2_weight.array = (float*)mymalloc(SRAMEX, FC2_WEIGHT_ARRSIZE * sizeof(float));
|
||||
else if(data.array == NULL && strcmp(model_name, "data") == 0)
|
||||
return data.array = (float*)mymalloc(SRAMEX, DATA_ARRSIZE * sizeof(float));
|
||||
else if(strcmp(model_name, "all") == 0){
|
||||
if(conv1_bias.array == NULL)conv1_bias.array = (float*)mymalloc(SRAMEX, CONV1_BIAS_ARRSIZE * sizeof(float));
|
||||
if(conv1_weight.array == NULL)conv1_weight.array = (float*)mymalloc(SRAMEX, CONV1_WEIGHT_ARRSIZE * sizeof(float));
|
||||
if(conv2_bias.array == NULL)conv2_bias.array = (float*)mymalloc(SRAMEX, CONV2_BIAS_ARRSIZE * sizeof(float));
|
||||
if(conv2_weight.array == NULL)conv2_weight.array = (float*)mymalloc(SRAMEX, CONV2_WEIGHT_ARRSIZE * sizeof(float));
|
||||
if(conv3_bias.array == NULL)conv3_bias.array = (float*)mymalloc(SRAMEX, CONV3_BIAS_ARRSIZE * sizeof(float));
|
||||
if(conv3_weight.array == NULL)conv3_weight.array = (float*)mymalloc(SRAMEX, CONV3_WEIGHT_ARRSIZE * sizeof(float));
|
||||
if(fc1_bias.array == NULL)fc1_bias.array = (float*)mymalloc(SRAMEX, FC1_BIAS_ARRSIZE * sizeof(float));
|
||||
if(fc1_weight.array == NULL)fc1_weight.array = (float*)mymalloc(SRAMEX, FC1_WEIGHT_ARRSIZE * sizeof(float));
|
||||
if(fc2_bias.array == NULL)fc2_bias.array = (float*)mymalloc(SRAMEX, FC2_BIAS_ARRSIZE * sizeof(float));
|
||||
if(fc2_weight.array == NULL)fc2_weight.array = (float*)mymalloc(SRAMEX, FC2_WEIGHT_ARRSIZE * sizeof(float));
|
||||
if(data.array == NULL)data.array = (float*)mymalloc(SRAMEX, DATA_ARRSIZE * sizeof(float));
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
u8 modelmym_free(char* model_name){
|
||||
if(conv1_bias.array != NULL && strcmp(model_name, "conv1_bias") == 0){
|
||||
myfree(SRAMEX,conv1_bias.array);
|
||||
conv1_bias.array = NULL;
|
||||
conv1_bias.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(conv1_weight.array != NULL && strcmp(model_name, "conv1_weight") == 0){
|
||||
myfree(SRAMEX,conv1_weight.array);
|
||||
conv1_weight.array = NULL;
|
||||
conv1_weight.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(conv2_bias.array != NULL && strcmp(model_name, "conv2_bias") == 0){
|
||||
myfree(SRAMEX,conv2_bias.array);
|
||||
conv2_bias.array = NULL;
|
||||
conv2_bias.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(conv2_weight.array != NULL && strcmp(model_name, "conv2_weight") == 0){
|
||||
myfree(SRAMEX,conv2_weight.array);
|
||||
conv2_weight.array = NULL;
|
||||
conv2_weight.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(conv3_bias.array != NULL && strcmp(model_name, "conv3_bias") == 0){
|
||||
myfree(SRAMEX,conv3_bias.array);
|
||||
conv3_bias.array = NULL;
|
||||
conv3_bias.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(conv3_weight.array != NULL && strcmp(model_name, "conv3_weight") == 0){
|
||||
myfree(SRAMEX,conv3_weight.array);
|
||||
conv3_weight.array = NULL;
|
||||
conv3_weight.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(fc1_bias.array != NULL && strcmp(model_name, "fc1_bias") == 0){
|
||||
myfree(SRAMEX,fc1_bias.array);
|
||||
fc1_bias.array = NULL;
|
||||
fc1_bias.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(fc1_weight.array != NULL && strcmp(model_name, "fc1_weight") == 0){
|
||||
myfree(SRAMEX,fc1_weight.array);
|
||||
fc1_weight.array = NULL;
|
||||
fc1_weight.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(fc2_bias.array != NULL && strcmp(model_name, "fc2_bias") == 0){
|
||||
myfree(SRAMEX,fc2_bias.array);
|
||||
fc2_bias.array = NULL;
|
||||
fc2_bias.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(fc2_weight.array != NULL && strcmp(model_name, "fc2_weight") == 0){
|
||||
myfree(SRAMEX,fc2_weight.array);
|
||||
fc2_weight.array = NULL;
|
||||
fc2_weight.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(data.array != NULL && strcmp(model_name, "data") == 0){
|
||||
myfree(SRAMEX,data.array);
|
||||
data.array = NULL;
|
||||
data.realength = NULL;
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(model_name, "all") == 0){
|
||||
modelmym_free("conv1_bias");
|
||||
modelmym_free("conv1_weight");
|
||||
modelmym_free("conv2_bias");
|
||||
modelmym_free("conv2_weight");
|
||||
modelmym_free("conv3_bias");
|
||||
modelmym_free("conv3_weight");
|
||||
modelmym_free("fc1_bias");
|
||||
modelmym_free("fc1_weight");
|
||||
modelmym_free("fc2_bias");
|
||||
modelmym_free("fc2_weight");
|
||||
modelmym_free("data");
|
||||
return 2;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
u8 model_write(char* model_name)
|
||||
{
|
||||
if(strcmp(model_name, "all") == 0){
|
||||
model_write("conv1_bias");
|
||||
model_write("conv1_weight");
|
||||
model_write("conv2_bias");
|
||||
model_write("conv2_weight");
|
||||
model_write("conv3_bias");
|
||||
model_write("conv3_weight");
|
||||
model_write("fc1_bias");
|
||||
model_write("fc1_weight");
|
||||
model_write("fc2_bias");
|
||||
model_write("fc2_weight");
|
||||
|
||||
model_info("all");
|
||||
SDRAM_USED();
|
||||
}else{
|
||||
u8 res=0;
|
||||
u8 isneg=0;
|
||||
u8 _times=0;
|
||||
u32 _larr = 0;
|
||||
u8 _len = strlen(model_name);
|
||||
char _path[_len+1+7+30];
|
||||
char _fstr[READLENGTH+1] = {0};
|
||||
char _sstr[2];
|
||||
int progress;
|
||||
Model *_model = model(model_name);
|
||||
|
||||
if(_model == NULL || strcmp(model_name, "data") == 0){
|
||||
sprintf(_path, "0:/%s.txt", model_name);
|
||||
if(f_open(file, (const TCHAR *)_path, 1)){
|
||||
DEBUG_PRINTF("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>ģ<EFBFBD>ͻ<EFBFBD>Data<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
|
||||
return 199;
|
||||
}else{
|
||||
_model = model("data");
|
||||
_model -> dname = model_name;
|
||||
}
|
||||
}
|
||||
|
||||
if(_model -> dname == NULL){
|
||||
sprintf(_path, "0:/%s.txt", _model -> name);
|
||||
if(f_open(file, (TCHAR *)_path, 1)){
|
||||
DEBUG_PRINTF("Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ͣ<EFBFBD>[%s]\r\n", _path);
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
||||
if(_model -> array == NULL && modelmym_init(_model -> name) == NULL){
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>[%s]<5D><><EFBFBD><EFBFBD><EFBFBD>鵽SDRAM<41><4D>\r\n", _model -> name);
|
||||
return 200;
|
||||
}
|
||||
|
||||
DEBUG_PRINTF("д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>%s\r\n", _model -> name);
|
||||
if(_model -> dname)DEBUG_PRINTF("д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Data<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD>ǣ<EFBFBD>%s\r\n", _model -> dname);
|
||||
DEBUG_PRINTF("д<EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d\r\n", _model -> maxlength);
|
||||
DEBUG_PRINTF("Ŀǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d", _model -> realength);
|
||||
printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>'%s'<27><><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD>......\r\n",_model -> dname ? _model -> dname : _model -> name);
|
||||
|
||||
while(1){
|
||||
res = f_read(file, fatbuf, READLENGTH ,&br);
|
||||
if(res){
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d\r\n",res);
|
||||
return res;
|
||||
}else{
|
||||
for(int i=0; i < br; i++){
|
||||
if(fatbuf[i] == 0x0d){
|
||||
float _fvalue = atof(_fstr);
|
||||
if(isneg)_fvalue = -_fvalue;
|
||||
_model -> array[_larr++] = _fvalue;
|
||||
//DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n<>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i,_fstr,_fvalue);
|
||||
i++;
|
||||
isneg=0;
|
||||
*_fstr = NULL;
|
||||
_model -> realength = _larr; //_larr<72><72><EFBFBD><EFBFBD>ֵΪģ<CEAA><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(_larr >= _model -> maxlength)break;
|
||||
}
|
||||
else if(fatbuf[i] == 0x2d)isneg = 1;
|
||||
else{
|
||||
sprintf(_sstr, "%c", fatbuf[i]);
|
||||
strcat(_fstr, _sstr);
|
||||
//DEBUG_PRINTF("[%d]_fstr is[%s], _sstr is[%s], fatbuf is [%c]\r\n",i,_fstr,_sstr,fatbuf[i]);
|
||||
}
|
||||
}
|
||||
if(_model -> maxlength >= 73728 && (_larr >= (_model -> maxlength/10)*_times)){
|
||||
progress = _larr >= _model -> maxlength ? 100 : _times++ == 0 ? 0 : progress + 10;
|
||||
DEBUG_PRINTF("\r\n[");
|
||||
for(u16 j=0; j<50;j++){
|
||||
if(j < progress/2) DEBUG_PRINTF("=");
|
||||
else DEBUG_PRINTF(" ");
|
||||
}
|
||||
DEBUG_PRINTF("] %d%%", progress);
|
||||
}
|
||||
if(_larr >= _model -> maxlength)break;
|
||||
}
|
||||
}
|
||||
DEBUG_PRINTF("\r\nģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>[%s]<5D><>д<EFBFBD>뵽<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>! ģ<>ͳ<EFBFBD><CDB3><EFBFBD>Ϊ %d\r\n",_model -> dname ? _model -> dname : _model -> name,_model -> realength);
|
||||
return 1;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
u8 model_read(char* model_name, u32 start, u32 end, u32 gap){
|
||||
if(strcmp(model_name, "all") == 0){
|
||||
model_read("conv1_bias", start, end, gap);
|
||||
model_read("conv1_weight", start, end, gap);
|
||||
model_read("conv2_bias", start, end, gap);
|
||||
model_read("conv2_weight", start, end, gap);
|
||||
model_read("conv3_bias", start, end, gap);
|
||||
model_read("conv3_weight", start, end, gap);
|
||||
model_read("fc1_bias", start, end, gap);
|
||||
model_read("fc1_weight", start, end, gap);
|
||||
model_read("fc2_bias", start, end, gap);
|
||||
model_read("fc2_weight", start, end, gap);
|
||||
model_read("data", start, end, gap);
|
||||
}else{
|
||||
Model *_model = model(model_name);
|
||||
if(_model == NULL || end == 0 || start > _model -> realength || end > _model -> realength)return NULL;
|
||||
if(_model -> realength){
|
||||
for (u32 i=0;i<((end > (_model -> realength) ? _model -> realength : (end-start))+(end > (_model -> realength) ? _model -> realength : (end-start)%gap ? 2 : 1));i+=gap)
|
||||
printf("\r\n%s_floatArray[%d]: %f",_model->name,(i+start)<_model->realength ? i+start : _model->realength-1,(i+start)<_model->realength ? _model->array[i+start] : _model->array[_model -> realength-1]);
|
||||
printf("\r\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
u8 model_switchdata(char* data_name){
|
||||
u8 _len = strlen(data_name);
|
||||
char _path[_len+1+7];
|
||||
if(data.array != NULL)modelmym_free("data");
|
||||
sprintf(_path, "0:/%s.txt",data_name);
|
||||
if(f_open(file,(const TCHAR*)_path,1)){
|
||||
DEBUG_PRINTF("\r\nData<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>[%s]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n",data_name);
|
||||
return NULL;
|
||||
}else{
|
||||
u8 _res = model_write(data_name);
|
||||
if (_res == NULL) {
|
||||
DEBUG_PRINTF("Data<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>[%s]<5D>л<EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>\r\n",data_name);
|
||||
return NULL;
|
||||
}
|
||||
else printf("Data<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>[%s]<5D>л<EFBFBD><D0BB>ɹ<EFBFBD><C9B9><EFBFBD>\r\n",data_name);
|
||||
DEBUG_PRINTF("data_name<EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d\r\n_path<EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d\r\n_pathΪ<EFBFBD><EFBFBD>%s\r\n",_len,sizeof(_path),_path);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
void model_dataset(){
|
||||
printf("\r\ndataset is: %s\r\n",data.dname);
|
||||
}
|
||||
|
||||
u8 model_info(char* model_name){
|
||||
if(strcmp(model_name, "all") == 0){
|
||||
model_info("conv1_bias");
|
||||
model_info("conv1_weight");
|
||||
model_info("conv2_bias");
|
||||
model_info("conv2_weight");
|
||||
model_info("conv3_bias");
|
||||
model_info("conv3_weight");
|
||||
model_info("fc1_bias");
|
||||
model_info("fc1_weight");
|
||||
model_info("fc2_bias");
|
||||
model_info("fc2_weight");
|
||||
model_info("data");
|
||||
return 1;
|
||||
}else if(model(model_name)){
|
||||
Model *_model = model(model_name);
|
||||
printf("\r\nmodel.name is: %s\r\n",_model -> name);
|
||||
printf("model.array.address is: 0X%X\r\n",_model -> array);
|
||||
printf("model.maxlength is: %d\r\n",_model -> maxlength);
|
||||
printf("model.realength is: %d\r\n",_model -> realength);
|
||||
//if(strcmp(_model -> name, "data") == 0)printf("dataset is: %s\r\n",_model -> dname); <20>⺯<EFBFBD><E2BAAF><EFBFBD><EFBFBD>BUG<55><47><EFBFBD><EFBFBD>model_dataset<65><74><EFBFBD><EFBFBD>
|
||||
return 1;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void* model(char* model_name){
|
||||
if(strcmp(model_name, "conv1_bias") == 0)return &conv1_bias;
|
||||
else if(strcmp(model_name, "conv1_weight") == 0)return &conv1_weight;
|
||||
else if(strcmp(model_name, "conv2_bias") == 0)return &conv2_bias;
|
||||
else if(strcmp(model_name, "conv2_weight") == 0)return &conv2_weight;
|
||||
else if(strcmp(model_name, "conv3_bias") == 0)return &conv3_bias;
|
||||
else if(strcmp(model_name, "conv3_weight") == 0)return &conv3_weight;
|
||||
else if(strcmp(model_name, "fc1_bias") == 0)return &fc1_bias;
|
||||
else if(strcmp(model_name, "fc1_weight") == 0)return &fc1_weight;
|
||||
else if(strcmp(model_name, "fc2_bias") == 0)return &fc2_bias;
|
||||
else if(strcmp(model_name, "fc2_weight") == 0)return &fc2_weight;
|
||||
else if(strcmp(model_name, "data") == 0)return &data;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void model_init(){
|
||||
|
||||
conv1_bias.name = "conv1_bias";
|
||||
conv1_bias.array = modelmym_init(conv1_bias.name);
|
||||
conv1_bias.maxlength = CONV1_BIAS_ARRSIZE;
|
||||
|
||||
conv1_weight.name = "conv1_weight";
|
||||
conv1_weight.array = modelmym_init(conv1_weight.name);
|
||||
conv1_weight.maxlength = CONV1_WEIGHT_ARRSIZE;
|
||||
|
||||
conv2_bias.name = "conv2_bias";
|
||||
conv2_bias.array = modelmym_init(conv2_bias.name);
|
||||
conv2_bias.maxlength = CONV2_BIAS_ARRSIZE;
|
||||
|
||||
conv2_weight.name = "conv2_weight";
|
||||
conv2_weight.array = modelmym_init(conv2_weight.name);
|
||||
conv2_weight.maxlength = CONV2_WEIGHT_ARRSIZE;
|
||||
|
||||
conv3_bias.name = "conv3_bias";
|
||||
conv3_bias.array = modelmym_init(conv3_bias.name);
|
||||
conv3_bias.maxlength = CONV3_BIAS_ARRSIZE;
|
||||
|
||||
conv3_weight.name = "conv3_weight";
|
||||
conv3_weight.array = modelmym_init(conv3_weight.name);
|
||||
conv3_weight.maxlength = CONV3_WEIGHT_ARRSIZE;
|
||||
|
||||
fc1_bias.name = "fc1_bias";
|
||||
fc1_bias.array = modelmym_init(fc1_bias.name);
|
||||
fc1_bias.maxlength = FC1_BIAS_ARRSIZE;
|
||||
|
||||
fc1_weight.name = "fc1_weight";
|
||||
fc1_weight.array = modelmym_init(fc1_weight.name);
|
||||
fc1_weight.maxlength = FC1_WEIGHT_ARRSIZE;
|
||||
|
||||
fc2_bias.name = "fc2_bias";
|
||||
fc2_bias.array = modelmym_init(fc2_bias.name);
|
||||
fc2_bias.maxlength = FC2_BIAS_ARRSIZE;
|
||||
|
||||
fc2_weight.name = "fc2_weight";
|
||||
fc2_weight.array = modelmym_init(fc2_weight.name);
|
||||
fc2_weight.maxlength = FC2_WEIGHT_ARRSIZE;
|
||||
|
||||
data.name = "data";
|
||||
data.array = modelmym_init(data.name);
|
||||
data.maxlength = DATA_ARRSIZE;
|
||||
data.dname = "data";
|
||||
}
|
||||
|
||||
190
PORTING/CNN/cnn_model.h
Normal file
@@ -0,0 +1,190 @@
|
||||
#ifndef _CNNMODEL_H_
|
||||
#define _CNNMODEL_H_
|
||||
|
||||
|
||||
|
||||
#include "exfuns.h"
|
||||
#include "malloc.h"
|
||||
#include "ff.h"
|
||||
#include "debug.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
char* dname;
|
||||
float* array;
|
||||
u32 maxlength;
|
||||
u32 realength;
|
||||
} Model;
|
||||
|
||||
|
||||
|
||||
#define READLENGTH 11*10
|
||||
#define CONV1_BIAS_ARRSIZE 32
|
||||
#define CONV1_WEIGHT_ARRSIZE 32*1*3*3 //288
|
||||
#define CONV2_BIAS_ARRSIZE 64
|
||||
#define CONV2_WEIGHT_ARRSIZE 64*32*3*3 //18432
|
||||
#define CONV3_BIAS_ARRSIZE 128
|
||||
#define CONV3_WEIGHT_ARRSIZE 128*64*3*3 //73728
|
||||
#define FC1_BIAS_ARRSIZE 128
|
||||
#define FC1_WEIGHT_ARRSIZE 128*18432 //2359296
|
||||
#define FC2_BIAS_ARRSIZE 7
|
||||
#define FC2_WEIGHT_ARRSIZE 7*128 //896
|
||||
#define DATA_ARRSIZE 1250000 //1250000
|
||||
|
||||
|
||||
|
||||
extern Model conv1_bias;
|
||||
extern Model conv1_weight;
|
||||
extern Model conv2_bias;
|
||||
extern Model conv2_weight;
|
||||
extern Model conv3_bias;
|
||||
extern Model conv3_weight;
|
||||
extern Model fc1_bias;
|
||||
extern Model fc1_weight;
|
||||
extern Model fc2_bias;
|
||||
extern Model fc2_weight;
|
||||
extern Model data;
|
||||
|
||||
|
||||
|
||||
float* modelmym_init(char* model_name);
|
||||
u8 modelmym_free(char* model_name);
|
||||
u8 model_write(char* model_name);
|
||||
u8 model_read(char* model_name, u32 start, u32 end, u32 gap);
|
||||
u8 model_switchdata(char* model_name);
|
||||
void model_dataset(void);
|
||||
u8 model_info(char* model_name);
|
||||
void* model(char* model_name);
|
||||
void model_init(void);
|
||||
u8 sd_read(u32 length, char* model_name,u32 gap);
|
||||
|
||||
|
||||
|
||||
//conv1_bias[a*1] a:0~31
|
||||
//conv1_weight[a*9+b*9+c*3+d*1] a:0~31 b:0 c:0~2 d:0~2
|
||||
//conv2_bias[a*1] a:0~63
|
||||
//conv2_weight[a*288+b*9+c*3+d*1] a:0~63 b:0~31 c:0~2 d:0~2
|
||||
//conv3_bias[a*1] a:0~127
|
||||
//conv3_weight[a*576+b*9+c*3+d*1] a:0~127 b:0~63 c:0~2 d:0~2
|
||||
//fc1_bias[a*1] a:0~127
|
||||
//fc1_weight[a*18432+b*1] a:0~127 b:0~18431
|
||||
//fc2_bias[a*1] a:0~6
|
||||
//fc2_weight[a*128+b*1] a:0~6 b:0~127
|
||||
/*--------------------------------
|
||||
|
||||
for(u8 a; a<?; a++)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--------------------------------*/
|
||||
|
||||
|
||||
//u8 sd_read(u16 length)
|
||||
//{
|
||||
// u8 res=0;
|
||||
|
||||
// char _tmp[11] = "";
|
||||
// float floatArray[32] = {0};
|
||||
// int _larr = 0;
|
||||
|
||||
// printf("\r\nRead file data is:\r\n");
|
||||
// res=f_read(file,fatbuf,length,&br);
|
||||
// if(res) //<2F><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
|
||||
// {
|
||||
// printf("\r\n<><6E><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>:%d\r\n",res);
|
||||
// }else
|
||||
// {
|
||||
// for(int i=0;i<length;i++){
|
||||
// if(fatbuf[i]==0x0d){
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n",i,_tmp);
|
||||
// i++;
|
||||
// float value = atof(_tmp);
|
||||
// memset(_tmp, 0, sizeof(_tmp));
|
||||
// floatArray[_larr++] = value;
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i,value);
|
||||
// }else{
|
||||
// char buffer[2];
|
||||
// sprintf(buffer, "%c", fatbuf[i]);
|
||||
// strcat(_tmp, buffer);
|
||||
// DEBUG_PRINTF("[%d]: %c\r\n",i,fatbuf[i]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// for (int i=0;i<_larr;i++){
|
||||
// DEBUG_PRINTF("floatArray[%d]: %f\r\n",i,floatArray[i]);
|
||||
// }
|
||||
// return res;
|
||||
//}
|
||||
|
||||
//u8 sd_read(u16 length, char* model)
|
||||
//{
|
||||
// float* floatArray = NULL;
|
||||
// if((floatArray = model_init(model)) == NULL)printf("<22><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
|
||||
// u8 res=0;
|
||||
// char _tmp[11] = "";
|
||||
// u32 _larr = 0;
|
||||
// length = length*11;
|
||||
|
||||
// printf("\r\nRead file data is:\r\n");
|
||||
|
||||
// for(int i=0;i<length/512;i++){
|
||||
// res=f_read(file,fatbuf,512,&br);
|
||||
// if(res)printf("\r\n<><6E><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>:%d\r\n",res);
|
||||
// else{
|
||||
// for(int i=0;i<br;i++){
|
||||
// if(fatbuf[i]==0x0d){
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n",i,_tmp);
|
||||
// i++;
|
||||
// float value = atof(_tmp);
|
||||
// memset(_tmp, 0, sizeof(_tmp));
|
||||
// floatArray[_larr++] = value;
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i,value);
|
||||
// }else{
|
||||
// char buffer[2];
|
||||
// sprintf(buffer, "%c", fatbuf[i]);
|
||||
// strcat(_tmp, buffer);
|
||||
// DEBUG_PRINTF("[%d]: %c\r\n",i,fatbuf[i]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// if(length%512){
|
||||
// res=f_read(file,fatbuf,length%512,&br);
|
||||
// if(res)printf("\r\nRead Error:%d\r\n",res);
|
||||
// else{
|
||||
// for(int i=0;i<br;i++){
|
||||
// if(fatbuf[i]==0x0d){
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n",i,_tmp);
|
||||
// i++;
|
||||
// float value = atof(_tmp);
|
||||
// memset(_tmp, 0, sizeof(_tmp));
|
||||
// floatArray[_larr++] = value;
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i,value);
|
||||
// }else{
|
||||
// char buffer[2];
|
||||
// sprintf(buffer, "%c", fatbuf[i]);
|
||||
// strcat(_tmp, buffer);
|
||||
// DEBUG_PRINTF("[%d]: %c\r\n",i,fatbuf[i]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// for (int i=0;i<_larr/10;i++){
|
||||
// printf("floatArray[%d]: %f\r\n",i*10,floatArray[i*10]);
|
||||
// }
|
||||
|
||||
// return res;
|
||||
//}
|
||||
#endif
|
||||
84
PORTING/CNN/debug.c
Normal file
@@ -0,0 +1,84 @@
|
||||
#include "debug.h"
|
||||
#include "led.h"
|
||||
|
||||
|
||||
u8 _DEBUG = 0;
|
||||
|
||||
|
||||
|
||||
void DEBUG(){
|
||||
_DEBUG = !_DEBUG;
|
||||
printf("DEBUG IS: %s",(_DEBUG ? "ON" : "OFF"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
void DEBUG_PRINTF(const char *fmt, ...) {
|
||||
if(_DEBUG){
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vprintf(fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SDRAM_USED(){
|
||||
u16 memused = 0;
|
||||
u8 paddr[20];
|
||||
memused=my_mem_perused(SRAMEX);
|
||||
sprintf((char*)paddr,"%d.%01d%%",memused/10,memused%10);
|
||||
printf("SDRAMʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%s\r\n",paddr);
|
||||
}
|
||||
|
||||
|
||||
TIM_HandleTypeDef TIM3_Handler; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//ͨ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>3<EFBFBD>жϳ<D0B6>ʼ<EFBFBD><CABC>
|
||||
//arr<72><72><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>װֵ<D7B0><D6B5>
|
||||
//psc<73><63>ʱ<EFBFBD><CAB1>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>㷽<EFBFBD><E3B7BD>:Tout=((arr+1)*(psc+1))/Ft us.
|
||||
//Ft=<3D><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C><>λ:Mhz
|
||||
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>Ƕ<EFBFBD>ʱ<EFBFBD><CAB1>3!(<28><>ʱ<EFBFBD><CAB1>3<EFBFBD><33><EFBFBD><EFBFBD>APB1<42>ϣ<EFBFBD>ʱ<EFBFBD><CAB1>ΪHCLK/2)
|
||||
void TIM3_Init(u16 arr,u16 psc)
|
||||
{
|
||||
TIM3_Handler.Instance=TIM3; //ͨ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>3
|
||||
TIM3_Handler.Init.Prescaler=psc; //<2F><>Ƶϵ<C6B5><CFB5>
|
||||
TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
TIM3_Handler.Init.Period=arr; //<2F>Զ<EFBFBD>װ<EFBFBD><D7B0>ֵ
|
||||
TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//ʱ<>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
||||
HAL_TIM_Base_Init(&TIM3_Handler);
|
||||
|
||||
HAL_TIM_Base_Start_IT(&TIM3_Handler); //ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>3<EFBFBD>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>TIM_IT_UPDATE
|
||||
}
|
||||
|
||||
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_TIM_Base_Init()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
if(htim->Instance==TIM3)
|
||||
{
|
||||
__HAL_RCC_TIM3_CLK_ENABLE(); //ʹ<><CAB9>TIM3ʱ<33><CAB1>
|
||||
HAL_NVIC_SetPriority(TIM3_IRQn,1,3); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
|
||||
HAL_NVIC_EnableIRQ(TIM3_IRQn); //<2F><><EFBFBD><EFBFBD>ITM3<4D>ж<EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//<2F><>ʱ<EFBFBD><CAB1>3<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void TIM3_IRQHandler(void)
|
||||
{
|
||||
HAL_TIM_IRQHandler(&TIM3_Handler);
|
||||
}
|
||||
|
||||
|
||||
//<2F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
if(htim==(&TIM3_Handler))
|
||||
{
|
||||
LED1=!LED1; //LED1<44><31>ת
|
||||
}
|
||||
}
|
||||
15
PORTING/CNN/debug.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef _DEBUG_H_
|
||||
#define _DEBUG_H_
|
||||
#include <sys.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "malloc.h"
|
||||
|
||||
void DEBUG(void);
|
||||
void DEBUG_PRINTF(const char *fmt, ...);
|
||||
void SDRAM_USED(void);
|
||||
void TIM3_Init(u16 arr,u16 psc);
|
||||
|
||||
#endif
|
||||
67
PORTING/FATFS/doc/css_e.css
Normal file
@@ -0,0 +1,67 @@
|
||||
* {margin: 0; padding: 0; border-width: 0;}
|
||||
body {margin: 8px; background-color: #e0ffff; font-color: black; font-family: serif; line-height: 133%; max-width: 1024px;}
|
||||
a:link {color: blue;}
|
||||
a:visited {color: darkmagenta;}
|
||||
a:hover {background-color: #a0ffff;}
|
||||
a:active {color: darkmagenta; overflow: hidden; outline:none; position: relative; top: 1px; left: 1px;}
|
||||
abbr {border-width: 1px;}
|
||||
|
||||
p {margin: 0 0 0.3em 1em;}
|
||||
i {margin: 0 0.3em 0 0;}
|
||||
b {margin: 0 0.1em;}
|
||||
em {font-style: normal; font-weight: bold; margin: 0 0.1em;}
|
||||
strong {}
|
||||
pre {border: 1px dashed gray; margin: 0.5em 1em; padding: 0.5em; line-height: 1.2em; font-size: 85%; font-family: "Consolas", "Courier New", monospace; background-color: white;}
|
||||
pre span.c {color: green;}
|
||||
pre span.k {color: blue;}
|
||||
pre span.arg {font-style: italic;}
|
||||
tt {margin: 0 0.2em; font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; }
|
||||
tt.arg {font-style: italic;}
|
||||
ol {margin: 0.5em 2.5em;}
|
||||
ul {margin: 0.5em 2em;}
|
||||
ul ul {margin: 0 2em 0.5em 1em;}
|
||||
dl {margin: 0.5em 1em;}
|
||||
dd {margin: 0 2em;}
|
||||
dt {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace;}
|
||||
dl.par dt {margin: 0.5em 0 0 0 ; font-style: italic; }
|
||||
dl.ret dt {margin: 0.5em 0 0 0 ; font-size: 0.85em; font-family: "Consolas", "Courier New", monospace;}
|
||||
hr {border-width: 1px; margin: 1em;}
|
||||
div.abst {font-family: sans-serif;}
|
||||
div.para {clear: both; font-family: serif;}
|
||||
div.ret a {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; }
|
||||
.equ {text-indent: 0; margin: 1em 2em 1em;}
|
||||
.indent {margin-left: 2em;}
|
||||
.rset {float: right; margin: 0.3em 0 0.5em 0.5em;}
|
||||
.lset {float: left; margin: 0.3em 0.5em 0.5em 0.5em;}
|
||||
ul.flat li {list-style-type: none; margin: 0;}
|
||||
a.imglnk img {border: 1px solid;}
|
||||
.iequ {white-space: nowrap; font-weight: bold;}
|
||||
.clr {clear: both;}
|
||||
.it {font-style: italic;}
|
||||
.mfd {font-size: 0.7em; padding: 0 1px; border: 1px solid; white-space : nowrap}
|
||||
.ral {text-align: right; }
|
||||
.lal {text-align: left; }
|
||||
.cal {text-align: center; }
|
||||
|
||||
h1 {line-height: 1em; font-size: 2em; font-family: sans-serif; padding: 0.3em 0 0.3em;}
|
||||
h2 {font-size: 2em; font-family: sans-serif; background-color: #d8d8FF; padding: 0.5em 0.5em; margin: 0 0 0.5em;}
|
||||
h3 {font-size: 1.5em; font-family: sans-serif; margin: 1.5em 0 0.5em;}
|
||||
div.doc h3 {border-color: #b0d8d8; border-style: solid; border-width: 0px 0px 4px 12px; padding: 4px; margin-top: 3em;}
|
||||
h4 {font-size: 1.2em; font-family: sans-serif; margin: 2em 0 0.2em;}
|
||||
h5 {font-size: 1em; font-family: sans-serif; margin: 1em 0 0em;}
|
||||
p.hdd {float: right; text-align: right; margin-top: 0.5em;}
|
||||
hr.hds {clear: both; margin-bottom: 1em;}
|
||||
kbd {letter-spacing: 0;}
|
||||
small {font-size: 80%;}
|
||||
.indent {margin-left: 2em;}
|
||||
|
||||
/* Tables */
|
||||
table {margin: 0.5em 1em; border-collapse: collapse; border: 2px solid black; }
|
||||
th {background-color: white; border-style: solid; border-width: 1px 1px 2px; border-color: black; padding: 0 3px; vertical-align: top; white-space: nowrap;}
|
||||
td {background-color: white; border: 1px solid black; padding: 0 3px; vertical-align: top; line-height: 1.3em;}
|
||||
table.lst td:first-child {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace;}
|
||||
table.lst2 td {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace;}
|
||||
table caption {font-family: sans-serif; font-weight: bold;}
|
||||
tr.lst3 td { border-width: 2px 1px 1px; }
|
||||
|
||||
p.foot {clear: both; text-indent: 0; margin: 1em 0.5em 1em;}
|
||||
70
PORTING/FATFS/doc/css_j.css
Normal file
@@ -0,0 +1,70 @@
|
||||
@charset "Shift_JIS";
|
||||
/* Common style sheet for Tech Notes */
|
||||
|
||||
* {margin: 0; padding: 0; border-width: 0;}
|
||||
body {margin: 8px; background-color: #e0ffff; font-color: black; font-family:"<22>l<EFBFBD>r <20>o<EFBFBD><6F><EFBFBD><EFBFBD>", serif; line-height: 150%; letter-spacing: 1px; max-width: 1024px;}
|
||||
a:link {color: blue;}
|
||||
a:visited {color: darkmagenta;}
|
||||
a:hover {background-color: #a0ffff;}
|
||||
a:active {color: darkmagenta; overflow: hidden; outline:none; position: relative; top: 1px; left: 1px;}
|
||||
abbr {border-width: 1px;}
|
||||
|
||||
p {text-indent: 0.8em; margin: 0 0 0.3em 0.5em;}
|
||||
i {margin: 0 0.3em 0 0;}
|
||||
b {margin: 0 0.1em;}
|
||||
em {font-style: normal; font-weight: bold; margin: 0 0.1em;}
|
||||
strong {}
|
||||
pre {border: 1px dashed gray; margin: 0.5em 1em; padding: 0.5em; line-height: 1.2em; letter-spacing: 0; font-size: 0.85em; font-family: "Consolas", "Courier New", "<22>l<EFBFBD>r <20>S<EFBFBD>V<EFBFBD>b<EFBFBD>N", monospace; background-color: white;}
|
||||
pre span.c {color: green;}
|
||||
pre span.k {color: blue;}
|
||||
pre span.arg {font-style: italic;}
|
||||
tt {margin: 0 0.2em; letter-spacing: 0; font-size: 0.85em; font-family: "Consolas", "Courier New", "<22>l<EFBFBD>r <20>S<EFBFBD>V<EFBFBD>b<EFBFBD>N", monospace;}
|
||||
tt.arg {font-style: italic;}
|
||||
ol {margin: 0.5em 2.5em;}
|
||||
ul {margin: 0.5em 2em;}
|
||||
ul ul {margin: 0 2em 0.5em 1em;}
|
||||
dl {margin: 0.5em 1em;}
|
||||
dd {margin: 0em 2em;}
|
||||
dt {font-size: 0.85em; font-family: "Consolas", "Courier New", "<22>l<EFBFBD>r <20>S<EFBFBD>V<EFBFBD>b<EFBFBD>N", monospace;}
|
||||
dl.par dt {margin: 0.5em 0 0 0 ; font-style: italic; letter-spacing: 0;}
|
||||
dl.ret dt {margin: 0.5em 0 0 0 ; font-size: 0.85em; font-family: "Consolas", "Courier New", "<22>l<EFBFBD>r <20>S<EFBFBD>V<EFBFBD>b<EFBFBD>N", monospace; letter-spacing: 0; }
|
||||
hr {border-width: 1px; margin: 1em;}
|
||||
div.abst {font-family: "<22>l<EFBFBD>r <20>o<EFBFBD>S<EFBFBD>V<EFBFBD>b<EFBFBD>N",sans-serif;}
|
||||
div.para {clear: both; font-family: "<22>l<EFBFBD>r <20>o<EFBFBD><6F><EFBFBD><EFBFBD>",serif;}
|
||||
div.ret a {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; }
|
||||
.equ {text-indent: 0; margin: 1em 2em 1em;}
|
||||
.indent {margin-left: 2em;}
|
||||
.rset {float: right; margin: 0.3em 0 0.5em 0.5em;}
|
||||
.lset {float: left; margin: 0.3em 0.5em 0.5em 0.5em;}
|
||||
ul.flat li {list-style-type: none; margin: 0;}
|
||||
a.imglnk img {border: 1px solid;}
|
||||
.iequ {white-space: nowrap; font-weight: bold;}
|
||||
.clr {clear: both;}
|
||||
.it {font-style: italic;}
|
||||
.mfd {font-size: 0.7em; padding: 0 1px; border: 1px solid; white-space : nowrap}
|
||||
.ral {text-align: right; }
|
||||
.lal {text-align: left; }
|
||||
.cal {text-align: center; }
|
||||
|
||||
h1 {line-height: 1em; font-size: 2em; font-family: sans-serif; padding: 0.3em 0 0.3em;}
|
||||
h2 {font-size: 2em; font-family: "<22>l<EFBFBD>r <20>o<EFBFBD>S<EFBFBD>V<EFBFBD>b<EFBFBD>N",sans-serif; background-color: #d8d8FF; padding: 0.5em 0.5em; margin: 0 0 0.5em;}
|
||||
h3 {font-size: 1.5em; font-family: "<22>l<EFBFBD>r <20>o<EFBFBD>S<EFBFBD>V<EFBFBD>b<EFBFBD>N",sans-serif; margin: 1.5em 0 0.5em;}
|
||||
div.doc h3 {border-color: #b0d8d8; border-style: solid; border-width: 0px 0px 4px 12px; padding: 4px; margin-top: 3em;}
|
||||
h4 {font-size: 1.2em; font-family: "<22>l<EFBFBD>r <20>o<EFBFBD>S<EFBFBD>V<EFBFBD>b<EFBFBD>N",sans-serif; margin: 2em 0 0.2em;}
|
||||
h5 {font-size: 1em; font-family: "<22>l<EFBFBD>r <20>o<EFBFBD>S<EFBFBD>V<EFBFBD>b<EFBFBD>N",sans-serif; margin: 1em 0 0em;}
|
||||
p.hdd {float: right; text-align: right; margin-top: 0.5em;}
|
||||
hr.hds {clear: both; margin-bottom: 1em;}
|
||||
kbd {letter-spacing: 0;}
|
||||
small {font-size: 80%;}
|
||||
.indent {margin-left: 2em;}
|
||||
|
||||
/* Tables */
|
||||
table {margin: 0.5em 1em; border-collapse: collapse; border: 2px solid black; letter-spacing: 0;}
|
||||
th {background-color: white; border-style: solid; border-width: 1px 1px 2px; border-color: black; padding: 0 3px; vertical-align: top;}
|
||||
td {background-color: white; border: 1px solid black; padding: 0 3px; vertical-align: top; line-height: 1.3em;}
|
||||
table.lst td:first-child {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; white-space: nowrap;}
|
||||
table.lst2 td {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; white-space: nowrap;}
|
||||
table caption {font-family: sans-serif; font-weight: bold;}
|
||||
tr.lst3 td {border-width: 2px 1px 1px; }
|
||||
|
||||
p.foot {clear: both; text-indent: 0; margin: 1em 0.5em 1em;}
|
||||
43
PORTING/FATFS/doc/img/app1.c
Normal file
@@ -0,0 +1,43 @@
|
||||
/*------------------------------------------------------------/
|
||||
/ Open or create a file in append mode
|
||||
/------------------------------------------------------------*/
|
||||
|
||||
FRESULT open_append (
|
||||
FIL* fp, /* [OUT] File object to create */
|
||||
const char* path /* [IN] File name to be opened */
|
||||
)
|
||||
{
|
||||
FRESULT fr;
|
||||
|
||||
/* Opens an existing file. If not exist, creates a new file. */
|
||||
fr = f_open(fp, path, FA_WRITE | FA_OPEN_ALWAYS);
|
||||
if (fr == FR_OK) {
|
||||
/* Seek to end of the file to append data */
|
||||
fr = f_lseek(fp, f_size(fp));
|
||||
if (fr != FR_OK)
|
||||
f_close(fp);
|
||||
}
|
||||
return fr;
|
||||
}
|
||||
|
||||
|
||||
int main (void)
|
||||
{
|
||||
FRESULT fr;
|
||||
FATFS fs;
|
||||
FIL fil;
|
||||
|
||||
/* Open or create a log file and ready to append */
|
||||
f_mount(&fs, "", 0);
|
||||
fr = open_append(&fil, "logfile.txt");
|
||||
if (fr != FR_OK) return 1;
|
||||
|
||||
/* Append a line */
|
||||
f_printf(&fil, "%02u/%02u/%u, %2u:%02u\n", Mday, Mon, Year, Hour, Min);
|
||||
|
||||
/* Close the file */
|
||||
f_close(&fil);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
70
PORTING/FATFS/doc/img/app2.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/*------------------------------------------------------------/
|
||||
/ Remove all contents of a directory
|
||||
/ This function works regardless of _FS_RPATH.
|
||||
/------------------------------------------------------------*/
|
||||
|
||||
|
||||
FRESULT empty_directory (
|
||||
char* path /* Working buffer filled with start directory */
|
||||
)
|
||||
{
|
||||
UINT i, j;
|
||||
FRESULT fr;
|
||||
DIR dir;
|
||||
FILINFO fno;
|
||||
|
||||
#if _USE_LFN
|
||||
fno.lfname = 0; /* Disable LFN output */
|
||||
#endif
|
||||
fr = f_opendir(&dir, path);
|
||||
if (fr == FR_OK) {
|
||||
for (i = 0; path[i]; i++) ;
|
||||
path[i++] = '/';
|
||||
for (;;) {
|
||||
fr = f_readdir(&dir, &fno);
|
||||
if (fr != FR_OK || !fno.fname[0]) break;
|
||||
if (_FS_RPATH && fno.fname[0] == '.') continue;
|
||||
j = 0;
|
||||
do
|
||||
path[i+j] = fno.fname[j];
|
||||
while (fno.fname[j++]);
|
||||
if (fno.fattrib & AM_DIR) {
|
||||
fr = empty_directory(path);
|
||||
if (fr != FR_OK) break;
|
||||
}
|
||||
fr = f_unlink(path);
|
||||
if (fr != FR_OK) break;
|
||||
}
|
||||
path[--i] = '\0';
|
||||
closedir(&dir);
|
||||
}
|
||||
|
||||
return fr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main (void)
|
||||
{
|
||||
FRESULT fr;
|
||||
FATFS fs;
|
||||
char buff[64]; /* Working buffer */
|
||||
|
||||
|
||||
|
||||
f_mount(&fs, "", 0);
|
||||
|
||||
strcpy(buff, "/"); /* Directory to be emptied */
|
||||
fr = empty_directory(buff);
|
||||
|
||||
if (fr) {
|
||||
printf("Function failed. (%u)\n", fr);
|
||||
return fr;
|
||||
} else {
|
||||
printf("All contents in the %s are successfully removed.\n", buff);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
109
PORTING/FATFS/doc/img/app3.c
Normal file
@@ -0,0 +1,109 @@
|
||||
/*----------------------------------------------------------------------/
|
||||
/ Allocate a contiguous area to the file
|
||||
/-----------------------------------------------------------------------/
|
||||
/ This function checks if the file is contiguous with desired size.
|
||||
/ If not, a block of contiguous sectors is allocated to the file.
|
||||
/ If the file has been opened without FA_WRITE flag, it only checks if
|
||||
/ the file is contiguous and returns the resulut.
|
||||
/-----------------------------------------------------------------------/
|
||||
/ This function can work with FatFs R0.09 - R0.11a.
|
||||
/ It is incompatible with R0.12+. Use f_expand function instead.
|
||||
/----------------------------------------------------------------------*/
|
||||
|
||||
/* Declarations of FatFs internal functions accessible from applications.
|
||||
/ This is intended to be used for disk checking/fixing or dirty hacks :-) */
|
||||
DWORD clust2sect (FATFS* fs, DWORD clst);
|
||||
DWORD get_fat (FATFS* fs, DWORD clst);
|
||||
FRESULT put_fat (FATFS* fs, DWORD clst, DWORD val);
|
||||
|
||||
|
||||
DWORD allocate_contiguous_clusters ( /* Returns the first sector in LBA (0:error or not contiguous) */
|
||||
FIL* fp, /* Pointer to the open file object */
|
||||
DWORD len /* Number of bytes to allocate */
|
||||
)
|
||||
{
|
||||
DWORD csz, tcl, ncl, ccl, cl;
|
||||
|
||||
|
||||
if (f_lseek(fp, 0) || !len) /* Check if the given parameters are valid */
|
||||
return 0;
|
||||
csz = 512UL * fp->fs->csize; /* Cluster size in unit of byte (assuming 512 bytes/sector) */
|
||||
tcl = (len + csz - 1) / csz; /* Total number of clusters required */
|
||||
len = tcl * csz; /* Round-up file size to the cluster boundary */
|
||||
|
||||
/* Check if the existing cluster chain is contiguous */
|
||||
if (len == fp->fsize) {
|
||||
ncl = 0; ccl = fp->sclust;
|
||||
do {
|
||||
cl = get_fat(fp->fs, ccl); /* Get the cluster status */
|
||||
if (cl + 1 < 3) return 0; /* Hard error? */
|
||||
if (cl != ccl + 1 && cl < fp->fs->n_fatent) break; /* Not contiguous? */
|
||||
ccl = cl;
|
||||
} while (++ncl < tcl);
|
||||
if (ncl == tcl) /* Is the file contiguous? */
|
||||
return clust2sect(fp->fs, fp->sclust); /* File is contiguous. Return the start sector */
|
||||
}
|
||||
|
||||
/* File is not contiguous */
|
||||
#if _FS_READONLY
|
||||
return 0; /* Exit if in read-only cfg. */
|
||||
#else
|
||||
if (!(fp->flag & FA_WRITE)) return 0; /* Exit if the file object is for read-only */
|
||||
|
||||
if (f_truncate(fp)) return 0; /* Remove the non-contiguous chain */
|
||||
|
||||
/* Find a free contiguous area */
|
||||
ccl = cl = 2; ncl = 0;
|
||||
do {
|
||||
if (cl >= fp->fs->n_fatent) return 0; /* No contiguous area is found. */
|
||||
if (get_fat(fp->fs, cl)) { /* Encounterd a cluster in use */
|
||||
do { /* Skip the block of used clusters */
|
||||
cl++;
|
||||
if (cl >= fp->fs->n_fatent) return 0; /* No contiguous area is found. */
|
||||
} while (get_fat(fp->fs, cl));
|
||||
ccl = cl; ncl = 0;
|
||||
}
|
||||
cl++; ncl++;
|
||||
} while (ncl < tcl);
|
||||
|
||||
/* Create a contiguous cluster chain */
|
||||
fp->fs->last_clust = ccl - 1;
|
||||
if (f_lseek(fp, len)) return 0;
|
||||
|
||||
return clust2sect(fp->fs, fp->sclust); /* Return file start sector */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int main (void)
|
||||
{
|
||||
FRESULT fr;
|
||||
DRESULT dr;
|
||||
FATFS fs;
|
||||
FIL fil;
|
||||
DWORD org;
|
||||
|
||||
|
||||
/* Open or create a file to write */
|
||||
f_mount(&fs, "", 0);
|
||||
fr = f_open(&fil, "fastrec.log", FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
|
||||
if (fr) return 1;
|
||||
|
||||
/* Check if the file is 256MB in size and occupies a contiguous area.
|
||||
/ If not, a contiguous area will be re-allocated to the file. */
|
||||
org = allocate_contiguous_clusters(&fil, 0x10000000);
|
||||
if (!org) {
|
||||
printf("Function failed due to any error or insufficient contiguous area.\n");
|
||||
f_close(&fil);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Now you can read/write the file without file system layer. */
|
||||
...
|
||||
dr = disk_write(fil.fs->drv, Buff, org, 1024); /* Write 512KiB from top of the file */
|
||||
...
|
||||
|
||||
f_close(&fil);
|
||||
return 0;
|
||||
}
|
||||
|
||||
317
PORTING/FATFS/doc/img/app4.c
Normal file
@@ -0,0 +1,317 @@
|
||||
/*----------------------------------------------------------------------/
|
||||
/ Low level disk I/O module function checker
|
||||
/-----------------------------------------------------------------------/
|
||||
/ WARNING: The data on the target drive will be lost!
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "ff.h"
|
||||
#include "diskio.h"
|
||||
|
||||
|
||||
static
|
||||
DWORD pn (
|
||||
DWORD pns
|
||||
)
|
||||
{
|
||||
static DWORD lfsr;
|
||||
UINT n;
|
||||
|
||||
|
||||
if (pns) {
|
||||
lfsr = pns;
|
||||
for (n = 0; n < 32; n++) pn(0);
|
||||
}
|
||||
if (lfsr & 1) {
|
||||
lfsr >>= 1;
|
||||
lfsr ^= 0x80200003;
|
||||
} else {
|
||||
lfsr >>= 1;
|
||||
}
|
||||
return lfsr;
|
||||
}
|
||||
|
||||
|
||||
int test_diskio (
|
||||
BYTE pdrv, /* Physical drive number to be checked (all data on the drive will be lost) */
|
||||
UINT ncyc, /* Number of test cycles */
|
||||
DWORD* buff, /* Pointer to the working buffer */
|
||||
UINT sz_buff /* Size of the working buffer in unit of byte */
|
||||
)
|
||||
{
|
||||
UINT n, cc, ns;
|
||||
DWORD sz_drv, lba, lba2, pns = 1;
|
||||
WORD sz_sect, sz_eblk;
|
||||
BYTE *pbuff = (BYTE*)buff;
|
||||
DSTATUS ds;
|
||||
DRESULT dr;
|
||||
|
||||
|
||||
printf("test_diskio(%u, %u, 0x%08X, 0x%08X)\n", pdrv, ncyc, (UINT)buff, sz_buff);
|
||||
|
||||
if (sz_buff < _MAX_SS + 4) {
|
||||
printf("Insufficient work area to test.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (cc = 1; cc <= ncyc; cc++) {
|
||||
printf("**** Test cycle %u of %u start ****\n", cc, ncyc);
|
||||
|
||||
/* Initialization */
|
||||
printf(" disk_initalize(%u)", pdrv);
|
||||
ds = disk_initialize(pdrv);
|
||||
if (ds & STA_NOINIT) {
|
||||
printf(" - failed.\n");
|
||||
return 2;
|
||||
} else {
|
||||
printf(" - ok.\n");
|
||||
}
|
||||
|
||||
/* Get drive size */
|
||||
printf("**** Get drive size ****\n");
|
||||
printf(" disk_ioctl(%u, GET_SECTOR_COUNT, 0x%08X)", pdrv, (UINT)&sz_drv);
|
||||
sz_drv = 0;
|
||||
dr = disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_drv);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 3;
|
||||
}
|
||||
if (sz_drv < 128) {
|
||||
printf("Failed: Insufficient drive size to test.\n");
|
||||
return 4;
|
||||
}
|
||||
printf(" Number of sectors on the drive %u is %lu.\n", pdrv, sz_drv);
|
||||
|
||||
#if _MAX_SS != _MIN_SS
|
||||
/* Get sector size */
|
||||
printf("**** Get sector size ****\n");
|
||||
printf(" disk_ioctl(%u, GET_SECTOR_SIZE, 0x%X)", pdrv, (UINT)&sz_sect);
|
||||
sz_sect = 0;
|
||||
dr = disk_ioctl(pdrv, GET_SECTOR_SIZE, &sz_sect);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 5;
|
||||
}
|
||||
printf(" Size of sector is %u bytes.\n", sz_sect);
|
||||
#else
|
||||
sz_sect = _MAX_SS;
|
||||
#endif
|
||||
|
||||
/* Get erase block size */
|
||||
printf("**** Get block size ****\n");
|
||||
printf(" disk_ioctl(%u, GET_BLOCK_SIZE, 0x%X)", pdrv, (UINT)&sz_eblk);
|
||||
sz_eblk = 0;
|
||||
dr = disk_ioctl(pdrv, GET_BLOCK_SIZE, &sz_eblk);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
}
|
||||
if (dr == RES_OK || sz_eblk >= 2) {
|
||||
printf(" Size of the erase block is %u sectors.\n", sz_eblk);
|
||||
} else {
|
||||
printf(" Size of the erase block is unknown.\n");
|
||||
}
|
||||
|
||||
/* Single sector write test */
|
||||
printf("**** Single sector write test 1 ****\n");
|
||||
lba = 0;
|
||||
for (n = 0, pn(pns); n < sz_sect; n++) pbuff[n] = (BYTE)pn(0);
|
||||
printf(" disk_write(%u, 0x%X, %lu, 1)", pdrv, (UINT)pbuff, lba);
|
||||
dr = disk_write(pdrv, pbuff, lba, 1);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 6;
|
||||
}
|
||||
printf(" disk_ioctl(%u, CTRL_SYNC, NULL)", pdrv);
|
||||
dr = disk_ioctl(pdrv, CTRL_SYNC, 0);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 7;
|
||||
}
|
||||
memset(pbuff, 0, sz_sect);
|
||||
printf(" disk_read(%u, 0x%X, %lu, 1)", pdrv, (UINT)pbuff, lba);
|
||||
dr = disk_read(pdrv, pbuff, lba, 1);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 8;
|
||||
}
|
||||
for (n = 0, pn(pns); n < sz_sect && pbuff[n] == (BYTE)pn(0); n++) ;
|
||||
if (n == sz_sect) {
|
||||
printf(" Data matched.\n");
|
||||
} else {
|
||||
printf("Failed: Read data differs from the data written.\n");
|
||||
return 10;
|
||||
}
|
||||
pns++;
|
||||
|
||||
/* Multiple sector write test */
|
||||
printf("**** Multiple sector write test ****\n");
|
||||
lba = 1; ns = sz_buff / sz_sect;
|
||||
if (ns > 4) ns = 4;
|
||||
for (n = 0, pn(pns); n < (UINT)(sz_sect * ns); n++) pbuff[n] = (BYTE)pn(0);
|
||||
printf(" disk_write(%u, 0x%X, %lu, %u)", pdrv, (UINT)pbuff, lba, ns);
|
||||
dr = disk_write(pdrv, pbuff, lba, ns);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 11;
|
||||
}
|
||||
printf(" disk_ioctl(%u, CTRL_SYNC, NULL)", pdrv);
|
||||
dr = disk_ioctl(pdrv, CTRL_SYNC, 0);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 12;
|
||||
}
|
||||
memset(pbuff, 0, sz_sect * ns);
|
||||
printf(" disk_read(%u, 0x%X, %lu, %u)", pdrv, (UINT)pbuff, lba, ns);
|
||||
dr = disk_read(pdrv, pbuff, lba, ns);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 13;
|
||||
}
|
||||
for (n = 0, pn(pns); n < (UINT)(sz_sect * ns) && pbuff[n] == (BYTE)pn(0); n++) ;
|
||||
if (n == (UINT)(sz_sect * ns)) {
|
||||
printf(" Data matched.\n");
|
||||
} else {
|
||||
printf("Failed: Read data differs from the data written.\n");
|
||||
return 14;
|
||||
}
|
||||
pns++;
|
||||
|
||||
/* Single sector write test (misaligned memory address) */
|
||||
printf("**** Single sector write test 2 ****\n");
|
||||
lba = 5;
|
||||
for (n = 0, pn(pns); n < sz_sect; n++) pbuff[n+3] = (BYTE)pn(0);
|
||||
printf(" disk_write(%u, 0x%X, %lu, 1)", pdrv, (UINT)(pbuff+3), lba);
|
||||
dr = disk_write(pdrv, pbuff+3, lba, 1);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 15;
|
||||
}
|
||||
printf(" disk_ioctl(%u, CTRL_SYNC, NULL)", pdrv);
|
||||
dr = disk_ioctl(pdrv, CTRL_SYNC, 0);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 16;
|
||||
}
|
||||
memset(pbuff+5, 0, sz_sect);
|
||||
printf(" disk_read(%u, 0x%X, %lu, 1)", pdrv, (UINT)(pbuff+5), lba);
|
||||
dr = disk_read(pdrv, pbuff+5, lba, 1);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 17;
|
||||
}
|
||||
for (n = 0, pn(pns); n < sz_sect && pbuff[n+5] == (BYTE)pn(0); n++) ;
|
||||
if (n == sz_sect) {
|
||||
printf(" Data matched.\n");
|
||||
} else {
|
||||
printf("Failed: Read data differs from the data written.\n");
|
||||
return 18;
|
||||
}
|
||||
pns++;
|
||||
|
||||
/* 4GB barrier test */
|
||||
printf("**** 4GB barrier test ****\n");
|
||||
if (sz_drv >= 128 + 0x80000000 / (sz_sect / 2)) {
|
||||
lba = 6; lba2 = lba + 0x80000000 / (sz_sect / 2);
|
||||
for (n = 0, pn(pns); n < (UINT)(sz_sect * 2); n++) pbuff[n] = (BYTE)pn(0);
|
||||
printf(" disk_write(%u, 0x%X, %lu, 1)", pdrv, (UINT)pbuff, lba);
|
||||
dr = disk_write(pdrv, pbuff, lba, 1);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 19;
|
||||
}
|
||||
printf(" disk_write(%u, 0x%X, %lu, 1)", pdrv, (UINT)(pbuff+sz_sect), lba2);
|
||||
dr = disk_write(pdrv, pbuff+sz_sect, lba2, 1);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 20;
|
||||
}
|
||||
printf(" disk_ioctl(%u, CTRL_SYNC, NULL)", pdrv);
|
||||
dr = disk_ioctl(pdrv, CTRL_SYNC, 0);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 21;
|
||||
}
|
||||
memset(pbuff, 0, sz_sect * 2);
|
||||
printf(" disk_read(%u, 0x%X, %lu, 1)", pdrv, (UINT)pbuff, lba);
|
||||
dr = disk_read(pdrv, pbuff, lba, 1);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 22;
|
||||
}
|
||||
printf(" disk_read(%u, 0x%X, %lu, 1)", pdrv, (UINT)(pbuff+sz_sect), lba2);
|
||||
dr = disk_read(pdrv, pbuff+sz_sect, lba2, 1);
|
||||
if (dr == RES_OK) {
|
||||
printf(" - ok.\n");
|
||||
} else {
|
||||
printf(" - failed.\n");
|
||||
return 23;
|
||||
}
|
||||
for (n = 0, pn(pns); pbuff[n] == (BYTE)pn(0) && n < (UINT)(sz_sect * 2); n++) ;
|
||||
if (n == (UINT)(sz_sect * 2)) {
|
||||
printf(" Data matched.\n");
|
||||
} else {
|
||||
printf("Failed: Read data differs from the data written.\n");
|
||||
return 24;
|
||||
}
|
||||
} else {
|
||||
printf(" Test skipped.\n");
|
||||
}
|
||||
pns++;
|
||||
|
||||
printf("**** Test cycle %u of %u completed ****\n\n", cc, ncyc);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
int rc;
|
||||
DWORD buff[512]; /* 2048 byte working buffer */
|
||||
|
||||
/* Check function/compatibility of the physical drive #0 */
|
||||
rc = test_diskio(0, 3, buff, sizeof buff);
|
||||
if (rc) {
|
||||
printf("Sorry the function/compatibility test failed. (rc=%d)\nFatFs will not work on this disk driver.\n", rc);
|
||||
} else {
|
||||
printf("Congratulations! The disk driver works well.\n");
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
BIN
PORTING/FATFS/doc/img/f1.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
PORTING/FATFS/doc/img/f2.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
PORTING/FATFS/doc/img/f3.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
PORTING/FATFS/doc/img/f4.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
PORTING/FATFS/doc/img/f5.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
PORTING/FATFS/doc/img/f6.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
PORTING/FATFS/doc/img/f7.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
PORTING/FATFS/doc/img/funcs.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
PORTING/FATFS/doc/img/layers.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
PORTING/FATFS/doc/img/layers1.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
PORTING/FATFS/doc/img/layers2.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
PORTING/FATFS/doc/img/layers3.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
PORTING/FATFS/doc/img/mkfatimg.zip
Normal file
BIN
PORTING/FATFS/doc/img/modules.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
PORTING/FATFS/doc/img/rwtest.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
PORTING/FATFS/doc/img/rwtest2.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
PORTING/FATFS/doc/img/rwtest3.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
142
PORTING/FATFS/doc/updates.txt
Normal file
@@ -0,0 +1,142 @@
|
||||
R0.10a, Jan 15,'14
|
||||
Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID)
|
||||
Added a configuration option of minimum sector size. (_MIN_SS)
|
||||
2nd argument of f_rename() can have a drive number and it will be ignored.
|
||||
Fixed f_mount() with forced mount fails when drive number is >= 1.
|
||||
Fixed f_close() invalidates the file object without volume lock.
|
||||
Fixed f_closedir() returns but the volume lock is left acquired.
|
||||
Fixed creation of an entry with LFN fails on too many SFN collisions.
|
||||
|
||||
R0.10, Oct 02,'13
|
||||
Added selection of character encoding on the file. (_STRF_ENCODE)
|
||||
Added f_closedir().
|
||||
Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO)
|
||||
Added forced mount feature with changes of f_mount().
|
||||
Improved behavior of volume auto detection.
|
||||
Improved write throughput of f_puts() and f_printf().
|
||||
Changed argument of f_chdrive(), f_mkfs(), disk_read() and disk_write().
|
||||
Fixed f_write() can be truncated when the file size is close to 4GB.
|
||||
Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect error code.
|
||||
|
||||
R0.09b, Jan 24, 2013
|
||||
Added f_getlabel() and f_setlabel(). (_USE_LABEL = 1)
|
||||
|
||||
R0.09a, Aug 27, 2012
|
||||
Fixed assertion failure due to OS/2 EA on FAT12/16.
|
||||
Changed API rejects null object pointer to avoid crash.
|
||||
Changed option name _FS_SHARE to _FS_LOCK.
|
||||
|
||||
R0.09, Sep 06, 2011
|
||||
f_mkfs() supports multiple partition to finish the multiple partition feature.
|
||||
Added f_fdisk(). (_MULTI_PARTITION = 2)
|
||||
|
||||
R0.08b, Jan 15, 2011
|
||||
Fast seek feature is also applied to f_read() and f_write().
|
||||
f_lseek() reports required table size on creating CLMP.
|
||||
Extended format syntax of f_printf().
|
||||
Ignores duplicated directory separators in given path names.
|
||||
|
||||
R0.08a, Aug 16, 2010
|
||||
Added f_getcwd(). (_FS_RPATH = 2)
|
||||
Added sector erase feature. (_USE_ERASE)
|
||||
Moved file lock semaphore table from fs object to the bss.
|
||||
Fixed a wrong directory entry is created on non-LFN cfg when the given name contains ';'.
|
||||
Fixed f_mkfs() creates wrong FAT32 volume.
|
||||
|
||||
R0.08, May 15, 2010
|
||||
Added a memory configuration option. (_USE_LFN)
|
||||
Added file lock feature. (_FS_SHARE)
|
||||
Added fast seek feature. (_USE_FASTSEEK)
|
||||
Changed some types on the API, XCHAR->TCHAR.
|
||||
Changed fname member in the FILINFO structure on Unicode cfg.
|
||||
String functions support UTF-8 encoding files on Unicode cfg.
|
||||
|
||||
R0.07e, Nov 3, 2009
|
||||
Separated out configuration options from ff.h to ffconf.h.
|
||||
Added a configuration option, _LFN_UNICODE.
|
||||
Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH.
|
||||
Fixed name matching error on the 13 char boundary.
|
||||
Changed f_readdir() to return the SFN with always upper case on non-LFN cfg.
|
||||
|
||||
R0.07c, Jun 21, 2009
|
||||
Fixed f_unlink() may return FR_OK on error.
|
||||
Fixed wrong cache control in f_lseek().
|
||||
Added relative path feature.
|
||||
Added f_chdir().
|
||||
Added f_chdrive().
|
||||
Added proper case conversion to extended characters.
|
||||
|
||||
R0.07a, Apr 14, 2009
|
||||
Separated out OS dependent code on re-entrant configuration.
|
||||
Added multiple sector size support.
|
||||
|
||||
R0.07, Apr 01, 2009
|
||||
Merged Tiny-FatFs into FatFs as a buffer configuration option.
|
||||
Added long file name support.
|
||||
Added multiple code page support.
|
||||
Added re-entrancy for multitask operation.
|
||||
Added auto cluster size selection to f_mkfs().
|
||||
Added rewind option to f_readdir().
|
||||
Changed result code of critical errors.
|
||||
Renamed string functions to avoid name collision.
|
||||
|
||||
R0.06, Apr 01, 2008
|
||||
Added f_forward. (Tiny-FatFs)
|
||||
Added string functions: fgets, fputc, fputs and fprintf.
|
||||
Improved performance of f_lseek on moving to the same or following cluster.
|
||||
|
||||
R0.05a, Feb 03, 2008
|
||||
Added f_truncate.
|
||||
Added f_utime.
|
||||
Fixed off by one error at FAT sub-type determination.
|
||||
Fixed btr in f_read can be mistruncated.
|
||||
Fixed cached sector is left not flushed when create and close without write.
|
||||
|
||||
R0.05, Aug 26, 2007
|
||||
Changed arguments of f_read, f_write.
|
||||
Changed arguments of f_mkfs. (FatFs)
|
||||
Fixed f_mkfs on FAT32 creates incorrect FSInfo. (FatFs)
|
||||
Fixed f_mkdir on FAT32 creates incorrect directory. (FatFs)
|
||||
|
||||
R0.04b, May 05, 2007
|
||||
Added _USE_NTFLAG option.
|
||||
Added FSInfo support.
|
||||
Fixed some problems corresponds to FAT32. (Tiny-FatFs)
|
||||
Fixed DBCS name can result FR_INVALID_NAME.
|
||||
Fixed short seek (<= csize) collapses the file object.
|
||||
|
||||
R0.04a, Apr 01, 2007
|
||||
Supported multiple partitions on a plysical drive. (FatFs)
|
||||
Added minimization level 3.
|
||||
Added a capability of extending file size to f_lseek.
|
||||
Fixed an endian sensitive code in f_mkfs. (FatFs)
|
||||
Fixed a problem corresponds to FAT32 support. (Tiny-FatFs)
|
||||
|
||||
R0.04, Feb 04, 2007
|
||||
Supported multiple drive system. (FatFs)
|
||||
Changed some APIs for multiple drive system.
|
||||
Added f_mkfs. (FatFs)
|
||||
Added _USE_FAT32 option. (Tiny-FatFs)
|
||||
|
||||
R0.03a, Dec 11, 2006
|
||||
Improved cluster scan algolithm to write files fast.
|
||||
Fixed f_mkdir creates incorrect directory on FAT32.
|
||||
|
||||
R0.03, Sep 22, 2006
|
||||
Added f_rename.
|
||||
Changed option _FS_MINIMUM to _FS_MINIMIZE.
|
||||
|
||||
R0.02a, Jun 10, 2006
|
||||
Added a configuration option _FS_MINIMUM.
|
||||
|
||||
R0.02, Jun 01, 2006
|
||||
Added FAT12.
|
||||
Removed unbuffered mode.
|
||||
Fixed a problem on small (<32M) patition.
|
||||
|
||||
R0.01, Apr 29, 2006
|
||||
First release
|
||||
|
||||
R0.00, Feb 26, 2006
|
||||
Prototype (not released)
|
||||
|
||||
406
PORTING/FATFS/exfuns/exfuns.c
Normal file
@@ -0,0 +1,406 @@
|
||||
#include "string.h"
|
||||
#include "exfuns.h"
|
||||
#include "malloc.h"
|
||||
#include "usart.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//FATFS <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/7
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.1
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1
|
||||
//<2F><><EFBFBD><EFBFBD>exf_copy<70><79><EFBFBD><EFBFBD>,<2C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
#define FILE_MAX_TYPE_NUM 7 //<2F><><EFBFBD><EFBFBD>FILE_MAX_TYPE_NUM<55><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define FILE_MAX_SUBT_NUM 4 //<2F><><EFBFBD><EFBFBD>FILE_MAX_SUBT_NUM<55><4D>С<EFBFBD><D0A1>
|
||||
|
||||
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
u8*const FILE_TYPE_TBL[FILE_MAX_TYPE_NUM][FILE_MAX_SUBT_NUM]=
|
||||
{
|
||||
{"BIN"}, //BIN<49>ļ<EFBFBD>
|
||||
{"LRC"}, //LRC<52>ļ<EFBFBD>
|
||||
{"NES","SMS"}, //NES/SMS<4D>ļ<EFBFBD>
|
||||
{"TXT","C","H"}, //<2F>ı<EFBFBD><C4B1>ļ<EFBFBD>
|
||||
{"WAV","MP3","APE","FLAC"},//֧<>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
{"BMP","JPG","JPEG","GIF"},//ͼƬ<CDBC>ļ<EFBFBD>
|
||||
{"AVI"}, //<2F><>Ƶ<EFBFBD>ļ<EFBFBD>
|
||||
};
|
||||
///////////////////////////////<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>,ʹ<><CAB9>malloc<6F><63>ʱ<EFBFBD><CAB1>////////////////////////////////////////////
|
||||
FATFS *fs[_VOLUMES];//<2F><EFBFBD><DFBC><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD>.
|
||||
FIL *file; //<2F>ļ<EFBFBD>1
|
||||
FIL *ftemp; //<2F>ļ<EFBFBD>2.
|
||||
UINT br,bw; //<2F><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
FILINFO fileinfo; //<2F>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
|
||||
DIR dir; //Ŀ¼
|
||||
|
||||
u8 *fatbuf; //SD<53><44><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
//Ϊexfuns<6E><73><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
//1,ʧ<><CAA7>
|
||||
u8 exfuns_init(void)
|
||||
{
|
||||
u8 i;
|
||||
for(i=0;i<_VOLUMES;i++)
|
||||
{
|
||||
fs[i]=(FATFS*)mymalloc(SRAMEX,sizeof(FATFS)); //Ϊ<><CEAA><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
if(!fs[i])break;
|
||||
}
|
||||
file=(FIL*)mymalloc(SRAMEX,sizeof(FIL)); //Ϊfile<6C><65><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
ftemp=(FIL*)mymalloc(SRAMEX,sizeof(FIL)); //Ϊftemp<6D><70><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
fatbuf=(u8*)mymalloc(SRAMEX,512); //Ϊfatbuf<75><66><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
if(i==_VOLUMES&&file&&ftemp&&fatbuf)return 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʧ<EFBFBD><CAA7>,<2C><>ʧ<EFBFBD><CAA7>.
|
||||
else return 1;
|
||||
}
|
||||
|
||||
//<2F><>Сд<D0A1><D0B4>ĸתΪ<D7AA><CEAA>д<EFBFBD><D0B4>ĸ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ֲ<F2B1A3B3><D6B2><EFBFBD>.
|
||||
u8 char_upper(u8 c)
|
||||
{
|
||||
if(c<'A')return c;//<2F><><EFBFBD><EFBFBD>,<2C><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>.
|
||||
if(c>='a')return c-0x20;//<2F><>Ϊ<EFBFBD><CEAA>д.
|
||||
else return c;//<2F><>д,<2C><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//fname:<3A>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0XFF,<2C><>ʾ<EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>С<EFBFBD><D0A1>.
|
||||
u8 f_typetell(u8 *fname)
|
||||
{
|
||||
u8 tbuf[5];
|
||||
u8 *attr='\0';//<2F><><EFBFBD><D7BA>
|
||||
u8 i=0,j;
|
||||
while(i<250)
|
||||
{
|
||||
i++;
|
||||
if(*fname=='\0')break;//ƫ<>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
fname++;
|
||||
}
|
||||
if(i==250)return 0XFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>.
|
||||
for(i=0;i<5;i++)//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><D7BA>
|
||||
{
|
||||
fname--;
|
||||
if(*fname=='.')
|
||||
{
|
||||
fname++;
|
||||
attr=fname;
|
||||
break;
|
||||
}
|
||||
}
|
||||
strcpy((char *)tbuf,(const char*)attr);//copy
|
||||
for(i=0;i<4;i++)tbuf[i]=char_upper(tbuf[i]);//ȫ<><C8AB><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>д
|
||||
for(i=0;i<FILE_MAX_TYPE_NUM;i++) //<2F><><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>
|
||||
{
|
||||
for(j=0;j<FILE_MAX_SUBT_NUM;j++)//<2F><><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>
|
||||
{
|
||||
if(*FILE_TYPE_TBL[i][j]==0)break;//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>û<EFBFBD>пɶԱȵij<C8B5>Ա<EFBFBD><D4B1>.
|
||||
if(strcmp((const char *)FILE_TYPE_TBL[i][j],(const char *)tbuf)==0)//<2F>ҵ<EFBFBD><D2B5><EFBFBD>
|
||||
{
|
||||
return (i<<4)|j;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0XFF;//û<>ҵ<EFBFBD>
|
||||
}
|
||||
|
||||
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//drv:<3A><><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>("0:"/"1:")
|
||||
//total:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>λKB<4B><42>
|
||||
//free:ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>λKB<4B><42>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 exf_getfree(u8 *drv,u32 *total,u32 *free)
|
||||
{
|
||||
FATFS *fs1;
|
||||
u8 res;
|
||||
u32 fre_clust=0, fre_sect=0, tot_sect=0;
|
||||
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
res =(u32)f_getfree((const TCHAR*)drv, (DWORD*)&fre_clust, &fs1);
|
||||
if(res==0)
|
||||
{
|
||||
tot_sect=(fs1->n_fatent-2)*fs1->csize; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fre_sect=fre_clust*fs1->csize; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#if _MAX_SS!=512 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>512<31>ֽ<EFBFBD>,<2C><>ת<EFBFBD><D7AA>Ϊ512<31>ֽ<EFBFBD>
|
||||
tot_sect*=fs1->ssize/512;
|
||||
fre_sect*=fs1->ssize/512;
|
||||
#endif
|
||||
*total=tot_sect>>1; //<2F><>λΪKB
|
||||
*free=fre_sect>>1; //<2F><>λΪKB
|
||||
}
|
||||
return res;
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ע<><D7A2><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С<EFBFBD><D0A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>4GB.
|
||||
//<2F><>psrc<72>ļ<EFBFBD>,copy<70><79>pdst.
|
||||
//fcpymsg,<2C><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD>ʵ<EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʾ
|
||||
// pname:<3A>ļ<EFBFBD>/<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// pct:<3A>ٷֱ<D9B7>
|
||||
// mode:
|
||||
// [0]:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// [1]:<3A><><EFBFBD>°ٷֱ<D9B7>pct
|
||||
// [2]:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// [3~7]:<3A><><EFBFBD><EFBFBD>
|
||||
//psrc,pdst:Դ<>ļ<EFBFBD><C4BC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>
|
||||
//totsize:<3A>ܴ<EFBFBD>С(<28><>totsizeΪ0<CEAA><30>ʱ<EFBFBD><CAB1>,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//cpdsize:<3A>Ѹ<EFBFBD><D1B8><EFBFBD><EFBFBD>˵Ĵ<CBB5>С.
|
||||
//fwmode:<3A>ļ<EFBFBD>д<EFBFBD><D0B4>ģʽ
|
||||
//0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD>
|
||||
//1:<3A><><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>,0XFF,ǿ<><C7BF><EFBFBD>˳<EFBFBD>
|
||||
u8 exf_copy(u8(*fcpymsg)(u8*pname,u8 pct,u8 mode),u8 *psrc,u8 *pdst,u32 totsize,u32 cpdsize,u8 fwmode)
|
||||
{
|
||||
u8 res;
|
||||
u16 br=0;
|
||||
u16 bw=0;
|
||||
FIL *fsrc=0;
|
||||
FIL *fdst=0;
|
||||
u8 *fbuf=0;
|
||||
u8 curpct=0;
|
||||
unsigned long long lcpdsize=cpdsize;
|
||||
fsrc=(FIL*)mymalloc(SRAMEX,sizeof(FIL));//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
fdst=(FIL*)mymalloc(SRAMEX,sizeof(FIL));
|
||||
fbuf=(u8*)mymalloc(SRAMEX,8192);
|
||||
if(fsrc==NULL||fdst==NULL||fbuf==NULL)res=100;//ǰ<><C7B0><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>fatfs
|
||||
else
|
||||
{
|
||||
if(fwmode==0)fwmode=FA_CREATE_NEW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else fwmode=FA_CREATE_ALWAYS; //<2F><><EFBFBD>Ǵ<EFBFBD><C7B4>ڵ<EFBFBD><DAB5>ļ<EFBFBD>
|
||||
|
||||
res=f_open(fsrc,(const TCHAR*)psrc,FA_READ|FA_OPEN_EXISTING); //<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ļ<EFBFBD>
|
||||
if(res==0)res=f_open(fdst,(const TCHAR*)pdst,FA_WRITE|fwmode); //<2F><>һ<EFBFBD><D2BB><EFBFBD>ɹ<F2BFAAB3>,<2C>ſ<EFBFBD>ʼ<EFBFBD>ڶ<F2BFAAB5><DAB6><EFBFBD>
|
||||
if(res==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<F2BFAAB3><C9B9><EFBFBD>
|
||||
{
|
||||
if(totsize==0)//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
totsize=fsrc->obj.objsize;
|
||||
lcpdsize=0;
|
||||
curpct=0;
|
||||
}else curpct=(lcpdsize*100)/totsize; //<2F>õ<EFBFBD><C3B5>°ٷֱ<D9B7>
|
||||
fcpymsg(psrc,curpct,0X02); //<2F><><EFBFBD>°ٷֱ<D9B7>
|
||||
while(res==0)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
{
|
||||
res=f_read(fsrc,fbuf,8192,(UINT*)&br); //Դͷ<D4B4><CDB7><EFBFBD><EFBFBD>512<31>ֽ<EFBFBD>
|
||||
if(res||br==0)break;
|
||||
res=f_write(fdst,fbuf,(UINT)br,(UINT*)&bw); //д<><D0B4>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>
|
||||
lcpdsize+=bw;
|
||||
if(curpct!=(lcpdsize*100)/totsize)//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>°ٷֱ<D9B7>
|
||||
{
|
||||
curpct=(lcpdsize*100)/totsize;
|
||||
if(fcpymsg(psrc,curpct,0X02))//<2F><><EFBFBD>°ٷֱ<D9B7>
|
||||
{
|
||||
res=0XFF;//ǿ<><C7BF><EFBFBD>˳<EFBFBD>
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(res||bw<br)break;
|
||||
}
|
||||
f_close(fsrc);
|
||||
f_close(fdst);
|
||||
}
|
||||
}
|
||||
myfree(SRAMEX,fsrc);//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
myfree(SRAMEX,fdst);
|
||||
myfree(SRAMEX,fbuf);
|
||||
return res;
|
||||
}
|
||||
|
||||
//<2F>õ<EFBFBD>·<EFBFBD><C2B7><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,·<><C2B7><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD>,<2C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
u8* exf_get_src_dname(u8* dpfn)
|
||||
{
|
||||
u16 temp=0;
|
||||
while(*dpfn!=0)
|
||||
{
|
||||
dpfn++;
|
||||
temp++;
|
||||
}
|
||||
if(temp<4)return 0;
|
||||
while((*dpfn!=0x5c)&&(*dpfn!=0x2f))dpfn--; //<><D7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>"\"<22><><EFBFBD><EFBFBD>"/"<22><>
|
||||
return ++dpfn;
|
||||
}
|
||||
//<2F>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC>д<EFBFBD>С
|
||||
//ע<><D7A2><EFBFBD>ļ<EFBFBD><C4BC>д<EFBFBD>С<EFBFBD><D0A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>4GB.
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ļ<EFBFBD><C4BC>д<EFBFBD>СΪ0,<2C><><EFBFBD>߶<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD>,<2C>ļ<EFBFBD><C4BC>д<EFBFBD>С.
|
||||
u32 exf_fdsize(u8 *fdname)
|
||||
{
|
||||
#define MAX_PATHNAME_DEPTH 512+1 //<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 res=0;
|
||||
DIR *fddir=0; //Ŀ¼
|
||||
FILINFO *finfo=0; //<2F>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
|
||||
u8 * pathname=0; //Ŀ<><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
u16 pathlen=0; //Ŀ<><C4BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 fdsize=0;
|
||||
|
||||
fddir=(DIR*)mymalloc(SRAMEX,sizeof(DIR));//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
finfo=(FILINFO*)mymalloc(SRAMEX,sizeof(FILINFO));
|
||||
if(fddir==NULL||finfo==NULL)res=100;
|
||||
if(res==0)
|
||||
{
|
||||
pathname=mymalloc(SRAMEX,MAX_PATHNAME_DEPTH);
|
||||
if(pathname==NULL)res=101;
|
||||
if(res==0)
|
||||
{
|
||||
pathname[0]=0;
|
||||
strcat((char*)pathname,(const char*)fdname); //<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
||||
res=f_opendir(fddir,(const TCHAR*)fdname); //<2F><><EFBFBD><EFBFBD>ԴĿ¼
|
||||
if(res==0)//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF>ɹ<EFBFBD>
|
||||
{
|
||||
while(res==0)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
||||
{
|
||||
res=f_readdir(fddir,finfo); //<2F><>ȡĿ¼<C4BF>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>
|
||||
if(res!=FR_OK||finfo->fname[0]==0)break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ĩβ<C4A9><CEB2>,<2C>˳<EFBFBD>
|
||||
if(finfo->fname[0]=='.')continue; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>Ŀ¼
|
||||
if(finfo->fattrib&0X10)//<2F><><EFBFBD><EFBFBD>Ŀ¼(<28>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,0X20,<2C>鵵<EFBFBD>ļ<EFBFBD>;0X10,<2C><>Ŀ¼;)
|
||||
{
|
||||
pathlen=strlen((const char*)pathname); //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ·<C7B0><C2B7><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
strcat((char*)pathname,(const char*)"/"); //<2F><>б<EFBFBD><D0B1>
|
||||
strcat((char*)pathname,(const char*)finfo->fname); //Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
|
||||
//printf("\r\nsub folder:%s\r\n",pathname); //<2F><>ӡ<EFBFBD><D3A1>Ŀ¼<C4BF><C2BC>
|
||||
fdsize+=exf_fdsize(pathname); //<2F>õ<EFBFBD><C3B5><EFBFBD>Ŀ¼<C4BF><C2BC>С,<2C>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD>
|
||||
pathname[pathlen]=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}else fdsize+=finfo->fsize; //<2F><>Ŀ¼,ֱ<>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С
|
||||
|
||||
}
|
||||
}
|
||||
myfree(SRAMEX,pathname);
|
||||
}
|
||||
}
|
||||
myfree(SRAMEX,fddir);
|
||||
myfree(SRAMEX,finfo);
|
||||
if(res)return 0;
|
||||
else return fdsize;
|
||||
}
|
||||
//<2F>ļ<EFBFBD><C4BC>и<EFBFBD><D0B8><EFBFBD>
|
||||
//ע<><D7A2><EFBFBD>ļ<EFBFBD><C4BC>д<EFBFBD>С<EFBFBD><D0A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>4GB.
|
||||
//<2F><>psrc<72>ļ<EFBFBD><C4BC><EFBFBD>,copy<70><79>pdst<73>ļ<EFBFBD><C4BC><EFBFBD>.
|
||||
//pdst:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"X:"/"X:XX"/"X:XX/XX"֮<><D6AE><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD>Ҫʵ<D2AA><CAB5>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC>д<EFBFBD><D0B4><EFBFBD>
|
||||
//fcpymsg,<2C><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD>ʵ<EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʾ
|
||||
// pname:<3A>ļ<EFBFBD>/<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
// pct:<3A>ٷֱ<D9B7>
|
||||
// mode:
|
||||
// [0]:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// [1]:<3A><><EFBFBD>°ٷֱ<D9B7>pct
|
||||
// [2]:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// [3~7]:<3A><><EFBFBD><EFBFBD>
|
||||
//psrc,pdst:Դ<>ļ<EFBFBD><C4BC>к<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//totsize:<3A>ܴ<EFBFBD>С(<28><>totsizeΪ0<CEAA><30>ʱ<EFBFBD><CAB1>,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//cpdsize:<3A>Ѹ<EFBFBD><D1B8><EFBFBD><EFBFBD>˵Ĵ<CBB5>С.
|
||||
//fwmode:<3A>ļ<EFBFBD>д<EFBFBD><D0B4>ģʽ
|
||||
//0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD>
|
||||
//1:<3A><><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;0XFF,ǿ<><C7BF><EFBFBD>˳<EFBFBD>
|
||||
u8 exf_fdcopy(u8(*fcpymsg)(u8*pname,u8 pct,u8 mode),u8 *psrc,u8 *pdst,u32 *totsize,u32 *cpdsize,u8 fwmode)
|
||||
{
|
||||
#define MAX_PATHNAME_DEPTH 512+1 //<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 res=0;
|
||||
DIR *srcdir=0; //ԴĿ¼
|
||||
DIR *dstdir=0; //ԴĿ¼
|
||||
FILINFO *finfo=0; //<2F>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
|
||||
u8 *fn=0; //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
|
||||
u8 * dstpathname=0; //Ŀ<><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
u8 * srcpathname=0; //Դ<>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
|
||||
u16 dstpathlen=0; //Ŀ<><C4BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 srcpathlen=0; //Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
srcdir=(DIR*)mymalloc(SRAMEX,sizeof(DIR));//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
dstdir=(DIR*)mymalloc(SRAMEX,sizeof(DIR));
|
||||
finfo=(FILINFO*)mymalloc(SRAMEX,sizeof(FILINFO));
|
||||
|
||||
if(srcdir==NULL||dstdir==NULL||finfo==NULL)res=100;
|
||||
if(res==0)
|
||||
{
|
||||
dstpathname=mymalloc(SRAMEX,MAX_PATHNAME_DEPTH);
|
||||
srcpathname=mymalloc(SRAMEX,MAX_PATHNAME_DEPTH);
|
||||
if(dstpathname==NULL||srcpathname==NULL)res=101;
|
||||
if(res==0)
|
||||
{
|
||||
dstpathname[0]=0;
|
||||
srcpathname[0]=0;
|
||||
strcat((char*)srcpathname,(const char*)psrc); //<2F><><EFBFBD><EFBFBD>ԭʼԴ<CABC>ļ<EFBFBD>·<EFBFBD><C2B7>
|
||||
strcat((char*)dstpathname,(const char*)pdst); //<2F><><EFBFBD><EFBFBD>ԭʼĿ<CABC><C4BF><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
|
||||
res=f_opendir(srcdir,(const TCHAR*)psrc); //<2F><><EFBFBD><EFBFBD>ԴĿ¼
|
||||
if(res==0)//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF>ɹ<EFBFBD>
|
||||
{
|
||||
strcat((char*)dstpathname,(const char*)"/");//<2F><><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
|
||||
fn=exf_get_src_dname(psrc);
|
||||
if(fn==0)//<2F><><EFBFBD>꿽<EFBFBD><EABFBD>
|
||||
{
|
||||
dstpathlen=strlen((const char*)dstpathname);
|
||||
dstpathname[dstpathlen]=psrc[0]; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
||||
dstpathname[dstpathlen+1]=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}else strcat((char*)dstpathname,(const char*)fn);//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
fcpymsg(fn,0,0X04);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=f_mkdir((const TCHAR*)dstpathname);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>,<2C>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھʹ<DABE><CDB4><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD>.
|
||||
if(res==FR_EXIST)res=0;
|
||||
while(res==0)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
||||
{
|
||||
res=f_readdir(srcdir,finfo); //<2F><>ȡĿ¼<C4BF>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>
|
||||
if(res!=FR_OK||finfo->fname[0]==0)break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ĩβ<C4A9><CEB2>,<2C>˳<EFBFBD>
|
||||
if(finfo->fname[0]=='.')continue; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>Ŀ¼
|
||||
fn=(u8*)finfo->fname; //<2F>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
dstpathlen=strlen((const char*)dstpathname); //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰĿ<C7B0><C4BF>·<EFBFBD><C2B7><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
srcpathlen=strlen((const char*)srcpathname); //<2F>õ<EFBFBD>Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
strcat((char*)srcpathname,(const char*)"/");//Դ·<D4B4><C2B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
|
||||
if(finfo->fattrib&0X10)//<2F><><EFBFBD><EFBFBD>Ŀ¼(<28>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,0X20,<2C>鵵<EFBFBD>ļ<EFBFBD>;0X10,<2C><>Ŀ¼;)
|
||||
{
|
||||
strcat((char*)srcpathname,(const char*)fn); //Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
|
||||
res=exf_fdcopy(fcpymsg,srcpathname,dstpathname,totsize,cpdsize,fwmode); //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
}else //<2F><>Ŀ¼
|
||||
{
|
||||
strcat((char*)dstpathname,(const char*)"/");//Ŀ<><C4BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
|
||||
strcat((char*)dstpathname,(const char*)fn); //Ŀ<><C4BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
strcat((char*)srcpathname,(const char*)fn); //Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
fcpymsg(fn,0,0X01);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
res=exf_copy(fcpymsg,srcpathname,dstpathname,*totsize,*cpdsize,fwmode);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
*cpdsize+=finfo->fsize;//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С
|
||||
}
|
||||
srcpathname[srcpathlen]=0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dstpathname[dstpathlen]=0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
myfree(SRAMEX,dstpathname);
|
||||
myfree(SRAMEX,srcpathname);
|
||||
}
|
||||
}
|
||||
myfree(SRAMEX,srcdir);
|
||||
myfree(SRAMEX,dstdir);
|
||||
myfree(SRAMEX,finfo);
|
||||
return res;
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
66
PORTING/FATFS/exfuns/exfuns.h
Normal file
@@ -0,0 +1,66 @@
|
||||
#ifndef __EXFUNS_H
|
||||
#define __EXFUNS_H
|
||||
#include <sys.h>
|
||||
#include "ff.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//FATFS <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/7
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.1
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1
|
||||
//<2F><><EFBFBD><EFBFBD>exf_copy<70><79><EFBFBD><EFBFBD>,<2C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern FATFS *fs[_VOLUMES];
|
||||
extern FIL *file;
|
||||
extern FIL *ftemp;
|
||||
extern UINT br,bw;
|
||||
extern FILINFO fileinfo;
|
||||
extern DIR dir;
|
||||
extern u8 *fatbuf;//SD<53><44><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
|
||||
//f_typetell<6C><6C><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
|
||||
//<2F><><EFBFBD>ݱ<EFBFBD>FILE_TYPE_TBL<42><4C><EFBFBD><EFBFBD>.<2E><>exfuns.c<><63><EFBFBD>涨<EFBFBD><E6B6A8>
|
||||
#define T_BIN 0X00 //bin<69>ļ<EFBFBD>
|
||||
#define T_LRC 0X10 //lrc<72>ļ<EFBFBD>
|
||||
|
||||
#define T_NES 0X20 //nes<65>ļ<EFBFBD>
|
||||
#define T_SMS 0X21 //sms<6D>ļ<EFBFBD>
|
||||
|
||||
#define T_TEXT 0X30 //.txt<78>ļ<EFBFBD>
|
||||
#define T_C 0X31 //.c<>ļ<EFBFBD>
|
||||
#define T_H 0X32 //.h<>ļ<EFBFBD>
|
||||
|
||||
#define T_WAV 0X40 //WAV<41>ļ<EFBFBD>
|
||||
#define T_MP3 0X41 //MP3<50>ļ<EFBFBD>
|
||||
#define T_APE 0X42 //APE<50>ļ<EFBFBD>
|
||||
#define T_FLAC 0X43 //FLAC<41>ļ<EFBFBD>
|
||||
|
||||
#define T_BMP 0X50 //bmp<6D>ļ<EFBFBD>
|
||||
#define T_JPG 0X51 //jpg<70>ļ<EFBFBD>
|
||||
#define T_JPEG 0X52 //jpeg<65>ļ<EFBFBD>
|
||||
#define T_GIF 0X53 //gif<69>ļ<EFBFBD>
|
||||
|
||||
#define T_AVI 0X60 //avi<76>ļ<EFBFBD>
|
||||
|
||||
|
||||
u8 exfuns_init(void); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
u8 f_typetell(u8 *fname); //ʶ<><CAB6><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 exf_getfree(u8 *drv,u32 *total,u32 *free); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 exf_fdsize(u8 *fdname); //<2F>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC>д<EFBFBD>С
|
||||
u8* exf_get_src_dname(u8* dpfn);
|
||||
u8 exf_copy(u8(*fcpymsg)(u8*pname,u8 pct,u8 mode),u8 *psrc,u8 *pdst,u32 totsize,u32 cpdsize,u8 fwmode); //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 exf_fdcopy(u8(*fcpymsg)(u8*pname,u8 pct,u8 mode),u8 *psrc,u8 *pdst,u32 *totsize,u32 *cpdsize,u8 fwmode);//<2F>ļ<EFBFBD><C4BC>и<EFBFBD><D0B8><EFBFBD>
|
||||
#endif
|
||||
|
||||
|
||||
21
PORTING/FATFS/src/00readme.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
FatFs Module Source Files R0.12
|
||||
|
||||
|
||||
FILES
|
||||
|
||||
00readme.txt This file.
|
||||
history.txt Revision history.
|
||||
ffconf.h Configuration file for FatFs module.
|
||||
ff.h Common include file for FatFs and application module.
|
||||
ff.c FatFs module.
|
||||
diskio.h Common include file for FatFs and disk I/O module.
|
||||
diskio.c An example of glue function to attach existing disk I/O module to FatFs.
|
||||
integer.h Integer type definitions for FatFs.
|
||||
option Optional external functions.
|
||||
|
||||
|
||||
Low level disk I/O module is not included in this archive because the FatFs
|
||||
module is only a generic file system layer and not depend on any specific
|
||||
storage device. You have to provide a low level disk I/O module that written
|
||||
to control the target storage device.
|
||||
|
||||
233
PORTING/FATFS/src/diskio.c
Normal file
@@ -0,0 +1,233 @@
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* Low level disk I/O module skeleton for FatFs (C)ChaN, 2016 */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* If a working storage control module is available, it should be */
|
||||
/* attached to the FatFs via a glue function rather than modifying it. */
|
||||
/* This is an example of glue functions to attach various exsisting */
|
||||
/* storage control modules to the FatFs module with a defined API. */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
#include "diskio.h" /* FatFs lower layer API */
|
||||
#include "malloc.h"
|
||||
|
||||
#include "sdio_sdcard.h"
|
||||
#include "w25qxx.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//FATFS<46>ײ<EFBFBD>(diskio) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/7
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define SD_CARD 0 //SD<53><44>,<2C><><EFBFBD><EFBFBD>Ϊ0
|
||||
#define EX_FLASH 1 //<2F>ⲿspi flash,<2C><><EFBFBD><EFBFBD>Ϊ1
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>W25Q256
|
||||
//ǰ25M<35>ֽڸ<D6BD>fatfs<66><73>,25M<35>ֽں<D6BD>,<2C><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ֿ<EFBFBD>,<2C>ֿ<EFBFBD>ռ<EFBFBD><D5BC>6.01M. ʣ<>ಿ<EFBFBD><E0B2BF>,<2C><><EFBFBD>ͻ<EFBFBD><CDBB>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
#define FLASH_SECTOR_SIZE 512
|
||||
#define FLASH_SECTOR_COUNT 1024*25*2 //W25Q256,ǰ25M<35>ֽڸ<D6BD>FATFSռ<53><D5BC>
|
||||
#define FLASH_BLOCK_SIZE 8 //ÿ<><C3BF>BLOCK<43><4B>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>״̬
|
||||
DSTATUS disk_status (
|
||||
BYTE pdrv /* Physical drive nmuber to identify the drive */
|
||||
)
|
||||
{
|
||||
return RES_OK;
|
||||
}
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DSTATUS disk_initialize (
|
||||
BYTE pdrv /* Physical drive nmuber to identify the drive */
|
||||
)
|
||||
{
|
||||
u8 res=0;
|
||||
switch(pdrv)
|
||||
{
|
||||
case SD_CARD: //SD<53><44>
|
||||
res=SD_Init(); //SD<53><44><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
break;
|
||||
case EX_FLASH: //<2F>ⲿflash
|
||||
W25QXX_Init(); //W25QXX<58><58>ʼ<EFBFBD><CABC>
|
||||
break;
|
||||
default:
|
||||
res=1;
|
||||
}
|
||||
if(res)return STA_NOINIT;
|
||||
else return 0; //<2F><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//pdrv:<3A><><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>0~9
|
||||
//*buff:<3A><><EFBFBD>ݽ<EFBFBD><DDBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
//sector:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
//count:<3A><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DRESULT disk_read (
|
||||
BYTE pdrv, /* Physical drive nmuber to identify the drive */
|
||||
BYTE *buff, /* Data buffer to store read data */
|
||||
DWORD sector, /* Sector address in LBA */
|
||||
UINT count /* Number of sectors to read */
|
||||
)
|
||||
{
|
||||
u8 res=0;
|
||||
if (!count)return RES_PARERR;//count<6E><74><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>ز<F2B7B5BB><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
switch(pdrv)
|
||||
{
|
||||
case SD_CARD://SD<53><44>
|
||||
res=SD_ReadDisk(buff,sector,count);
|
||||
while(res)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
SD_Init(); //<2F><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>SD<53><44>
|
||||
res=SD_ReadDisk(buff,sector,count);
|
||||
//printf("sd rd error:%d\r\n",res);
|
||||
}
|
||||
break;
|
||||
case EX_FLASH://<2F>ⲿflash
|
||||
for(;count>0;count--)
|
||||
{
|
||||
W25QXX_Read(buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE);
|
||||
sector++;
|
||||
buff+=FLASH_SECTOR_SIZE;
|
||||
}
|
||||
res=0;
|
||||
break;
|
||||
default:
|
||||
res=1;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>SPI_SD_driver.c<>ķ<EFBFBD><C4B7><EFBFBD>ֵת<D6B5><D7AA>ff.c<>ķ<EFBFBD><C4B7><EFBFBD>ֵ
|
||||
if(res==0x00)return RES_OK;
|
||||
else return RES_ERROR;
|
||||
}
|
||||
//д<><D0B4><EFBFBD><EFBFBD>
|
||||
//pdrv:<3A><><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>0~9
|
||||
//*buff:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
//sector:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
//count:<3A><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DRESULT disk_write (
|
||||
BYTE pdrv, /* Physical drive nmuber to identify the drive */
|
||||
const BYTE *buff, /* Data to be written */
|
||||
DWORD sector, /* Sector address in LBA */
|
||||
UINT count /* Number of sectors to write */
|
||||
)
|
||||
{
|
||||
u8 res=0;
|
||||
if (!count)return RES_PARERR;//count<6E><74><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>ز<F2B7B5BB><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
switch(pdrv)
|
||||
{
|
||||
case SD_CARD://SD<53><44>
|
||||
res=SD_WriteDisk((u8*)buff,sector,count);
|
||||
while(res)//д<><D0B4><EFBFBD><EFBFBD>
|
||||
{
|
||||
SD_Init(); //<2F><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>SD<53><44>
|
||||
res=SD_WriteDisk((u8*)buff,sector,count);
|
||||
//printf("sd wr error:%d\r\n",res);
|
||||
}
|
||||
break;
|
||||
case EX_FLASH://<2F>ⲿflash
|
||||
for(;count>0;count--)
|
||||
{
|
||||
W25QXX_Write((u8*)buff,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE);
|
||||
sector++;
|
||||
buff+=FLASH_SECTOR_SIZE;
|
||||
}
|
||||
res=0;
|
||||
break;
|
||||
default:
|
||||
res=1;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>SPI_SD_driver.c<>ķ<EFBFBD><C4B7><EFBFBD>ֵת<D6B5><D7AA>ff.c<>ķ<EFBFBD><C4B7><EFBFBD>ֵ
|
||||
if(res == 0x00)return RES_OK;
|
||||
else return RES_ERROR;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>
|
||||
//pdrv:<3A><><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>0~9
|
||||
//ctrl:<3A><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
|
||||
//*buff:<3A><><EFBFBD><EFBFBD>/<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
DRESULT disk_ioctl (
|
||||
BYTE pdrv, /* Physical drive nmuber (0..) */
|
||||
BYTE cmd, /* Control code */
|
||||
void *buff /* Buffer to send/receive control data */
|
||||
)
|
||||
{
|
||||
DRESULT res;
|
||||
if(pdrv==SD_CARD)//SD<53><44>
|
||||
{
|
||||
switch(cmd)
|
||||
{
|
||||
case CTRL_SYNC:
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_SECTOR_SIZE:
|
||||
*(DWORD*)buff = 512;
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_BLOCK_SIZE:
|
||||
*(WORD*)buff = SDCardInfo.CardBlockSize;
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_SECTOR_COUNT:
|
||||
*(DWORD*)buff = SDCardInfo.CardCapacity/512;
|
||||
res = RES_OK;
|
||||
break;
|
||||
default:
|
||||
res = RES_PARERR;
|
||||
break;
|
||||
}
|
||||
}else if(pdrv==EX_FLASH) //<2F>ⲿFLASH
|
||||
{
|
||||
switch(cmd)
|
||||
{
|
||||
case CTRL_SYNC:
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_SECTOR_SIZE:
|
||||
*(WORD*)buff = FLASH_SECTOR_SIZE;
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_BLOCK_SIZE:
|
||||
*(WORD*)buff = FLASH_BLOCK_SIZE;
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_SECTOR_COUNT:
|
||||
*(DWORD*)buff = FLASH_SECTOR_COUNT;
|
||||
res = RES_OK;
|
||||
break;
|
||||
default:
|
||||
res = RES_PARERR;
|
||||
break;
|
||||
}
|
||||
}else res=RES_ERROR;//<2F><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>֧<EFBFBD><D6A7>
|
||||
return res;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//User defined function to give a current time to fatfs module */
|
||||
//31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */
|
||||
//15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */
|
||||
DWORD get_fattime (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
void *ff_memalloc (UINT size)
|
||||
{
|
||||
return (void*)mymalloc(SRAMEX,size);
|
||||
}
|
||||
//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
void ff_memfree (void* mf)
|
||||
{
|
||||
myfree(SRAMEX,mf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
80
PORTING/FATFS/src/diskio.h
Normal file
@@ -0,0 +1,80 @@
|
||||
/*-----------------------------------------------------------------------/
|
||||
/ Low level disk interface modlue include file (C)ChaN, 2014 /
|
||||
/-----------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _DISKIO_DEFINED
|
||||
#define _DISKIO_DEFINED
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "integer.h"
|
||||
|
||||
|
||||
/* Status of Disk Functions */
|
||||
typedef BYTE DSTATUS;
|
||||
|
||||
/* Results of Disk Functions */
|
||||
typedef enum {
|
||||
RES_OK = 0, /* 0: Successful */
|
||||
RES_ERROR, /* 1: R/W Error */
|
||||
RES_WRPRT, /* 2: Write Protected */
|
||||
RES_NOTRDY, /* 3: Not Ready */
|
||||
RES_PARERR /* 4: Invalid Parameter */
|
||||
} DRESULT;
|
||||
|
||||
|
||||
/*---------------------------------------*/
|
||||
/* Prototypes for disk control functions */
|
||||
|
||||
|
||||
DSTATUS disk_initialize (BYTE pdrv);
|
||||
DSTATUS disk_status (BYTE pdrv);
|
||||
DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
|
||||
DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
|
||||
DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
|
||||
|
||||
|
||||
/* Disk Status Bits (DSTATUS) */
|
||||
|
||||
#define STA_NOINIT 0x01 /* Drive not initialized */
|
||||
#define STA_NODISK 0x02 /* No medium in the drive */
|
||||
#define STA_PROTECT 0x04 /* Write protected */
|
||||
|
||||
|
||||
/* Command code for disk_ioctrl fucntion */
|
||||
|
||||
/* Generic command (Used by FatFs) */
|
||||
#define CTRL_SYNC 0 /* Complete pending write process (needed at _FS_READONLY == 0) */
|
||||
#define GET_SECTOR_COUNT 1 /* Get media size (needed at _USE_MKFS == 1) */
|
||||
#define GET_SECTOR_SIZE 2 /* Get sector size (needed at _MAX_SS != _MIN_SS) */
|
||||
#define GET_BLOCK_SIZE 3 /* Get erase block size (needed at _USE_MKFS == 1) */
|
||||
#define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at _USE_TRIM == 1) */
|
||||
|
||||
/* Generic command (Not used by FatFs) */
|
||||
#define CTRL_POWER 5 /* Get/Set power status */
|
||||
#define CTRL_LOCK 6 /* Lock/Unlock media removal */
|
||||
#define CTRL_EJECT 7 /* Eject media */
|
||||
#define CTRL_FORMAT 8 /* Create physical format on the media */
|
||||
|
||||
/* MMC/SDC specific ioctl command */
|
||||
#define MMC_GET_TYPE 10 /* Get card type */
|
||||
#define MMC_GET_CSD 11 /* Get CSD */
|
||||
#define MMC_GET_CID 12 /* Get CID */
|
||||
#define MMC_GET_OCR 13 /* Get OCR */
|
||||
#define MMC_GET_SDSTAT 14 /* Get SD status */
|
||||
#define ISDIO_READ 55 /* Read data form SD iSDIO register */
|
||||
#define ISDIO_WRITE 56 /* Write data to SD iSDIO register */
|
||||
#define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */
|
||||
|
||||
/* ATA/CF specific ioctl command */
|
||||
#define ATA_GET_REV 20 /* Get F/W revision */
|
||||
#define ATA_GET_MODEL 21 /* Get model name */
|
||||
#define ATA_GET_SN 22 /* Get serial number */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
5790
PORTING/FATFS/src/ff.c
Normal file
366
PORTING/FATFS/src/ff.h
Normal file
@@ -0,0 +1,366 @@
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ FatFs - FAT file system module include R0.12 (C)ChaN, 2016
|
||||
/----------------------------------------------------------------------------/
|
||||
/ FatFs module is a free software that opened under license policy of
|
||||
/ following conditions.
|
||||
/
|
||||
/ Copyright (C) 2016, ChaN, all right reserved.
|
||||
/
|
||||
/ 1. Redistributions of source code must retain the above copyright notice,
|
||||
/ this condition and the following disclaimer.
|
||||
/
|
||||
/ This software is provided by the copyright holder and contributors "AS IS"
|
||||
/ and any warranties related to this software are DISCLAIMED.
|
||||
/ The copyright owner or contributors be NOT LIABLE for any damages caused
|
||||
/ by use of this software.
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#ifndef _FATFS
|
||||
#define _FATFS 88100 /* Revision ID */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "integer.h" /* Basic integer types */
|
||||
#include "ffconf.h" /* FatFs configuration options */
|
||||
#if _FATFS != _FFCONF
|
||||
#error Wrong configuration file (ffconf.h).
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Definitions of volume management */
|
||||
|
||||
#if _MULTI_PARTITION /* Multiple partition configuration */
|
||||
typedef struct {
|
||||
BYTE pd; /* Physical drive number */
|
||||
BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
|
||||
} PARTITION;
|
||||
extern PARTITION VolToPart[]; /* Volume - Partition resolution table */
|
||||
#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive number */
|
||||
#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */
|
||||
|
||||
#else /* Single partition configuration */
|
||||
#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */
|
||||
#define LD2PT(vol) 0 /* Find first valid partition or in SFD */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Type of path name strings on FatFs API */
|
||||
|
||||
#if _LFN_UNICODE /* Unicode string */
|
||||
#if _USE_LFN == 0
|
||||
#error _LFN_UNICODE must be 0 at non-LFN cfg.
|
||||
#endif
|
||||
#ifndef _INC_TCHAR
|
||||
typedef WCHAR TCHAR;
|
||||
#define _T(x) L ## x
|
||||
#define _TEXT(x) L ## x
|
||||
#endif
|
||||
|
||||
#else /* ANSI/OEM string */
|
||||
#ifndef _INC_TCHAR
|
||||
typedef char TCHAR;
|
||||
#define _T(x) x
|
||||
#define _TEXT(x) x
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* File system object structure (FATFS) */
|
||||
|
||||
typedef struct {
|
||||
BYTE fs_type; /* File system type (0:N/A) */
|
||||
BYTE drv; /* Physical drive number */
|
||||
BYTE n_fats; /* Number of FATs (1 or 2) */
|
||||
BYTE wflag; /* win[] flag (b0:dirty) */
|
||||
BYTE fsi_flag; /* FSINFO flags (b7:disabled, b0:dirty) */
|
||||
WORD id; /* File system mount ID */
|
||||
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
||||
WORD csize; /* Cluster size [sectors] */
|
||||
#if _MAX_SS != _MIN_SS
|
||||
WORD ssize; /* Sector size (512, 1024, 2048 or 4096) */
|
||||
#endif
|
||||
#if _FS_EXFAT
|
||||
BYTE* dirbuf; /* Directory entry block scratchpad buffer */
|
||||
#endif
|
||||
#if _FS_REENTRANT
|
||||
_SYNC_t sobj; /* Identifier of sync object */
|
||||
#endif
|
||||
#if !_FS_READONLY
|
||||
DWORD last_clst; /* Last allocated cluster */
|
||||
DWORD free_clst; /* Number of free clusters */
|
||||
#endif
|
||||
#if _FS_RPATH != 0
|
||||
DWORD cdir; /* Current directory start cluster (0:root) */
|
||||
#if _FS_EXFAT
|
||||
DWORD cdc_scl; /* Containing directory start cluster (invalid when cdir is 0) */
|
||||
DWORD cdc_size; /* b31-b8:Size of containing directory, b7-b0: Chain status */
|
||||
DWORD cdc_ofs; /* Offset in the containing directory (invalid when cdir is 0) */
|
||||
#endif
|
||||
#endif
|
||||
DWORD n_fatent; /* Number of FAT entries (number of clusters + 2) */
|
||||
DWORD fsize; /* Size of an FAT [sectors] */
|
||||
DWORD volbase; /* Volume base sector */
|
||||
DWORD fatbase; /* FAT base sector */
|
||||
DWORD dirbase; /* Root directory base sector/cluster */
|
||||
DWORD database; /* Data base sector */
|
||||
DWORD winsect; /* Current sector appearing in the win[] */
|
||||
BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */
|
||||
} FATFS;
|
||||
|
||||
|
||||
|
||||
/* Type of file size variables and object identifier */
|
||||
|
||||
#if _FS_EXFAT
|
||||
#if _USE_LFN == 0
|
||||
#error LFN must be enabled when enable exFAT
|
||||
#endif
|
||||
typedef QWORD FSIZE_t;
|
||||
#else
|
||||
typedef DWORD FSIZE_t;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Object ID and allocation information (_FDID) */
|
||||
|
||||
typedef struct {
|
||||
FATFS* fs; /* Pointer to the owner file system object */
|
||||
WORD id; /* Owner file system mount ID */
|
||||
BYTE attr; /* Object attribute */
|
||||
BYTE stat; /* Object chain status (b1-0: =0:not contiguous, =2:contiguous (no data on FAT), =3:got flagmented, b2:sub-directory stretched) */
|
||||
DWORD sclust; /* Object start cluster (0:no cluster or root directory) */
|
||||
FSIZE_t objsize; /* Object size (valid when sclust != 0) */
|
||||
#if _FS_EXFAT
|
||||
DWORD n_cont; /* Size of coutiguous part, clusters - 1 (valid when stat == 3) */
|
||||
DWORD c_scl; /* Containing directory start cluster (valid when sclust != 0) */
|
||||
DWORD c_size; /* b31-b8:Size of containing directory, b7-b0: Chain status (valid when c_scl != 0) */
|
||||
DWORD c_ofs; /* Offset in the containing directory (valid when sclust != 0) */
|
||||
#endif
|
||||
#if _FS_LOCK != 0
|
||||
UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */
|
||||
#endif
|
||||
} _FDID;
|
||||
|
||||
|
||||
|
||||
/* File object structure (FIL) */
|
||||
|
||||
typedef struct {
|
||||
_FDID obj; /* Object identifier */
|
||||
BYTE flag; /* File status flags */
|
||||
BYTE err; /* Abort flag (error code) */
|
||||
FSIZE_t fptr; /* File read/write pointer (Zeroed on file open) */
|
||||
DWORD clust; /* Current cluster of fpter (not valid when fprt is 0) */
|
||||
DWORD sect; /* Sector number appearing in buf[] (0:invalid) */
|
||||
#if !_FS_READONLY
|
||||
DWORD dir_sect; /* Sector number containing the directory entry */
|
||||
BYTE* dir_ptr; /* Pointer to the directory entry in the win[] */
|
||||
#endif
|
||||
#if _USE_FASTSEEK
|
||||
DWORD* cltbl; /* Pointer to the cluster link map table (Nulled on file open) */
|
||||
#endif
|
||||
#if !_FS_TINY
|
||||
BYTE buf[_MAX_SS]; /* File private data read/write window */
|
||||
#endif
|
||||
} FIL;
|
||||
|
||||
|
||||
|
||||
/* Directory object structure (DIR) */
|
||||
|
||||
typedef struct {
|
||||
_FDID obj; /* Object identifier */
|
||||
DWORD dptr; /* Current read/write offset */
|
||||
DWORD clust; /* Current cluster */
|
||||
DWORD sect; /* Current sector */
|
||||
BYTE* dir; /* Pointer to the directory item in the win[] */
|
||||
BYTE* fn; /* Pointer to the SFN (in/out) {body[8],ext[3],status[1]} */
|
||||
#if _USE_LFN != 0
|
||||
DWORD blk_ofs; /* Offset of current entry block being processed (0xFFFFFFFF:Invalid) */
|
||||
WCHAR* lfn; /* Pointer to the LFN working buffer */
|
||||
#endif
|
||||
#if _USE_FIND
|
||||
const TCHAR* pat; /* Pointer to the name matching pattern */
|
||||
#endif
|
||||
} DIR;
|
||||
|
||||
|
||||
|
||||
/* File information structure (FILINFO) */
|
||||
|
||||
typedef struct {
|
||||
FSIZE_t fsize; /* File size */
|
||||
WORD fdate; /* Modified date */
|
||||
WORD ftime; /* Modified time */
|
||||
BYTE fattrib; /* File attribute */
|
||||
#if _USE_LFN != 0
|
||||
TCHAR altname[13]; /* Altenative file name */
|
||||
TCHAR fname[_MAX_LFN + 1]; /* Primary file name */
|
||||
#else
|
||||
TCHAR fname[13]; /* File name */
|
||||
#endif
|
||||
} FILINFO;
|
||||
|
||||
|
||||
|
||||
/* File function return code (FRESULT) */
|
||||
|
||||
typedef enum {
|
||||
FR_OK = 0, /* (0) Succeeded */
|
||||
FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
||||
FR_INT_ERR, /* (2) Assertion failed */
|
||||
FR_NOT_READY, /* (3) The physical drive cannot work */
|
||||
FR_NO_FILE, /* (4) Could not find the file */
|
||||
FR_NO_PATH, /* (5) Could not find the path */
|
||||
FR_INVALID_NAME, /* (6) The path name format is invalid */
|
||||
FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
||||
FR_EXIST, /* (8) Access denied due to prohibited access */
|
||||
FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
||||
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
||||
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
||||
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
||||
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
||||
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
|
||||
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
||||
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_LOCK */
|
||||
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||
} FRESULT;
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* FatFs module application interface */
|
||||
|
||||
FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a file */
|
||||
FRESULT f_close (FIL* fp); /* Close an open file object */
|
||||
FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from a file */
|
||||
FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to a file */
|
||||
FRESULT f_lseek (FIL* fp, FSIZE_t ofs); /* Move file pointer of a file object */
|
||||
FRESULT f_truncate (FIL* fp); /* Truncate file */
|
||||
FRESULT f_sync (FIL* fp); /* Flush cached data of a writing file */
|
||||
FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */
|
||||
FRESULT f_closedir (DIR* dp); /* Close an open directory */
|
||||
FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */
|
||||
FRESULT f_findfirst (DIR* dp, FILINFO* fno, const TCHAR* path, const TCHAR* pattern); /* Find first file */
|
||||
FRESULT f_findnext (DIR* dp, FILINFO* fno); /* Find next file */
|
||||
FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */
|
||||
FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */
|
||||
FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */
|
||||
FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */
|
||||
FRESULT f_chmod (const TCHAR* path, BYTE attr, BYTE mask); /* Change attribute of the file/dir */
|
||||
FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change timestamp of the file/dir */
|
||||
FRESULT f_chdir (const TCHAR* path); /* Change current directory */
|
||||
FRESULT f_chdrive (const TCHAR* path); /* Change current drive */
|
||||
FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */
|
||||
FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */
|
||||
FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */
|
||||
FRESULT f_setlabel (const TCHAR* label); /* Set volume label */
|
||||
FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */
|
||||
FRESULT f_expand (FIL* fp, FSIZE_t szf, BYTE opt); /* Allocate a contiguous block to the file */
|
||||
FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */
|
||||
FRESULT f_mkfs (const TCHAR* path, BYTE sfd, UINT au); /* Create a file system on the volume */
|
||||
FRESULT f_fdisk (BYTE pdrv, const DWORD szt[], void* work); /* Divide a physical drive into some partitions */
|
||||
int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */
|
||||
int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */
|
||||
int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */
|
||||
TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */
|
||||
|
||||
#define f_eof(fp) ((int)((fp)->fptr == (fp)->obj.objsize))
|
||||
#define f_error(fp) ((fp)->err)
|
||||
#define f_tell(fp) ((fp)->fptr)
|
||||
#define f_size(fp) ((fp)->obj.objsize)
|
||||
#define f_rewind(fp) f_lseek((fp), 0)
|
||||
#define f_rewinddir(dp) f_readdir((dp), 0)
|
||||
|
||||
#ifndef EOF
|
||||
#define EOF (-1)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* Additional user defined functions */
|
||||
|
||||
/* RTC function */
|
||||
#if !_FS_READONLY && !_FS_NORTC
|
||||
DWORD get_fattime (void);
|
||||
#endif
|
||||
|
||||
/* Unicode support functions */
|
||||
#if _USE_LFN != 0 /* Unicode - OEM code conversion */
|
||||
WCHAR ff_convert (WCHAR chr, UINT dir); /* OEM-Unicode bidirectional conversion */
|
||||
WCHAR ff_wtoupper (WCHAR chr); /* Unicode upper-case conversion */
|
||||
#if _USE_LFN == 3 /* Memory functions */
|
||||
void* ff_memalloc (UINT msize); /* Allocate memory block */
|
||||
void ff_memfree (void* mblock); /* Free memory block */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Sync functions */
|
||||
#if _FS_REENTRANT
|
||||
int ff_cre_syncobj (BYTE vol, _SYNC_t* sobj); /* Create a sync object */
|
||||
int ff_req_grant (_SYNC_t sobj); /* Lock sync object */
|
||||
void ff_rel_grant (_SYNC_t sobj); /* Unlock sync object */
|
||||
int ff_del_syncobj (_SYNC_t sobj); /* Delete a sync object */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* Flags and offset address */
|
||||
|
||||
|
||||
/* File access control and file status flags (FIL.flag) */
|
||||
|
||||
#define FA_READ 0x01
|
||||
#define FA_WRITE 0x02
|
||||
#define FA_OPEN_EXISTING 0x00
|
||||
#define FA_CREATE_NEW 0x04
|
||||
#define FA_CREATE_ALWAYS 0x08
|
||||
#define FA_OPEN_ALWAYS 0x10
|
||||
#define _FA_MODIFIED 0x20
|
||||
#define _FA_DIRTY 0x40
|
||||
|
||||
|
||||
/* FAT sub type (FATFS.fs_type) */
|
||||
|
||||
#define FS_FAT12 1
|
||||
#define FS_FAT16 2
|
||||
#define FS_FAT32 3
|
||||
#define FS_EXFAT 4
|
||||
|
||||
|
||||
/* File attribute bits for directory entry */
|
||||
|
||||
#define AM_RDO 0x01 /* Read only */
|
||||
#define AM_HID 0x02 /* Hidden */
|
||||
#define AM_SYS 0x04 /* System */
|
||||
#define AM_VOL 0x08 /* Volume label */
|
||||
#define AM_LFN 0x0F /* LFN entry */
|
||||
#define AM_DIR 0x10 /* Directory */
|
||||
#define AM_ARC 0x20 /* Archive */
|
||||
#define AM_MASK 0x3F /* Mask of defined bits */
|
||||
|
||||
|
||||
/* Fast seek controls */
|
||||
#define CREATE_LINKMAP ((FSIZE_t)0 - 1)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _FATFS */
|
||||
266
PORTING/FATFS/src/ffconf.h
Normal file
@@ -0,0 +1,266 @@
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ FatFs - FAT file system module configuration file R0.12 (C)ChaN, 2016
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FFCONF 88100 /* Revision ID */
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Function Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FS_READONLY 0
|
||||
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
||||
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
||||
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
|
||||
/ and optional writing functions as well. */
|
||||
|
||||
|
||||
#define _FS_MINIMIZE 0
|
||||
/* This option defines minimization level to remove some basic API functions.
|
||||
/
|
||||
/ 0: All basic functions are enabled.
|
||||
/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
|
||||
/ are removed.
|
||||
/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
|
||||
/ 3: f_lseek() function is removed in addition to 2. */
|
||||
|
||||
|
||||
#define _USE_STRFUNC 1
|
||||
/* This option switches string functions, f_gets(), f_putc(), f_puts() and
|
||||
/ f_printf().
|
||||
/
|
||||
/ 0: Disable string functions.
|
||||
/ 1: Enable without LF-CRLF conversion.
|
||||
/ 2: Enable with LF-CRLF conversion. */
|
||||
|
||||
|
||||
#define _USE_FIND 0
|
||||
/* This option switches filtered directory read functions, f_findfirst() and
|
||||
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
|
||||
|
||||
|
||||
#define _USE_MKFS 1
|
||||
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_FASTSEEK 1
|
||||
/* This option switches fast seek function. (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_EXPAND 0
|
||||
/* This option switches f_expand function. (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_CHMOD 0
|
||||
/* This option switches attribute manipulation functions, f_chmod() and f_utime().
|
||||
/ (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */
|
||||
|
||||
|
||||
#define _USE_LABEL 1
|
||||
/* This option switches volume label functions, f_getlabel() and f_setlabel().
|
||||
/ (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_FORWARD 0
|
||||
/* This option switches f_forward() function. (0:Disable or 1:Enable)
|
||||
/ To enable it, also _FS_TINY need to be 1. */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Locale and Namespace Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _CODE_PAGE 936 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GBK<42><4B><EFBFBD><EFBFBD>
|
||||
/* This option specifies the OEM code page to be used on the target system.
|
||||
/ Incorrect setting of the code page can cause a file open failure.
|
||||
/
|
||||
/ 1 - ASCII (No extended character. Non-LFN cfg. only)
|
||||
/ 437 - U.S.
|
||||
/ 720 - Arabic
|
||||
/ 737 - Greek
|
||||
/ 771 - KBL
|
||||
/ 775 - Baltic
|
||||
/ 850 - Latin 1
|
||||
/ 852 - Latin 2
|
||||
/ 855 - Cyrillic
|
||||
/ 857 - Turkish
|
||||
/ 860 - Portuguese
|
||||
/ 861 - Icelandic
|
||||
/ 862 - Hebrew
|
||||
/ 863 - Canadian French
|
||||
/ 864 - Arabic
|
||||
/ 865 - Nordic
|
||||
/ 866 - Russian
|
||||
/ 869 - Greek 2
|
||||
/ 932 - Japanese (DBCS)
|
||||
/ 936 - Simplified Chinese (DBCS)
|
||||
/ 949 - Korean (DBCS)
|
||||
/ 950 - Traditional Chinese (DBCS)
|
||||
*/
|
||||
|
||||
|
||||
#define _USE_LFN 3
|
||||
#define _MAX_LFN 255
|
||||
/* The _USE_LFN switches the support of long file name (LFN).
|
||||
/
|
||||
/ 0: Disable support of LFN. _MAX_LFN has no effect.
|
||||
/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
|
||||
/ 2: Enable LFN with dynamic working buffer on the STACK.
|
||||
/ 3: Enable LFN with dynamic working buffer on the HEAP.
|
||||
/
|
||||
/ To enable the LFN, Unicode handling functions (option/unicode.c) must be added
|
||||
/ to the project. The working buffer occupies (_MAX_LFN + 1) * 2 bytes and
|
||||
/ additional 608 bytes at exFAT enabled. _MAX_LFN can be in range from 12 to 255.
|
||||
/ It should be set 255 to support full featured LFN operations.
|
||||
/ When use stack for the working buffer, take care on stack overflow. When use heap
|
||||
/ memory for the working buffer, memory management functions, ff_memalloc() and
|
||||
/ ff_memfree(), must be added to the project. */
|
||||
|
||||
|
||||
#define _LFN_UNICODE 0
|
||||
/* This option switches character encoding on the API. (0:ANSI/OEM or 1:Unicode)
|
||||
/ To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1.
|
||||
/ This option also affects behavior of string I/O functions. */
|
||||
|
||||
|
||||
#define _STRF_ENCODE 0
|
||||
/* When _LFN_UNICODE == 1, this option selects the character encoding on the file to
|
||||
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
|
||||
/
|
||||
/ 0: ANSI/OEM
|
||||
/ 1: UTF-16LE
|
||||
/ 2: UTF-16BE
|
||||
/ 3: UTF-8
|
||||
/
|
||||
/ This option has no effect when _LFN_UNICODE == 0. */
|
||||
|
||||
|
||||
#define _FS_RPATH 0
|
||||
/* This option configures support of relative path.
|
||||
/
|
||||
/ 0: Disable relative path and remove related functions.
|
||||
/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
|
||||
/ 2: f_getcwd() function is available in addition to 1.
|
||||
*/
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Drive/Volume Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _VOLUMES 3 //֧<><D6A7>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/* Number of volumes (logical drives) to be used. */
|
||||
|
||||
|
||||
#define _STR_VOLUME_ID 0
|
||||
#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
|
||||
/* _STR_VOLUME_ID switches string support of volume ID.
|
||||
/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
|
||||
/ number in the path name. _VOLUME_STRS defines the drive ID strings for each
|
||||
/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for
|
||||
/ the drive ID strings are: A-Z and 0-9. */
|
||||
|
||||
|
||||
#define _MULTI_PARTITION 0
|
||||
/* This option switches support of multi-partition on a physical drive.
|
||||
/ By default (0), each logical drive number is bound to the same physical drive
|
||||
/ number and only an FAT volume found on the physical drive will be mounted.
|
||||
/ When multi-partition is enabled (1), each logical drive number can be bound to
|
||||
/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
|
||||
/ funciton will be available. */
|
||||
|
||||
|
||||
#define _MIN_SS 512
|
||||
#define _MAX_SS 512
|
||||
/* These options configure the range of sector size to be supported. (512, 1024,
|
||||
/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and
|
||||
/ harddisk. But a larger value may be required for on-board flash memory and some
|
||||
/ type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured
|
||||
/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the
|
||||
/ disk_ioctl() function. */
|
||||
|
||||
|
||||
#define _USE_TRIM 0
|
||||
/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable)
|
||||
/ To enable Trim function, also CTRL_TRIM command should be implemented to the
|
||||
/ disk_ioctl() function. */
|
||||
|
||||
|
||||
#define _FS_NOFSINFO 0
|
||||
/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
|
||||
/ option, and f_getfree() function at first time after volume mount will force
|
||||
/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
|
||||
/
|
||||
/ bit0=0: Use free cluster count in the FSINFO if available.
|
||||
/ bit0=1: Do not trust free cluster count in the FSINFO.
|
||||
/ bit1=0: Use last allocated cluster number in the FSINFO if available.
|
||||
/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ System Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FS_TINY 0
|
||||
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
||||
/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS bytes.
|
||||
/ Instead of private sector buffer eliminated from the file object, common sector
|
||||
/ buffer in the file system object (FATFS) is used for the file data transfer. */
|
||||
|
||||
|
||||
#define _FS_EXFAT 1
|
||||
/* This option switches support of exFAT file system in addition to the traditional
|
||||
/ FAT file system. (0:Disable or 1:Enable) To enable exFAT, also LFN must be enabled.
|
||||
/ Note that enabling exFAT discards C89 compatibility. */
|
||||
|
||||
|
||||
#define _FS_NORTC 0
|
||||
#define _NORTC_MON 3
|
||||
#define _NORTC_MDAY 1
|
||||
#define _NORTC_YEAR 2016
|
||||
/* The option _FS_NORTC switches timestamp functiton. If the system does not have
|
||||
/ any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable
|
||||
/ the timestamp function. All objects modified by FatFs will have a fixed timestamp
|
||||
/ defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR in local time.
|
||||
/ To enable timestamp function (_FS_NORTC = 0), get_fattime() function need to be
|
||||
/ added to the project to get current time form real-time clock. _NORTC_MON,
|
||||
/ _NORTC_MDAY and _NORTC_YEAR have no effect.
|
||||
/ These options have no effect at read-only configuration (_FS_READONLY = 1). */
|
||||
|
||||
|
||||
#define _FS_LOCK 0
|
||||
/* The option _FS_LOCK switches file lock function to control duplicated file open
|
||||
/ and illegal operation to open objects. This option must be 0 when _FS_READONLY
|
||||
/ is 1.
|
||||
/
|
||||
/ 0: Disable file lock function. To avoid volume corruption, application program
|
||||
/ should avoid illegal open, remove and rename to the open objects.
|
||||
/ >0: Enable file lock function. The value defines how many files/sub-directories
|
||||
/ can be opened simultaneously under file lock control. Note that the file
|
||||
/ lock control is independent of re-entrancy. */
|
||||
|
||||
|
||||
#define _FS_REENTRANT 0
|
||||
#define _FS_TIMEOUT 1000
|
||||
#define _SYNC_t HANDLE
|
||||
/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
|
||||
/ module itself. Note that regardless of this option, file access to different
|
||||
/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
|
||||
/ and f_fdisk() function, are always not re-entrant. Only file/directory access
|
||||
/ to the same volume is under control of this function.
|
||||
/
|
||||
/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect.
|
||||
/ 1: Enable re-entrancy. Also user provided synchronization handlers,
|
||||
/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
|
||||
/ function, must be added to the project. Samples are available in
|
||||
/ option/syscall.c.
|
||||
/
|
||||
/ The _FS_TIMEOUT defines timeout period in unit of time tick.
|
||||
/ The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
|
||||
/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be
|
||||
/ included somewhere in the scope of ff.c. */
|
||||
|
||||
|
||||
/*--- End of configuration options ---*/
|
||||
38
PORTING/FATFS/src/integer.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/*-------------------------------------------*/
|
||||
/* Integer type definitions for FatFs module */
|
||||
/*-------------------------------------------*/
|
||||
|
||||
#ifndef _FF_INTEGER
|
||||
#define _FF_INTEGER
|
||||
|
||||
#ifdef _WIN32 /* FatFs development platform */
|
||||
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
typedef unsigned __int64 QWORD;
|
||||
|
||||
|
||||
#else /* Embedded platform */
|
||||
|
||||
/* These types MUST be 16-bit or 32-bit */
|
||||
typedef int INT;
|
||||
typedef unsigned int UINT;
|
||||
|
||||
/* This type MUST be 8-bit */
|
||||
typedef unsigned char BYTE;
|
||||
|
||||
/* These types MUST be 16-bit */
|
||||
typedef short SHORT;
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned short WCHAR;
|
||||
|
||||
/* These types MUST be 32-bit */
|
||||
typedef long LONG;
|
||||
typedef unsigned long DWORD;
|
||||
|
||||
/* This type MUST be 64-bit (Remove this for C89 compatibility) */
|
||||
typedef unsigned long long QWORD;
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
3870
PORTING/FATFS/src/option/cc932.c
Normal file
11045
PORTING/FATFS/src/option/cc936.c
Normal file
8674
PORTING/FATFS/src/option/cc949.c
Normal file
6900
PORTING/FATFS/src/option/cc950.c
Normal file
388
PORTING/FATFS/src/option/ccsbcs.c
Normal file
@@ -0,0 +1,388 @@
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Unicode - Local code bidirectional converter (C)ChaN, 2015 */
|
||||
/* (SBCS code pages) */
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* 437 U.S.
|
||||
/ 720 Arabic
|
||||
/ 737 Greek
|
||||
/ 771 KBL
|
||||
/ 775 Baltic
|
||||
/ 850 Latin 1
|
||||
/ 852 Latin 2
|
||||
/ 855 Cyrillic
|
||||
/ 857 Turkish
|
||||
/ 860 Portuguese
|
||||
/ 861 Icelandic
|
||||
/ 862 Hebrew
|
||||
/ 863 Canadian French
|
||||
/ 864 Arabic
|
||||
/ 865 Nordic
|
||||
/ 866 Russian
|
||||
/ 869 Greek 2
|
||||
*/
|
||||
|
||||
#include "../ff.h"
|
||||
|
||||
|
||||
#if _CODE_PAGE == 437
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 720
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP720(0x80-0xFF) to Unicode conversion table */
|
||||
0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9, 0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627,
|
||||
0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A,
|
||||
0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 737
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP737(0x80-0xFF) to Unicode conversion table */
|
||||
0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
|
||||
0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
|
||||
0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E,
|
||||
0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 771
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP771(0x80-0xFF) to Unicode conversion table */
|
||||
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x0104, 0x0105, 0x010C, 0x010D,
|
||||
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
|
||||
0x0118, 0x0119, 0x0116, 0x0117, 0x012E, 0x012F, 0x0160, 0x0161, 0x0172, 0x0173, 0x016A, 0x016B, 0x017D, 0x017E, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 775
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP775(0x80-0xFF) to Unicode conversion table */
|
||||
0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5,
|
||||
0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4,
|
||||
0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D,
|
||||
0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019,
|
||||
0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 850
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP850(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
|
||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||
0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
|
||||
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
|
||||
0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 852
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP852(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106,
|
||||
0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D,
|
||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||
0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580,
|
||||
0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4,
|
||||
0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 855
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP855(0x80-0xFF) to Unicode conversion table */
|
||||
0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408,
|
||||
0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A,
|
||||
0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||
0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580,
|
||||
0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116,
|
||||
0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 857
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP857(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5,
|
||||
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F,
|
||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||
0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
|
||||
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000, 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4,
|
||||
0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 860
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP860(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2,
|
||||
0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3,
|
||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 861
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP861(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5,
|
||||
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192,
|
||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 862
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP862(0x80-0xFF) to Unicode conversion table */
|
||||
0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
|
||||
0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 863
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP863(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x2017, 0x00C0,
|
||||
0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192,
|
||||
0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00BB, 0x00B3, 0x00AF, 0x00CE, 0x3210, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2219,
|
||||
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 864
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP864(0x80-0xFF) to Unicode conversion table */
|
||||
0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518,
|
||||
0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, 0x00BB, 0xFEF7, 0xFEF8, 0x0000, 0x0000, 0xFEFB, 0xFEFC, 0x0000,
|
||||
0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0x0000, 0x20AC, 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5,
|
||||
0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F,
|
||||
0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9,
|
||||
0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9,
|
||||
0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1,
|
||||
0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0, 0x0000
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 865
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP865(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||
0x00C5, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192,
|
||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 866
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP866(0x80-0xFF) to Unicode conversion table */
|
||||
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
|
||||
0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#elif _CODE_PAGE == 869
|
||||
#define _TBLDEF 1
|
||||
static
|
||||
const WCHAR Tbl[] = { /* CP869(0x80-0xFF) to Unicode conversion table */
|
||||
0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x0386, 0x00B7, 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389,
|
||||
0x038A, 0x03AA, 0x038C, 0x00B7, 0x00B7, 0x038E, 0x03AB, 0x00A9, 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF,
|
||||
0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB,
|
||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510,
|
||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0A30, 0x03A1, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3,
|
||||
0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580,
|
||||
0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384,
|
||||
0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if !_TBLDEF || !_USE_LFN
|
||||
#error This file is not needed at current configuration. Remove from the project.
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
WCHAR ff_convert ( /* Converted character, Returns zero on error */
|
||||
WCHAR chr, /* Character code to be converted */
|
||||
UINT dir /* 0: Unicode to OEM code, 1: OEM code to Unicode */
|
||||
)
|
||||
{
|
||||
WCHAR c;
|
||||
|
||||
|
||||
if (chr < 0x80) { /* ASCII */
|
||||
c = chr;
|
||||
|
||||
} else {
|
||||
if (dir) { /* OEM code to Unicode */
|
||||
c = (chr >= 0x100) ? 0 : Tbl[chr - 0x80];
|
||||
|
||||
} else { /* Unicode to OEM code */
|
||||
for (c = 0; c < 0x80; c++) {
|
||||
if (chr == Tbl[c]) break;
|
||||
}
|
||||
c = (c + 0x80) & 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
|
||||
WCHAR ff_wtoupper ( /* Returns upper converted character */
|
||||
WCHAR chr /* Unicode character to be upper converted (BMP only) */
|
||||
)
|
||||
{
|
||||
/* Compressed upper conversion table */
|
||||
static const WCHAR cvt1[] = { /* U+0000 - U+0FFF */
|
||||
/* Basic Latin */
|
||||
0x0061,0x031A,
|
||||
/* Latin-1 Supplement */
|
||||
0x00E0,0x0317, 0x00F8,0x0307, 0x00FF,0x0001,0x0178,
|
||||
/* Latin Extended-A */
|
||||
0x0100,0x0130, 0x0132,0x0106, 0x0139,0x0110, 0x014A,0x012E, 0x0179,0x0106,
|
||||
/* Latin Extended-B */
|
||||
0x0180,0x004D,0x0243,0x0181,0x0182,0x0182,0x0184,0x0184,0x0186,0x0187,0x0187,0x0189,0x018A,0x018B,0x018B,0x018D,0x018E,0x018F,0x0190,0x0191,0x0191,0x0193,0x0194,0x01F6,0x0196,0x0197,0x0198,0x0198,0x023D,0x019B,0x019C,0x019D,0x0220,0x019F,0x01A0,0x01A0,0x01A2,0x01A2,0x01A4,0x01A4,0x01A6,0x01A7,0x01A7,0x01A9,0x01AA,0x01AB,0x01AC,0x01AC,0x01AE,0x01AF,0x01AF,0x01B1,0x01B2,0x01B3,0x01B3,0x01B5,0x01B5,0x01B7,0x01B8,0x01B8,0x01BA,0x01BB,0x01BC,0x01BC,0x01BE,0x01F7,0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C5,0x01C4,0x01C7,0x01C8,0x01C7,0x01CA,0x01CB,0x01CA,
|
||||
0x01CD,0x0110, 0x01DD,0x0001,0x018E, 0x01DE,0x0112, 0x01F3,0x0003,0x01F1,0x01F4,0x01F4, 0x01F8,0x0128,
|
||||
0x0222,0x0112, 0x023A,0x0009,0x2C65,0x023B,0x023B,0x023D,0x2C66,0x023F,0x0240,0x0241,0x0241, 0x0246,0x010A,
|
||||
/* IPA Extensions */
|
||||
0x0253,0x0040,0x0181,0x0186,0x0255,0x0189,0x018A,0x0258,0x018F,0x025A,0x0190,0x025C,0x025D,0x025E,0x025F,0x0193,0x0261,0x0262,0x0194,0x0264,0x0265,0x0266,0x0267,0x0197,0x0196,0x026A,0x2C62,0x026C,0x026D,0x026E,0x019C,0x0270,0x0271,0x019D,0x0273,0x0274,0x019F,0x0276,0x0277,0x0278,0x0279,0x027A,0x027B,0x027C,0x2C64,0x027E,0x027F,0x01A6,0x0281,0x0282,0x01A9,0x0284,0x0285,0x0286,0x0287,0x01AE,0x0244,0x01B1,0x01B2,0x0245,0x028D,0x028E,0x028F,0x0290,0x0291,0x01B7,
|
||||
/* Greek, Coptic */
|
||||
0x037B,0x0003,0x03FD,0x03FE,0x03FF, 0x03AC,0x0004,0x0386,0x0388,0x0389,0x038A, 0x03B1,0x0311,
|
||||
0x03C2,0x0002,0x03A3,0x03A3, 0x03C4,0x0308, 0x03CC,0x0003,0x038C,0x038E,0x038F, 0x03D8,0x0118,
|
||||
0x03F2,0x000A,0x03F9,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7,0x03F7,0x03F9,0x03FA,0x03FA,
|
||||
/* Cyrillic */
|
||||
0x0430,0x0320, 0x0450,0x0710, 0x0460,0x0122, 0x048A,0x0136, 0x04C1,0x010E, 0x04CF,0x0001,0x04C0, 0x04D0,0x0144,
|
||||
/* Armenian */
|
||||
0x0561,0x0426,
|
||||
|
||||
0x0000
|
||||
};
|
||||
static const WCHAR cvt2[] = { /* U+1000 - U+FFFF */
|
||||
/* Phonetic Extensions */
|
||||
0x1D7D,0x0001,0x2C63,
|
||||
/* Latin Extended Additional */
|
||||
0x1E00,0x0196, 0x1EA0,0x015A,
|
||||
/* Greek Extended */
|
||||
0x1F00,0x0608, 0x1F10,0x0606, 0x1F20,0x0608, 0x1F30,0x0608, 0x1F40,0x0606,
|
||||
0x1F51,0x0007,0x1F59,0x1F52,0x1F5B,0x1F54,0x1F5D,0x1F56,0x1F5F, 0x1F60,0x0608,
|
||||
0x1F70,0x000E,0x1FBA,0x1FBB,0x1FC8,0x1FC9,0x1FCA,0x1FCB,0x1FDA,0x1FDB,0x1FF8,0x1FF9,0x1FEA,0x1FEB,0x1FFA,0x1FFB,
|
||||
0x1F80,0x0608, 0x1F90,0x0608, 0x1FA0,0x0608, 0x1FB0,0x0004,0x1FB8,0x1FB9,0x1FB2,0x1FBC,
|
||||
0x1FCC,0x0001,0x1FC3, 0x1FD0,0x0602, 0x1FE0,0x0602, 0x1FE5,0x0001,0x1FEC, 0x1FF2,0x0001,0x1FFC,
|
||||
/* Letterlike Symbols */
|
||||
0x214E,0x0001,0x2132,
|
||||
/* Number forms */
|
||||
0x2170,0x0210, 0x2184,0x0001,0x2183,
|
||||
/* Enclosed Alphanumerics */
|
||||
0x24D0,0x051A, 0x2C30,0x042F,
|
||||
/* Latin Extended-C */
|
||||
0x2C60,0x0102, 0x2C67,0x0106, 0x2C75,0x0102,
|
||||
/* Coptic */
|
||||
0x2C80,0x0164,
|
||||
/* Georgian Supplement */
|
||||
0x2D00,0x0826,
|
||||
/* Full-width */
|
||||
0xFF41,0x031A,
|
||||
|
||||
0x0000
|
||||
};
|
||||
const WCHAR *p;
|
||||
WCHAR bc, nc, cmd;
|
||||
|
||||
|
||||
p = chr < 0x1000 ? cvt1 : cvt2;
|
||||
for (;;) {
|
||||
bc = *p++; /* Get block base */
|
||||
if (!bc || chr < bc) break;
|
||||
nc = *p++; cmd = nc >> 8; nc &= 0xFF; /* Get processing command and block size */
|
||||
if (chr < bc + nc) { /* In the block? */
|
||||
switch (cmd) {
|
||||
case 0: chr = p[chr - bc]; break; /* Table conversion */
|
||||
case 1: chr -= (chr - bc) & 1; break; /* Case pairs */
|
||||
case 2: chr -= 16; break; /* Shift -16 */
|
||||
case 3: chr -= 32; break; /* Shift -32 */
|
||||
case 4: chr -= 48; break; /* Shift -48 */
|
||||
case 5: chr -= 26; break; /* Shift -26 */
|
||||
case 6: chr += 8; break; /* Shift +8 */
|
||||
case 7: chr -= 80; break; /* Shift -80 */
|
||||
case 8: chr -= 0x1C60; break; /* Shift -0x1C60 */
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (!cmd) p += nc;
|
||||
}
|
||||
|
||||
return chr;
|
||||
}
|
||||
|
||||
151
PORTING/FATFS/src/option/syscall.c
Normal file
@@ -0,0 +1,151 @@
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Sample code of OS dependent controls for FatFs */
|
||||
/* (C)ChaN, 2014 */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#include "../ff.h"
|
||||
|
||||
|
||||
#if _FS_REENTRANT
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Create a Synchronization Object
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* This function is called in f_mount() function to create a new
|
||||
/ synchronization object, such as semaphore and mutex. When a 0 is returned,
|
||||
/ the f_mount() function fails with FR_INT_ERR.
|
||||
*/
|
||||
|
||||
int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object */
|
||||
BYTE vol, /* Corresponding volume (logical drive number) */
|
||||
_SYNC_t *sobj /* Pointer to return the created sync object */
|
||||
)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
||||
*sobj = CreateMutex(NULL, FALSE, NULL); /* Win32 */
|
||||
ret = (int)(*sobj != INVALID_HANDLE_VALUE);
|
||||
|
||||
// *sobj = SyncObjects[vol]; /* uITRON (give a static sync object) */
|
||||
// ret = 1; /* The initial value of the semaphore must be 1. */
|
||||
|
||||
// *sobj = OSMutexCreate(0, &err); /* uC/OS-II */
|
||||
// ret = (int)(err == OS_NO_ERR);
|
||||
|
||||
// *sobj = xSemaphoreCreateMutex(); /* FreeRTOS */
|
||||
// ret = (int)(*sobj != NULL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Delete a Synchronization Object */
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* This function is called in f_mount() function to delete a synchronization
|
||||
/ object that created with ff_cre_syncobj() function. When a 0 is returned,
|
||||
/ the f_mount() function fails with FR_INT_ERR.
|
||||
*/
|
||||
|
||||
int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to any error */
|
||||
_SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
|
||||
)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
||||
ret = CloseHandle(sobj); /* Win32 */
|
||||
|
||||
// ret = 1; /* uITRON (nothing to do) */
|
||||
|
||||
// OSMutexDel(sobj, OS_DEL_ALWAYS, &err); /* uC/OS-II */
|
||||
// ret = (int)(err == OS_NO_ERR);
|
||||
|
||||
// vSemaphoreDelete(sobj); /* FreeRTOS */
|
||||
// ret = 1;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Request Grant to Access the Volume */
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* This function is called on entering file functions to lock the volume.
|
||||
/ When a 0 is returned, the file function fails with FR_TIMEOUT.
|
||||
*/
|
||||
|
||||
int ff_req_grant ( /* 1:Got a grant to access the volume, 0:Could not get a grant */
|
||||
_SYNC_t sobj /* Sync object to wait */
|
||||
)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = (int)(WaitForSingleObject(sobj, _FS_TIMEOUT) == WAIT_OBJECT_0); /* Win32 */
|
||||
|
||||
// ret = (int)(wai_sem(sobj) == E_OK); /* uITRON */
|
||||
|
||||
// OSMutexPend(sobj, _FS_TIMEOUT, &err)); /* uC/OS-II */
|
||||
// ret = (int)(err == OS_NO_ERR);
|
||||
|
||||
// ret = (int)(xSemaphoreTake(sobj, _FS_TIMEOUT) == pdTRUE); /* FreeRTOS */
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Release Grant to Access the Volume */
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* This function is called on leaving file functions to unlock the volume.
|
||||
*/
|
||||
|
||||
void ff_rel_grant (
|
||||
_SYNC_t sobj /* Sync object to be signaled */
|
||||
)
|
||||
{
|
||||
ReleaseMutex(sobj); /* Win32 */
|
||||
|
||||
// sig_sem(sobj); /* uITRON */
|
||||
|
||||
// OSMutexPost(sobj); /* uC/OS-II */
|
||||
|
||||
// xSemaphoreGive(sobj); /* FreeRTOS */
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#if _USE_LFN == 3 /* LFN with a working buffer on the heap */
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Allocate a memory block */
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE.
|
||||
*/
|
||||
|
||||
void* ff_memalloc ( /* Returns pointer to the allocated memory block */
|
||||
UINT msize /* Number of bytes to allocate */
|
||||
)
|
||||
{
|
||||
return malloc(msize); /* Allocate a new memory block with POSIX API */
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Free a memory block */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
void ff_memfree (
|
||||
void* mblock /* Pointer to the memory block to free */
|
||||
)
|
||||
{
|
||||
free(mblock); /* Discard the memory block with POSIX API */
|
||||
}
|
||||
|
||||
#endif
|
||||
17
PORTING/FATFS/src/option/unicode.c
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "../ff.h"
|
||||
|
||||
#if _USE_LFN != 0
|
||||
|
||||
#if _CODE_PAGE == 932 /* Japanese Shift_JIS */
|
||||
#include "cc932.c"
|
||||
#elif _CODE_PAGE == 936 /* Simplified Chinese GBK */
|
||||
#include "cc936.c"
|
||||
#elif _CODE_PAGE == 949 /* Korean */
|
||||
#include "cc949.c"
|
||||
#elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */
|
||||
#include "cc950.c"
|
||||
#else /* Single Byte Character-Set */
|
||||
#include "ccsbcs.c"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
163
PORTING/MALLOC/malloc.c
Normal file
@@ -0,0 +1,163 @@
|
||||
#include "malloc.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/13
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD>(32<33>ֽڶ<D6BD><DAB6><EFBFBD>) //<2F>ڲ<EFBFBD>SRAM<41>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0XC01F4000))); //<2F>ⲿSDRAM<41>ڴ<EFBFBD><DAB4><EFBFBD>,ǰ<><C7B0>2M<32><4D>LTDC<44><43><EFBFBD><EFBFBD>(1280*800*2)
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0XC01F4000+MEM2_MAX_SIZE))); //<2F>ⲿSRAM<41>ڴ<EFBFBD><DAB4><EFBFBD>MAP
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const u32 memtblsize[SRAMBANK]={MEM2_ALLOC_TABLE_SIZE}; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
|
||||
const u32 memblksize[SRAMBANK]={MEM2_BLOCK_SIZE}; //<2F>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С
|
||||
const u32 memsize[SRAMBANK]={MEM2_MAX_SIZE}; //<2F>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С
|
||||
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct _m_mallco_dev mallco_dev=
|
||||
{
|
||||
my_mem_init, //<2F>ڴ<EFBFBD><DAB4><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
my_mem_perused, //<2F>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
|
||||
mem2base, //<2F>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
mem2mapbase, //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
||||
0, //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
//*des:Ŀ<>ĵ<EFBFBD>ַ
|
||||
//*src:Դ<><D4B4>ַ
|
||||
//n:<3A><>Ҫ<EFBFBD><D2AA><EFBFBD>Ƶ<EFBFBD><C6B5>ڴ泤<DAB4><E6B3A4>(<28>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ)
|
||||
void mymemcpy(void *des,void *src,u32 n)
|
||||
{
|
||||
u8 *xdes=des;
|
||||
u8 *xsrc=src;
|
||||
while(n--)*xdes++=*xsrc++;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
//*s:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַ
|
||||
//c :Ҫ<><D2AA><EFBFBD>õ<EFBFBD>ֵ
|
||||
//count:<3A><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ)
|
||||
void mymemset(void *s,u8 c,u32 count)
|
||||
{
|
||||
u8 *xs = s;
|
||||
while(count--)*xs++=c;
|
||||
}
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
//memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
void my_mem_init(u8 memx)
|
||||
{
|
||||
mymemset(mallco_dev.memmap[memx],0,memtblsize[memx]*4); //<2F>ڴ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mallco_dev.memrdy[memx]=1; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OK
|
||||
}
|
||||
//<2F><>ȡ<EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
|
||||
//memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ʹ<><CAB9><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30>,0~1000,<2C><><EFBFBD><EFBFBD>0.0%~100.0%)
|
||||
u16 my_mem_perused(u8 memx)
|
||||
{
|
||||
u32 used=0;
|
||||
u32 i;
|
||||
for(i=0;i<memtblsize[memx];i++)
|
||||
{
|
||||
if(mallco_dev.memmap[memx][i])used++;
|
||||
}
|
||||
return (used*1000)/(memtblsize[memx]);
|
||||
}
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
//size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C>ڴ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
u32 my_mem_malloc(u8 memx,u32 size)
|
||||
{
|
||||
signed long offset=0;
|
||||
u32 nmemb; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 cmemb=0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 i;
|
||||
if(!mallco_dev.memrdy[memx])mallco_dev.init(memx);//δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
if(size==0)return 0XFFFFFFFF;//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
nmemb=size/memblksize[memx]; //<2F><>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(size%memblksize[memx])nmemb++;
|
||||
for(offset=memtblsize[memx]-1;offset>=0;offset--)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(!mallco_dev.memmap[memx][offset])cmemb++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else cmemb=0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(cmemb==nmemb) //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nmemb<6D><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
{
|
||||
for(i=0;i<nmemb;i++) //<2F><>ע<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ǿ<EFBFBD>
|
||||
{
|
||||
mallco_dev.memmap[memx][offset+i]=nmemb;
|
||||
}
|
||||
return (offset*memblksize[memx]);//<2F><><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
}
|
||||
}
|
||||
return 0XFFFFFFFF;//δ<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
}
|
||||
//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
//offset:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַƫ<D6B7><C6AB>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ͷųɹ<C5B3>;1,<2C>ͷ<EFBFBD>ʧ<EFBFBD><CAA7>;
|
||||
u8 my_mem_free(u8 memx,u32 offset)
|
||||
{
|
||||
int i;
|
||||
if(!mallco_dev.memrdy[memx])//δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
{
|
||||
mallco_dev.init(memx);
|
||||
return 1;//δ<><CEB4>ʼ<EFBFBD><CABC>
|
||||
}
|
||||
if(offset<memsize[memx])//ƫ<><C6AB><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>.
|
||||
{
|
||||
int index=offset/memblksize[memx]; //ƫ<><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int nmemb=mallco_dev.memmap[memx][index]; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<nmemb;i++) //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
mallco_dev.memmap[memx][index+i]=0;
|
||||
}
|
||||
return 0;
|
||||
}else return 2;//ƫ<>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>.
|
||||
}
|
||||
//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
|
||||
//memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
//ptr:<3A>ڴ<EFBFBD><DAB4><EFBFBD>ַ
|
||||
void myfree(u8 memx,void *ptr)
|
||||
{
|
||||
u32 offset;
|
||||
if(ptr==NULL)return;//<2F><>ַΪ0.
|
||||
offset=(u32)ptr-(u32)mallco_dev.membase[memx];
|
||||
my_mem_free(memx,offset); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
|
||||
//memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
//size:<3A>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD>䵽<EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ.
|
||||
void *mymalloc(u8 memx,u32 size)
|
||||
{
|
||||
u32 offset;
|
||||
offset=my_mem_malloc(memx,size);
|
||||
if(offset==0XFFFFFFFF)return NULL;
|
||||
else return (void*)((u32)mallco_dev.membase[memx]+offset);
|
||||
}
|
||||
//<2F><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
|
||||
//memx:<3A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
//*ptr:<3A><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ
|
||||
//size:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С(<28>ֽ<EFBFBD>)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A>·<EFBFBD><C2B7>䵽<EFBFBD><E4B5BD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ.
|
||||
void *myrealloc(u8 memx,void *ptr,u32 size)
|
||||
{
|
||||
u32 offset;
|
||||
offset=my_mem_malloc(memx,size);
|
||||
if(offset==0XFFFFFFFF)return NULL;
|
||||
else
|
||||
{
|
||||
mymemcpy((void*)((u32)mallco_dev.membase[memx]+offset),ptr,size); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
myfree(memx,ptr); //<2F>ͷž<CDB7><C5BE>ڴ<EFBFBD>
|
||||
return (void*)((u32)mallco_dev.membase[memx]+offset); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ
|
||||
}
|
||||
}
|
||||
53
PORTING/MALLOC/malloc.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#ifndef __MALLOC_H
|
||||
#define __MALLOC_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/13
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
||||
#define SRAMEX 0 //<2F>ⲿ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>(SDRAM)
|
||||
|
||||
#define SRAMBANK 1 //<2F><><EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD>SRAM<41><4D><EFBFBD><EFBFBD>.
|
||||
|
||||
//mem2<6D>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨.mem2<6D><32><EFBFBD>ڴ<EFBFBD><DAB4>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ⲿSDRAM<41><4D><EFBFBD><EFBFBD>
|
||||
#define MEM2_BLOCK_SIZE 64 //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ64<36>ֽ<EFBFBD>
|
||||
#define MEM2_MAX_SIZE 28912 *1024 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>28912K
|
||||
#define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE/MEM2_BLOCK_SIZE //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
|
||||
|
||||
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct _m_mallco_dev
|
||||
{
|
||||
void (*init)(u8); //<2F><>ʼ<EFBFBD><CABC>
|
||||
u16 (*perused)(u8); //<2F>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
|
||||
u8 *membase[SRAMBANK]; //<2F>ڴ<EFBFBD><DAB4><EFBFBD> <20><><EFBFBD><EFBFBD>SRAMBANK<4E><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
u32 *memmap[SRAMBANK]; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
||||
u8 memrdy[SRAMBANK]; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
extern struct _m_mallco_dev mallco_dev; //<2F><>mallco.c<><63><EFBFBD>涨<EFBFBD><E6B6A8>
|
||||
|
||||
void mymemset(void *s,u8 c,u32 count); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
void mymemcpy(void *des,void *src,u32 n);//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
void my_mem_init(u8 memx); //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>/<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>)
|
||||
u32 my_mem_malloc(u8 memx,u32 size); //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>)
|
||||
u8 my_mem_free(u8 memx,u32 offset); //<2F>ڴ<EFBFBD><DAB4>ͷ<EFBFBD>(<28>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>)
|
||||
u16 my_mem_perused(u8 memx) ; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>(<28><>/<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
||||
void myfree(u8 memx,void *ptr); //<2F>ڴ<EFBFBD><DAB4>ͷ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
|
||||
void *mymalloc(u8 memx,u32 size); //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
|
||||
void *myrealloc(u8 memx,void *ptr,u32 size);//<2F><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ڴ<EFBFBD>(<28>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>)
|
||||
#endif
|
||||
63
PORTING/USMART/readme.txt
Normal file
@@ -0,0 +1,63 @@
|
||||
USMART V3.1
|
||||
USMART<52><54><EFBFBD><EFBFBD>ALIENTEK<45><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ɵĴ<C9B5><C4B4>ڵ<EFBFBD><DAB5>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ͨ<><CDA8> <20><>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ó<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD><D6B4>.<2E><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(10/16<31><36><EFBFBD><EFBFBD>)<29><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>֧<EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD><EFBFBD> <20><>ֵ<EFBFBD><D6B5>ʾ.V2.1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
hex<EFBFBD><EFBFBD>dec<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>.<2E><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʽ.Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĽ<DDB5><C4BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"hex 100" <20><><EFBFBD>ڴ<EFBFBD><DAB4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> HEX 0X64.
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"dec 0X64" <20><><EFBFBD>ڴ<EFBFBD><DAB4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> DEC 100.
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
|
||||
V1.4
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶Բ<EFBFBD><EFBFBD><EFBFBD>Ϊstring<EFBFBD><EFBFBD><EFBFBD>͵ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>.<2E><><EFBFBD>÷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
<EFBFBD>Ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><EFBFBD>,<2C><>̬<EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>Ϊ79<37><39><EFBFBD>ֽ<EFBFBD>@10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><>̬<EFBFBD><CCAC>Ӧ<EFBFBD><D3A6><EFBFBD>ּ<EFBFBD><D6BC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
V2.0
|
||||
1,<2C><EFBFBD><DEB8><EFBFBD>listָ<74><D6B8>,<2C><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ.
|
||||
2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idָ<64><D6B8>,<2C><>ӡÿ<D3A1><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ.
|
||||
3,<2C><EFBFBD><DEB8>˲<EFBFBD><CBB2><EFBFBD>ƥ<EFBFBD><C6A5>,֧<>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ).
|
||||
4,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ궨<C8BA><EAB6A8>.
|
||||
V2.1 20110707
|
||||
1,<2C><><EFBFBD><EFBFBD>dec,hex<65><78><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
ע:<3A><>dec,hex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>趨<EFBFBD><E8B6A8>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
<EFBFBD><EFBFBD>:"dec 0XFF" <20><><EFBFBD>Ὣ0XFFתΪ255,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>.
|
||||
<EFBFBD><EFBFBD>:"hex 100" <09><><EFBFBD>Ὣ100תΪ0X64,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>
|
||||
2,<2C><><EFBFBD><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڻ<EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
V2.2 20110726
|
||||
1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void<69><64><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ͳ<EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>.
|
||||
2,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʽĬ<CABD><C4AC>Ϊ16<31><36><EFBFBD><EFBFBD>.
|
||||
V2.3 20110815
|
||||
1,ȥ<><C8A5><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>"("<22><>bug.
|
||||
3,<2C><EFBFBD><DEB8>˺<EFBFBD><CBBA><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ķ<DEB8>ʽ.
|
||||
V2.4 20110905
|
||||
1,<2C><EFBFBD><DEB8><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
2,<2C><><EFBFBD><EFBFBD>USMART_ENTIM2_SCAN<41>궨<EFBFBD><EAB6A8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>TIM2<4D><32>ʱִ<CAB1><D6B4>scan<61><6E><EFBFBD><EFBFBD>.
|
||||
V2.5 20110930
|
||||
1,<2C><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD>Ϊvoid usmart_init(u8 sysclk),<2C><><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>ϵͳƵ<CDB3><C6B5><EFBFBD>Զ<EFBFBD><D4B6>趨ɨ<E8B6A8><C9A8>ʱ<EFBFBD><CAB1>.(<28>̶<EFBFBD>100ms)
|
||||
2,ȥ<><C8A5><EFBFBD><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>uart_init<69><74><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>ʼ<EFBFBD><CABC>,<2C><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>.
|
||||
V2.6 20111009
|
||||
1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ַ).<2E><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
2,read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USMART_USE_WRFUNSΪ<53><CEAA>ʹ<EFBFBD>ܺر<CDB9>.
|
||||
3,<2C><EFBFBD><DEB8><EFBFBD>usmart_strcmp,ʹ<><CAB9><EFBFBD>淶<EFBFBD><E6B7B6>.
|
||||
V2.7 20111024
|
||||
1,<2C><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>ֵ16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<CABE><CAB1><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>bug.
|
||||
2,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>з<EFBFBD><D0B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ,<2C><EFBFBD><F2B2BBBB><EFBFBD>ʾ.<2E>з<EFBFBD><D0B7><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD>䷵<EFBFBD><E4B7B5>ֵ.
|
||||
V2.8 20111116
|
||||
1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>list<73>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug.
|
||||
V2.9 20120917
|
||||
1,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺void*xxx(void)<29><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>bug<75><67>
|
||||
V3.0 20130425
|
||||
1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>֡<EFBFBD>
|
||||
V3.1 20131120
|
||||
1,<2C><><EFBFBD><EFBFBD>runtimeϵͳָ<CDB3><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>.
|
||||
<EFBFBD>÷<EFBFBD>:
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:runtime 1 ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:runtime 0 ,<2C><><EFBFBD>رպ<D8B1><D5BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
runtimeͳ<EFBFBD>ƹ<EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:USMART_ENTIMX_SCAN Ϊ1,<2C>ſ<EFBFBD><C5BF><EFBFBD>ʹ<EFBFBD><CAB9>!!
|
||||
|
||||
|
||||
|
||||
<09><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
<09><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:2013/11/20
|
||||
Copyright(C) ALIENTEK 2011-2021
|
||||
455
PORTING/USMART/usmart.c
Normal file
@@ -0,0 +1,455 @@
|
||||
#include "usmart.h"
|
||||
#include "usart.h"
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F>汾<EFBFBD><E6B1BE>V3.1
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> 2011-2021
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.4
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶Բ<CBB6><D4B2><EFBFBD>Ϊstring<6E><67><EFBFBD>͵ĺ<CDB5><C4BA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>.<2E><><EFBFBD>÷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<2F>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>,<2C><>̬<EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>Ϊ79<37><39><EFBFBD>ֽ<EFBFBD>@10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><>̬<EFBFBD><CCAC>Ӧ<EFBFBD><D3A6><EFBFBD>ּ<EFBFBD><D6BC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//V2.0
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD>listָ<74><D6B8>,<2C><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idָ<64><D6B8>,<2C><>ӡÿ<D3A1><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ.
|
||||
//3,<2C><EFBFBD><DEB8>˲<EFBFBD><CBB2><EFBFBD>ƥ<EFBFBD><C6A5>,֧<>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ).
|
||||
//4,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ궨<C8BA><EAB6A8>.
|
||||
//V2.1 20110707
|
||||
//1,<2C><><EFBFBD><EFBFBD>dec,hex<65><78><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
//ע:<3A><>dec,hex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>趨<EFBFBD><E8B6A8>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
//<2F><>:"dec 0XFF" <20><><EFBFBD>Ὣ0XFFתΪ255,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>.
|
||||
//<2F><>:"hex 100" <09><><EFBFBD>Ὣ100תΪ0X64,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>
|
||||
//2,<2C><><EFBFBD><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڻ<EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//V2.2 20110726
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void<69><64><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ͳ<EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>.
|
||||
//2,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʽĬ<CABD><C4AC>Ϊ16<31><36><EFBFBD><EFBFBD>.
|
||||
//V2.3 20110815
|
||||
//1,ȥ<><C8A5><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>"("<22><>bug.
|
||||
//3,<2C><EFBFBD><DEB8>˺<EFBFBD><CBBA><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ķ<DEB8>ʽ.
|
||||
//V2.4 20110905
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,<2C><><EFBFBD><EFBFBD>USMART_ENTIM2_SCAN<41>궨<EFBFBD><EAB6A8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>TIM2<4D><32>ʱִ<CAB1><D6B4>scan<61><6E><EFBFBD><EFBFBD>.
|
||||
//V2.5 20110930
|
||||
//1,<2C><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD>Ϊvoid usmart_init(u8 sysclk),<2C><><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>ϵͳƵ<CDB3><C6B5><EFBFBD>Զ<EFBFBD><D4B6>趨ɨ<E8B6A8><C9A8>ʱ<EFBFBD><CAB1>.(<28>̶<EFBFBD>100ms)
|
||||
//2,ȥ<><C8A5><EFBFBD><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>uart_init<69><74><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>ʼ<EFBFBD><CABC>,<2C><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>.
|
||||
//V2.6 20111009
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ַ).<2E><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USMART_USE_WRFUNSΪ<53><CEAA>ʹ<EFBFBD>ܺر<CDB9>.
|
||||
//3,<2C><EFBFBD><DEB8><EFBFBD>usmart_strcmp,ʹ<><CAB9><EFBFBD>淶<EFBFBD><E6B7B6>.
|
||||
//V2.7 20111024
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>ֵ16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<CABE><CAB1><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>bug.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>з<EFBFBD><D0B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ,<2C><EFBFBD><F2B2BBBB><EFBFBD>ʾ.<2E>з<EFBFBD><D0B7><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD>䷵<EFBFBD><E4B7B5>ֵ.
|
||||
//V2.8 20111116
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>list<73>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug.
|
||||
//V2.9 20120917
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺void*xxx(void)<29><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>bug<75><67>
|
||||
//V3.0 20130425
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>֡<EFBFBD>
|
||||
//V3.1 20131120
|
||||
//1,<2C><><EFBFBD><EFBFBD>runtimeϵͳָ<CDB3><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>.
|
||||
//<2F>÷<EFBFBD>:
|
||||
//<2F><><EFBFBD><EFBFBD>:runtime 1 ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>:runtime 0 ,<2C><><EFBFBD>رպ<D8B1><D5BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
///runtimeͳ<65>ƹ<EFBFBD><C6B9><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:USMART_ENTIMX_SCAN Ϊ1,<2C>ſ<EFBFBD><C5BF><EFBFBD>ʹ<EFBFBD><CAB9>!!
|
||||
//V3.2 20140828
|
||||
//1,<2C><EFBFBD>usmart_get_aparm<72><6D><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>+/-<2D><><EFBFBD>ŵ<EFBFBD>֧<EFBFBD><D6A7>
|
||||
//2,<2C><EFBFBD>usmart_str2num<75><6D><EFBFBD><EFBFBD>,֧<>ָ<EFBFBD><D6B8><EFBFBD>ת<EFBFBD><D7AA>
|
||||
//V3.3 20160506
|
||||
//<2F><><EFBFBD><EFBFBD>usmart_exe<78><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USMART_ENTIMX_SCANΪ0<CEAA><30>ʱ<EFBFBD><EFBFBD><F2A3ACB1><EFBFBD><EFBFBD><EFBFBD>bug
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
TIM_HandleTypeDef TIM4_Handler; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
||||
u8 *sys_cmd_tab[]=
|
||||
{
|
||||
"?",
|
||||
"help",
|
||||
"list",
|
||||
"id",
|
||||
"hex",
|
||||
"dec",
|
||||
"runtime",
|
||||
};
|
||||
//<2F><><EFBFBD><EFBFBD>ϵͳָ<CDB3><D6B8>
|
||||
//0,<2C>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
u8 usmart_sys_cmd_exe(u8 *str)
|
||||
{
|
||||
u8 i;
|
||||
u8 sfname[MAX_FNAME_LEN];//<2F><><EFBFBD>ű<EFBFBD><C5B1>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 pnum;
|
||||
u8 rval;
|
||||
u32 res;
|
||||
res=usmart_get_cmdname(str,sfname,&i,MAX_FNAME_LEN);//<2F>õ<EFBFBD>ָ<EFBFBD>ָ<EEBCB0><EFBFBD><EEB3A4>
|
||||
if(res)return USMART_FUNCERR;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
str+=i;
|
||||
for(i=0;i<sizeof(sys_cmd_tab)/4;i++)//֧<>ֵ<EFBFBD>ϵͳָ<CDB3><D6B8>
|
||||
{
|
||||
if(usmart_strcmp(sfname,sys_cmd_tab[i])==0)break;
|
||||
}
|
||||
switch(i)
|
||||
{
|
||||
case 0:
|
||||
case 1://<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
printf("\r\n");
|
||||
#if USMART_USE_HELP
|
||||
printf("------------------------USMART V3.3------------------------ \r\n");
|
||||
printf(" USMART<52><54><EFBFBD><EFBFBD>ALIENTEK<45><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ɵĴ<C9B5><C4B4>ڵ<EFBFBD><DAB5>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ͨ<><CDA8> \r\n");
|
||||
printf("<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κκ<CEBA><CEBA><EFBFBD>,<2C><>ִ<EFBFBD><D6B4>.<2E><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>\r\n");
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(10/16<31><36><EFBFBD><EFBFBD>,֧<>ָ<EFBFBD><D6B8><EFBFBD>)<29><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>\r\n"),
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>֧<EFBFBD><D6A7>\r\n"),
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ʾ.֧<>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>,֧<>ֽ<EFBFBD><D6BD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\r\n");
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>:www.openedv.com\r\n");
|
||||
printf("USMART<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Сд):\r\n");
|
||||
printf("?: <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ\r\n");
|
||||
printf("help: <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ\r\n");
|
||||
printf("list: <20><><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD>б<EFBFBD>\r\n\n");
|
||||
printf("id: <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>ID<49>б<EFBFBD>\r\n\n");
|
||||
printf("hex: <20><><EFBFBD><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ,<2C><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>+<2B><><EFBFBD>ּ<EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>\r\n\n");
|
||||
printf("dec: <20><><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ,<2C><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>+<2B><><EFBFBD>ּ<EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>\r\n\n");
|
||||
printf("runtime:1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ʱ;0,<2C>رպ<D8B1><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ʱ;\r\n\n");
|
||||
printf("<EFBFBD>밴<EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>뺯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Իس<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\r\n");
|
||||
printf("--------------------------ALIENTEK------------------------- \r\n");
|
||||
#else
|
||||
printf("ָ<EFBFBD><EFBFBD>ʧЧ\r\n");
|
||||
#endif
|
||||
break;
|
||||
case 2://<2F><>ѯָ<D1AF><D6B8>
|
||||
printf("\r\n");
|
||||
printf("-------------------------<2D><><EFBFBD><EFBFBD><EFBFBD>嵥--------------------------- \r\n");
|
||||
for(i=0;i<usmart_dev.fnum;i++)printf("%s\r\n",usmart_dev.funs[i].name);
|
||||
printf("\r\n");
|
||||
break;
|
||||
case 3://<2F><>ѯID
|
||||
printf("\r\n");
|
||||
printf("-------------------------<2D><><EFBFBD><EFBFBD> ID --------------------------- \r\n");
|
||||
for(i=0;i<usmart_dev.fnum;i++)
|
||||
{
|
||||
usmart_get_fname((u8*)usmart_dev.funs[i].name,sfname,&pnum,&rval);//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
printf("%s id is:\r\n0X%08X\r\n",sfname,usmart_dev.funs[i].func); //<2F><>ʾID
|
||||
}
|
||||
printf("\r\n");
|
||||
break;
|
||||
case 4://hexָ<78><D6B8>
|
||||
printf("\r\n");
|
||||
usmart_get_aparm(str,sfname,&i);
|
||||
if(i==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
i=usmart_str2num(sfname,&res); //<2F><>¼<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
if(i==0) //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
printf("HEX:0X%X\r\n",res); //תΪ16<31><36><EFBFBD><EFBFBD>
|
||||
}else if(i!=4)return USMART_PARMERR;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>
|
||||
{
|
||||
printf("16<EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ!\r\n");
|
||||
usmart_dev.sptype=SP_TYPE_HEX;
|
||||
}
|
||||
|
||||
}else return USMART_PARMERR; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
printf("\r\n");
|
||||
break;
|
||||
case 5://decָ<63><D6B8>
|
||||
printf("\r\n");
|
||||
usmart_get_aparm(str,sfname,&i);
|
||||
if(i==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
i=usmart_str2num(sfname,&res); //<2F><>¼<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
if(i==0) //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
printf("DEC:%lu\r\n",res); //תΪ10<31><30><EFBFBD><EFBFBD>
|
||||
}else if(i!=4)return USMART_PARMERR;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>
|
||||
{
|
||||
printf("10<EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ!\r\n");
|
||||
usmart_dev.sptype=SP_TYPE_DEC;
|
||||
}
|
||||
|
||||
}else return USMART_PARMERR; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
printf("\r\n");
|
||||
break;
|
||||
case 6://runtimeָ<65><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>
|
||||
printf("\r\n");
|
||||
usmart_get_aparm(str,sfname,&i);
|
||||
if(i==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
i=usmart_str2num(sfname,&res); //<2F><>¼<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
if(i==0) //<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD>
|
||||
{
|
||||
if(USMART_ENTIMX_SCAN==0)printf("\r\nError! \r\nTo EN RunTime function,Please set USMART_ENTIMX_SCAN = 1 first!\r\n");//<2F><><EFBFBD><EFBFBD>
|
||||
else
|
||||
{
|
||||
usmart_dev.runtimeflag=res;
|
||||
if(usmart_dev.runtimeflag)printf("Run Time Calculation ON\r\n");
|
||||
else printf("Run Time Calculation OFF\r\n");
|
||||
}
|
||||
}else return USMART_PARMERR; //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>߲<EFBFBD><DFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}else return USMART_PARMERR; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
printf("\r\n");
|
||||
break;
|
||||
default://<2F>Ƿ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
return USMART_FUNCERR;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><>ֲע<D6B2><D7A2>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>stm32Ϊ<32><CEAA>,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mcu,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>.
|
||||
//usmart_reset_runtime,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>ͬ<EFBFBD><CDAC>ʱ<EFBFBD><CAB1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>־λһ<CEBB><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<DEB6><C8B5>ӳ<EFBFBD><D3B3><EFBFBD>ʱʱ<CAB1><CAB1>.
|
||||
//usmart_get_runtime,<2C><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,ͨ<><CDA8><EFBFBD><EFBFBD>ȡCNTֵ<54><D6B5>ȡ,<2C><><EFBFBD><EFBFBD>usmart<72><74>ͨ<EFBFBD><CDA8><EFBFBD>жϵ<D0B6><CFB5>õĺ<C3B5><C4BA><EFBFBD>,<2C><><EFBFBD>Զ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD>Ч,<2C><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ֻ<><D6BB>ͳ<EFBFBD><CDB3>2<EFBFBD><32>CNT<4E><54>ֵ,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>,û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CNT*0.1ms.<2E><>STM32<33><32>˵,<2C><>:13.1s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:TIM4_IRQHandler<65><72>Timer4_Init,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>MCU<43>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>Ϊ:10Khz<68><7A><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD>,<2C><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>װ<EFBFBD>ع<EFBFBD><D8B9><EFBFBD>!!
|
||||
|
||||
#if USMART_ENTIMX_SCAN==1
|
||||
//<2F><>λruntime
|
||||
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD>MCU<43>Ķ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void usmart_reset_runtime(void)
|
||||
{
|
||||
__HAL_TIM_CLEAR_FLAG(&TIM4_Handler,TIM_FLAG_UPDATE);//<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
|
||||
__HAL_TIM_SET_AUTORELOAD(&TIM4_Handler,0XFFFF); //<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ֵ<EFBFBD><D6B5><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
__HAL_TIM_SET_COUNTER(&TIM4_Handler,0); //<2F><><EFBFBD>ն<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>CNT
|
||||
usmart_dev.runtime=0;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>runtimeʱ<65><CAB1>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<><D6B4>ʱ<EFBFBD><CAB1>,<2C><>λ:0.1ms,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1>CNTֵ<54><D6B5>2<EFBFBD><32>*0.1ms
|
||||
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD>MCU<43>Ķ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 usmart_get_runtime(void)
|
||||
{
|
||||
if(__HAL_TIM_GET_FLAG(&TIM4_Handler,TIM_FLAG_UPDATE)==SET)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
usmart_dev.runtime+=0XFFFF;
|
||||
}
|
||||
usmart_dev.runtime+=__HAL_TIM_GET_COUNTER(&TIM4_Handler);
|
||||
return usmart_dev.runtime; //<2F><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>ֵ
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>USMART<52><54><EFBFBD><EFBFBD>,<2C>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ.
|
||||
//<2F><>ʱ<EFBFBD><CAB1>4<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void TIM4_IRQHandler(void)
|
||||
{
|
||||
if(__HAL_TIM_GET_IT_SOURCE(&TIM4_Handler,TIM_IT_UPDATE)==SET)//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
{
|
||||
usmart_dev.scan(); //ִ<><D6B4>usmartɨ<74><C9A8>
|
||||
__HAL_TIM_SET_COUNTER(&TIM4_Handler,0);; //<2F><><EFBFBD>ն<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>CNT
|
||||
__HAL_TIM_SET_AUTORELOAD(&TIM4_Handler,100);//<2F>ָ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
__HAL_TIM_CLEAR_IT(&TIM4_Handler, TIM_IT_UPDATE);//<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
|
||||
}
|
||||
|
||||
//ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>4,ʹ<><CAB9><EFBFBD>ж<EFBFBD>.
|
||||
void Timer4_Init(u16 arr,u16 psc)
|
||||
{
|
||||
//<2F><>ʱ<EFBFBD><CAB1>4
|
||||
__HAL_RCC_TIM4_CLK_ENABLE();
|
||||
HAL_NVIC_SetPriority(TIM4_IRQn,3,3); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
|
||||
HAL_NVIC_EnableIRQ(TIM4_IRQn); //<2F><><EFBFBD><EFBFBD>ITM4<4D>ж<EFBFBD>
|
||||
|
||||
TIM4_Handler.Instance=TIM4; //ͨ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>4
|
||||
TIM4_Handler.Init.Prescaler=psc; //<2F><>Ƶ
|
||||
TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
TIM4_Handler.Init.Period=arr; //<2F>Զ<EFBFBD>װ<EFBFBD><D7B0>ֵ
|
||||
TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
|
||||
HAL_TIM_Base_Init(&TIM4_Handler);
|
||||
HAL_TIM_Base_Start_IT(&TIM4_Handler); //ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>4<EFBFBD>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1>4<EFBFBD>ж<EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD>
|
||||
//sysclk:ϵͳʱ<CDB3>ӣ<EFBFBD>Mhz<68><7A>
|
||||
void usmart_init(u8 sysclk)
|
||||
{
|
||||
#if USMART_ENTIMX_SCAN==1
|
||||
Timer4_Init(1000,(u32)sysclk*100-1);//<2F><>Ƶ,ʱ<><CAB1>Ϊ10K ,100ms<6D>ж<EFBFBD>һ<EFBFBD><D2BB>,ע<><D7A2>,<2C><><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ϊ10Khz,<2C>Ժ<EFBFBD>runtime<6D><65>λ(0.1ms)ͬ<><CDAC>.
|
||||
#endif
|
||||
usmart_dev.sptype=1; //ʮ<><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><>str<74>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,id,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
//*str:<3A>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>.
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,ʶ<><CAB6><EFBFBD>ɹ<EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
u8 usmart_cmd_rec(u8*str)
|
||||
{
|
||||
u8 sta,i,rval;//״̬
|
||||
u8 rpnum,spnum;
|
||||
u8 rfname[MAX_FNAME_LEN];//<2F>ݴ<EFBFBD><DDB4>ռ<EFBFBD>,<2C><><EFBFBD>ڴ<EFBFBD><DAB4>Ž<EFBFBD><C5BD>յ<EFBFBD><D5B5>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 sfname[MAX_FNAME_LEN];//<2F><><EFBFBD>ű<EFBFBD><C5B1>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
sta=usmart_get_fname(str,rfname,&rpnum,&rval);//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĺ<DDB5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(sta)return sta;//<2F><><EFBFBD><EFBFBD>
|
||||
for(i=0;i<usmart_dev.fnum;i++)
|
||||
{
|
||||
sta=usmart_get_fname((u8*)usmart_dev.funs[i].name,sfname,&spnum,&rval);//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(sta)return sta;//<2F><><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(usmart_strcmp(sfname,rfname)==0)//<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(spnum>rpnum)return USMART_PARMERR;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
usmart_dev.id=i;//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ID.
|
||||
break;//<2F><><EFBFBD><EFBFBD>.
|
||||
}
|
||||
}
|
||||
if(i==usmart_dev.fnum)return USMART_NOFUNCFIND; //δ<>ҵ<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
|
||||
sta=usmart_get_fparam(str,&i); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(sta)return sta; //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>
|
||||
usmart_dev.pnum=i; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
return USMART_OK;
|
||||
}
|
||||
//usamrtִ<74>к<EFBFBD><D0BA><EFBFBD>
|
||||
//<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>дӴ<D0B4><D3B4><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>.
|
||||
//<2F><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>֧<EFBFBD><D6A7>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>.<2E><><EFBFBD><EFBFBD><EFBFBD>õĺ<C3B5><C4BA><EFBFBD>.һ<><D2BB>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD>ҵIJ<D2B5><C4B2><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD>.
|
||||
//<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڴ<EFBFBD>ӡִ<D3A1><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><>:"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2...<2E><><EFBFBD><EFBFBD>N)=<3D><><EFBFBD><EFBFBD>ֵ".<2E><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ӡ.
|
||||
//<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ<EFBFBD><D6B5>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD>ӡ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>ֵ<EFBFBD><D6B5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
void usmart_exe(void)
|
||||
{
|
||||
u8 id,i;
|
||||
u32 res;
|
||||
u32 temp[MAX_PARM];//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>,ʹ֧֮<D6AE><D6A7><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
u8 sfname[MAX_FNAME_LEN];//<2F><><EFBFBD>ű<EFBFBD><C5B1>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 pnum,rval;
|
||||
id=usmart_dev.id;
|
||||
if(id>=usmart_dev.fnum)return;//<2F><>ִ<EFBFBD><D6B4>.
|
||||
usmart_get_fname((u8*)usmart_dev.funs[id].name,sfname,&pnum,&rval);//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
printf("\r\n%s(",sfname);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫִ<D2AA>еĺ<D0B5><C4BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<pnum;i++)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(usmart_dev.parmtype&(1<<i))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
{
|
||||
printf("%c",'"');
|
||||
printf("%s",usmart_dev.parm+usmart_get_parmpos(i));
|
||||
printf("%c",'"');
|
||||
temp[i]=(u32)&(usmart_dev.parm[usmart_get_parmpos(i)]);
|
||||
}else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp[i]=*(u32*)(usmart_dev.parm+usmart_get_parmpos(i));
|
||||
if(usmart_dev.sptype==SP_TYPE_DEC)printf("%ld",temp[i]);//10<31><30><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
else printf("0X%X",temp[i]);//16<31><36><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
}
|
||||
if(i!=pnum-1)printf(",");
|
||||
}
|
||||
printf(")");
|
||||
#if USMART_ENTIMX_SCAN==1
|
||||
usmart_reset_runtime(); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʼ<EFBFBD><CABC>ʱ
|
||||
#endif
|
||||
switch(usmart_dev.pnum)
|
||||
{
|
||||
case 0://<2F><EFBFBD><DEB2><EFBFBD>(void<69><64><EFBFBD><EFBFBD>)
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)();
|
||||
break;
|
||||
case 1://<2F><>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0]);
|
||||
break;
|
||||
case 2://<2F><>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1]);
|
||||
break;
|
||||
case 3://<2F><>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2]);
|
||||
break;
|
||||
case 4://<2F><>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3]);
|
||||
break;
|
||||
case 5://<2F><>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4]);
|
||||
break;
|
||||
case 6://<2F><>6<EFBFBD><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
||||
temp[5]);
|
||||
break;
|
||||
case 7://<2F><>7<EFBFBD><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
||||
temp[5],temp[6]);
|
||||
break;
|
||||
case 8://<2F><>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
||||
temp[5],temp[6],temp[7]);
|
||||
break;
|
||||
case 9://<2F><>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
||||
temp[5],temp[6],temp[7],temp[8]);
|
||||
break;
|
||||
case 10://<2F><>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=(*(u32(*)())usmart_dev.funs[id].func)(temp[0],temp[1],temp[2],temp[3],temp[4],\
|
||||
temp[5],temp[6],temp[7],temp[8],temp[9]);
|
||||
break;
|
||||
}
|
||||
#if USMART_ENTIMX_SCAN==1
|
||||
usmart_get_runtime();//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>
|
||||
#endif
|
||||
if(rval==1)//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ֵ.
|
||||
{
|
||||
if(usmart_dev.sptype==SP_TYPE_DEC)printf("=%lu;\r\n",res);//<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>(10<31><30><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>ʾ)
|
||||
else printf("=0X%X;\r\n",res);//<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>(16<31><36><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>ʾ)
|
||||
}else printf(";\r\n"); //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ֵ,ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(usmart_dev.runtimeflag) //<2F><>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>
|
||||
{
|
||||
printf("Function Run Time:%d.%1dms\r\n",usmart_dev.runtime/10,usmart_dev.runtime%10);//<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>
|
||||
}
|
||||
}
|
||||
//usmartɨ<74>躯<EFBFBD><E8BAAF>
|
||||
//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>øú<C3B8><C3BA><EFBFBD>,ʵ<><CAB5>usmart<72>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>Ҫÿ<D2AA><C3BF>һ<EFBFBD><D2BB>ʱ<EFBFBD>䱻<EFBFBD><E4B1BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
//<2F>Լ<EFBFBD>ʱִ<CAB1>дӴ<D0B4><D3B4>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ӷ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ALIENTEK<45>û<EFBFBD>,<2C><>USART_RX_STA<54><41>USART_RX_BUF[]<5D><>Ҫ<EFBFBD>û<EFBFBD><C3BB>Լ<EFBFBD>ʵ<EFBFBD><CAB5>
|
||||
void usmart_scan(void)
|
||||
{
|
||||
u8 sta,len;
|
||||
if(USART_RX_STA&0x8000)//<2F><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>
|
||||
{
|
||||
len=USART_RX_STA&0x3fff; //<2F>õ<EFBFBD><C3B5>˴ν<CBB4><CEBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
USART_RX_BUF[len]='\0'; //<2F><>ĩβ<C4A9><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
sta=usmart_dev.cmd_rec(USART_RX_BUF);//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
if(sta==0)usmart_dev.exe(); //ִ<>к<EFBFBD><D0BA><EFBFBD>
|
||||
else
|
||||
{
|
||||
len=usmart_sys_cmd_exe(USART_RX_BUF);
|
||||
if(len!=USMART_FUNCERR)sta=len;
|
||||
if(sta)
|
||||
{
|
||||
switch(sta)
|
||||
{
|
||||
case USMART_FUNCERR:
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\r\n");
|
||||
|
||||
break;
|
||||
case USMART_PARMERR:
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\r\n");
|
||||
break;
|
||||
case USMART_PARMOVER:
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD>!\r\n");
|
||||
break;
|
||||
case USMART_NOFUNCFIND:
|
||||
printf("δ<EFBFBD>ҵ<EFBFBD>ƥ<EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD>!\r\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
USART_RX_STA=0;//״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
#if USMART_USE_WRFUNS==1 //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>˶<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
//<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ֵ
|
||||
u32 read_addr(u32 addr)
|
||||
{
|
||||
return *(u32*)addr;//
|
||||
}
|
||||
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַд<D6B7><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֵ
|
||||
void write_addr(u32 addr,u32 val)
|
||||
{
|
||||
*(u32*)addr=val;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
158
PORTING/USMART/usmart.h
Normal file
@@ -0,0 +1,158 @@
|
||||
#ifndef __USMART_H
|
||||
#define __USMART_H
|
||||
#include "usmart_str.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F>汾<EFBFBD><E6B1BE>V3.1
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> 2011-2021
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.4
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶Բ<CBB6><D4B2><EFBFBD>Ϊstring<6E><67><EFBFBD>͵ĺ<CDB5><C4BA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>.<2E><><EFBFBD>÷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<2F>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>,<2C><>̬<EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>Ϊ79<37><39><EFBFBD>ֽ<EFBFBD>@10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><>̬<EFBFBD><CCAC>Ӧ<EFBFBD><D3A6><EFBFBD>ּ<EFBFBD><D6BC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//V2.0
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD>listָ<74><D6B8>,<2C><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idָ<64><D6B8>,<2C><>ӡÿ<D3A1><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ.
|
||||
//3,<2C><EFBFBD><DEB8>˲<EFBFBD><CBB2><EFBFBD>ƥ<EFBFBD><C6A5>,֧<>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ).
|
||||
//4,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ궨<C8BA><EAB6A8>.
|
||||
//V2.1 20110707
|
||||
//1,<2C><><EFBFBD><EFBFBD>dec,hex<65><78><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
//ע:<3A><>dec,hex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>趨<EFBFBD><E8B6A8>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
//<2F><>:"dec 0XFF" <20><><EFBFBD>Ὣ0XFFתΪ255,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>.
|
||||
//<2F><>:"hex 100" <09><><EFBFBD>Ὣ100תΪ0X64,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>
|
||||
//2,<2C><><EFBFBD><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڻ<EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//V2.2 20110726
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void<69><64><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ͳ<EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>.
|
||||
//2,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʽĬ<CABD><C4AC>Ϊ16<31><36><EFBFBD><EFBFBD>.
|
||||
//V2.3 20110815
|
||||
//1,ȥ<><C8A5><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>"("<22><>bug.
|
||||
//3,<2C><EFBFBD><DEB8>˺<EFBFBD><CBBA><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ķ<DEB8>ʽ.
|
||||
//V2.4 20110905
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,<2C><><EFBFBD><EFBFBD>USMART_ENTIM2_SCAN<41>궨<EFBFBD><EAB6A8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>TIM2<4D><32>ʱִ<CAB1><D6B4>scan<61><6E><EFBFBD><EFBFBD>.
|
||||
//V2.5 20110930
|
||||
//1,<2C><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD>Ϊvoid usmart_init(u8 sysclk),<2C><><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>ϵͳƵ<CDB3><C6B5><EFBFBD>Զ<EFBFBD><D4B6>趨ɨ<E8B6A8><C9A8>ʱ<EFBFBD><CAB1>.(<28>̶<EFBFBD>100ms)
|
||||
//2,ȥ<><C8A5><EFBFBD><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>uart_init<69><74><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>ʼ<EFBFBD><CABC>,<2C><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>.
|
||||
//V2.6 20111009
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ַ).<2E><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USMART_USE_WRFUNSΪ<53><CEAA>ʹ<EFBFBD>ܺر<CDB9>.
|
||||
//3,<2C><EFBFBD><DEB8><EFBFBD>usmart_strcmp,ʹ<><CAB9><EFBFBD>淶<EFBFBD><E6B7B6>.
|
||||
//V2.7 20111024
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>ֵ16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<CABE><CAB1><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>bug.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>з<EFBFBD><D0B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ,<2C><EFBFBD><F2B2BBBB><EFBFBD>ʾ.<2E>з<EFBFBD><D0B7><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD>䷵<EFBFBD><E4B7B5>ֵ.
|
||||
//V2.8 20111116
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>list<73>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug.
|
||||
//V2.9 20120917
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺void*xxx(void)<29><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>bug<75><67>
|
||||
//V3.0 20130425
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>֡<EFBFBD>
|
||||
//V3.1 20131120
|
||||
//1,<2C><><EFBFBD><EFBFBD>runtimeϵͳָ<CDB3><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>.
|
||||
//<2F>÷<EFBFBD>:
|
||||
//<2F><><EFBFBD><EFBFBD>:runtime 1 ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>:runtime 0 ,<2C><><EFBFBD>رպ<D8B1><D5BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
///runtimeͳ<65>ƹ<EFBFBD><C6B9><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:USMART_ENTIMX_SCAN Ϊ1,<2C>ſ<EFBFBD><C5BF><EFBFBD>ʹ<EFBFBD><CAB9>!!
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
//USMART<52><54>Դռ<D4B4><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@MDK 3.80A@2.0<EFBFBD>汾<EFBFBD><EFBFBD>
|
||||
//FLASH:4K~K<>ֽ<EFBFBD>(ͨ<><CDA8>USMART_USE_HELP<4C><50>USMART_USE_WRFUNS<4E><53><EFBFBD><EFBFBD>)
|
||||
//SRAM:72<37>ֽ<EFBFBD>(<28><><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//SRAM<41><4D><EFBFBD>㹫ʽ: SRAM=PARM_LEN+72-4 <20><><EFBFBD><EFBFBD>PARM_LEN<45><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>4.
|
||||
//Ӧ<>ñ<EFBFBD>֤<EFBFBD><D6A4>ջ<EFBFBD><D5BB>С<EFBFBD><D0A1>100<30><30><EFBFBD>ֽ<EFBFBD>.
|
||||
////////////////////////////////////////////<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>////////////////////////////////////////////////////
|
||||
#define MAX_FNAME_LEN 30 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<F3B3A4B6>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EEB3A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȡ<EFBFBD>
|
||||
#define MAX_PARM 10 //<2F><><EFBFBD><EFBFBD>Ϊ10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ,<2C>Ĵ˲<C4B4><CBB2><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>usmart_exe<78><65>֮<EFBFBD><D6AE>Ӧ.
|
||||
#define PARM_LEN 200 //<2F><><EFBFBD>в<EFBFBD><D0B2><EFBFBD>֮<EFBFBD>͵ij<CDB5><C4B3>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>PARM_LEN<45><4E><EFBFBD>ֽ<EFBFBD>,ע<><EFBFBD>ڽ<EFBFBD><DABD>ղ<EFBFBD><D5B2><EFBFBD>Ҫ<EFBFBD><D2AA>֮<EFBFBD><D6AE>Ӧ(<28><>С<EFBFBD><D0A1>PARM_LEN)
|
||||
|
||||
|
||||
#define USMART_ENTIMX_SCAN 1 //ʹ<><CAB9>TIM<49>Ķ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ɨ<EFBFBD><C9A8>SCAN<41><4E><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0,<2C><>Ҫ<EFBFBD>Լ<EFBFBD>ʵ<EFBFBD>ָ<EFBFBD>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1>ɨ<EFBFBD><C9A8>һ<EFBFBD><D2BB>scan<61><6E><EFBFBD><EFBFBD>.
|
||||
//ע<><D7A2>:<3A><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>runtimeͳ<65>ƹ<EFBFBD><C6B9><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USMART_ENTIMX_SCANΪ1!!!!
|
||||
|
||||
#define USMART_USE_HELP 1 //ʹ<>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD>ʡ<EFBFBD><CAA1>700<30><30><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
||||
#define USMART_USE_WRFUNS 1 //ʹ<>ö<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>,ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD>κε<CEBA>ַ<EFBFBD><D6B7>ֵ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ.
|
||||
///////////////////////////////////////////////END///////////////////////////////////////////////////////////
|
||||
|
||||
#define USMART_OK 0 //<2F><EFBFBD><DEB4><EFBFBD>
|
||||
#define USMART_FUNCERR 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define USMART_PARMERR 2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define USMART_PARMOVER 3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define USMART_NOFUNCFIND 4 //δ<>ҵ<EFBFBD>ƥ<EFBFBD>亯<EFBFBD><E4BAAF>
|
||||
|
||||
#define SP_TYPE_DEC 0 //10<31><30><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
#define SP_TYPE_HEX 1 //16<31><36><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
struct _m_usmart_nametab
|
||||
{
|
||||
void* func; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
const u8* name; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>Ҵ<EFBFBD>)
|
||||
};
|
||||
//usmart<72><74><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct _m_usmart_dev
|
||||
{
|
||||
struct _m_usmart_nametab *funs; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
|
||||
void (*init)(u8); //<2F><>ʼ<EFBFBD><CABC>
|
||||
u8 (*cmd_rec)(u8*str); //ʶ<><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void (*exe)(void); //ִ<><D6B4>
|
||||
void (*scan)(void); //ɨ<><C9A8>
|
||||
u8 fnum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 pnum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 id; //<2F><><EFBFBD><EFBFBD>id
|
||||
u8 sptype; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>(<28><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>):0,10<31><30><EFBFBD><EFBFBD>;1,16<31><36><EFBFBD><EFBFBD>;
|
||||
u16 parmtype; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 plentbl[MAX_PARM]; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
||||
u8 parm[PARM_LEN]; //<2F><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
||||
u8 runtimeflag; //0,<2C><>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>;1,ͳ<>ƺ<EFBFBD><C6BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>,ע<><D7A2>:<3A>˹<EFBFBD><CBB9>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD>USMART_ENTIMX_SCANʹ<4E>ܵ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 runtime; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>λ:0.1ms,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1>CNTֵ<54><D6B5>2<EFBFBD><32>*0.1ms
|
||||
};
|
||||
extern struct _m_usmart_nametab usmart_nametab[]; //<2F><>usmart_config.c<><63><EFBFBD>涨<EFBFBD><E6B6A8>
|
||||
extern struct _m_usmart_dev usmart_dev; //<2F><>usmart_config.c<><63><EFBFBD>涨<EFBFBD><E6B6A8>
|
||||
|
||||
|
||||
void usmart_init(u8 sysclk);//<2F><>ʼ<EFBFBD><CABC>
|
||||
u8 usmart_cmd_rec(u8*str); //ʶ<><CAB6>
|
||||
void usmart_exe(void); //ִ<><D6B4>
|
||||
void usmart_scan(void); //ɨ<><C9A8>
|
||||
u32 read_addr(u32 addr); //<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ֵ
|
||||
void write_addr(u32 addr,u32 val);//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַд<D6B7><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ֵ
|
||||
u32 usmart_get_runtime(void); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
void usmart_reset_runtime(void);//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
66
PORTING/USMART/usmart_config.c
Normal file
@@ -0,0 +1,66 @@
|
||||
#include "usmart.h"
|
||||
#include "usmart_str.h"
|
||||
////////////////////////////<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>(<28>û<EFBFBD><C3BB>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>)
|
||||
#include "delay.h"
|
||||
#include "debug.h"
|
||||
#include "cnn_model.h"
|
||||
#include "cnn.h"
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ʼ<EFBFBD><CABC>(<28>û<EFBFBD><C3BB>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//<2F>û<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫִ<D2AA>еĺ<D0B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>
|
||||
struct _m_usmart_nametab usmart_nametab[]=
|
||||
{
|
||||
(void*)DEBUG,"void DEBUG(void)",
|
||||
(void*)SDRAM_USED,"void SDRAM_USED(void)",
|
||||
|
||||
(void*)modelmym_init,"float* modelmym_init(char* model_name)",
|
||||
(void*)modelmym_free,"u8 modelmym_free(char* model_name)",
|
||||
(void*)model_write,"u8 model_write(char* model_name)",
|
||||
(void*)model_read,"u8 model_read(char* model_name, u32 start, u32 end, u32 gap)",
|
||||
(void*)model_switchdata,"u8 model_switchdata(char* model_name)",
|
||||
(void*)model_info,"u8 model_info(char* model_name)",
|
||||
(void*)model_dataset,"void model_dataset(void)",
|
||||
(void*)model_init,"void model_init(void)",
|
||||
|
||||
(void*)_cnn_run,"void _cnn_run(void)",
|
||||
};
|
||||
///////////////////////////////////END///////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܿغ<DCBF><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct _m_usmart_dev usmart_dev=
|
||||
{
|
||||
usmart_nametab,
|
||||
usmart_init,
|
||||
usmart_cmd_rec,
|
||||
usmart_exe,
|
||||
usmart_scan,
|
||||
sizeof(usmart_nametab)/sizeof(struct _m_usmart_nametab),//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
0, //<2F><><EFBFBD><EFBFBD>ID
|
||||
1, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,0,10<31><30><EFBFBD><EFBFBD>;1,16<31><36><EFBFBD><EFBFBD>
|
||||
0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.bitx:,0,<2C><><EFBFBD><EFBFBD>;1,<2C>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
0, //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>,<2C><>ҪMAX_PARM<52><4D>0<EFBFBD><30>ʼ<EFBFBD><CABC>
|
||||
0, //<2F><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>,<2C><>ҪPARM_LEN<45><4E>0<EFBFBD><30>ʼ<EFBFBD><CABC>
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
426
PORTING/USMART/usmart_str.c
Normal file
@@ -0,0 +1,426 @@
|
||||
#include "usmart_str.h"
|
||||
#include "usmart.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F>汾<EFBFBD><E6B1BE>V3.1
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> 2011-2021
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.4
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶Բ<CBB6><D4B2><EFBFBD>Ϊstring<6E><67><EFBFBD>͵ĺ<CDB5><C4BA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>.<2E><><EFBFBD>÷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<2F>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>,<2C><>̬<EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>Ϊ79<37><39><EFBFBD>ֽ<EFBFBD>@10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><>̬<EFBFBD><CCAC>Ӧ<EFBFBD><D3A6><EFBFBD>ּ<EFBFBD><D6BC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//V2.0
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD>listָ<74><D6B8>,<2C><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idָ<64><D6B8>,<2C><>ӡÿ<D3A1><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ.
|
||||
//3,<2C><EFBFBD><DEB8>˲<EFBFBD><CBB2><EFBFBD>ƥ<EFBFBD><C6A5>,֧<>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ).
|
||||
//4,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ궨<C8BA><EAB6A8>.
|
||||
//V2.1 20110707
|
||||
//1,<2C><><EFBFBD><EFBFBD>dec,hex<65><78><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
//ע:<3A><>dec,hex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>趨<EFBFBD><E8B6A8>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
//<2F><>:"dec 0XFF" <20><><EFBFBD>Ὣ0XFFתΪ255,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>.
|
||||
//<2F><>:"hex 100" <09><><EFBFBD>Ὣ100תΪ0X64,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>
|
||||
//2,<2C><><EFBFBD><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڻ<EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//V2.2 20110726
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void<69><64><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ͳ<EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>.
|
||||
//2,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʽĬ<CABD><C4AC>Ϊ16<31><36><EFBFBD><EFBFBD>.
|
||||
//V2.3 20110815
|
||||
//1,ȥ<><C8A5><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>"("<22><>bug.
|
||||
//3,<2C><EFBFBD><DEB8>˺<EFBFBD><CBBA><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ķ<DEB8>ʽ.
|
||||
//V2.4 20110905
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,<2C><><EFBFBD><EFBFBD>USMART_ENTIM2_SCAN<41>궨<EFBFBD><EAB6A8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>TIM2<4D><32>ʱִ<CAB1><D6B4>scan<61><6E><EFBFBD><EFBFBD>.
|
||||
//V2.5 20110930
|
||||
//1,<2C><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD>Ϊvoid usmart_init(u8 sysclk),<2C><><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>ϵͳƵ<CDB3><C6B5><EFBFBD>Զ<EFBFBD><D4B6>趨ɨ<E8B6A8><C9A8>ʱ<EFBFBD><CAB1>.(<28>̶<EFBFBD>100ms)
|
||||
//2,ȥ<><C8A5><EFBFBD><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>uart_init<69><74><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>ʼ<EFBFBD><CABC>,<2C><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>.
|
||||
//V2.6 20111009
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ַ).<2E><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USMART_USE_WRFUNSΪ<53><CEAA>ʹ<EFBFBD>ܺر<CDB9>.
|
||||
//3,<2C><EFBFBD><DEB8><EFBFBD>usmart_strcmp,ʹ<><CAB9><EFBFBD>淶<EFBFBD><E6B7B6>.
|
||||
//V2.7 20111024
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>ֵ16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<CABE><CAB1><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>bug.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>з<EFBFBD><D0B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ,<2C><EFBFBD><F2B2BBBB><EFBFBD>ʾ.<2E>з<EFBFBD><D0B7><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD>䷵<EFBFBD><E4B7B5>ֵ.
|
||||
//V2.8 20111116
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>list<73>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug.
|
||||
//V2.9 20120917
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺void*xxx(void)<29><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>bug<75><67>
|
||||
//V3.0 20130425
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>֡<EFBFBD>
|
||||
//V3.1 20131120
|
||||
//1,<2C><><EFBFBD><EFBFBD>runtimeϵͳָ<CDB3><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>.
|
||||
//<2F>÷<EFBFBD>:
|
||||
//<2F><><EFBFBD><EFBFBD>:runtime 1 ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>:runtime 0 ,<2C><><EFBFBD>رպ<D8B1><D5BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
///runtimeͳ<65>ƹ<EFBFBD><C6B9><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:USMART_ENTIMX_SCAN Ϊ1,<2C>ſ<EFBFBD><C5BF><EFBFBD>ʹ<EFBFBD><CAB9>!!
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//<2F>Ա<EFBFBD><D4B1>ַ<EFBFBD><D6B7><EFBFBD>str1<72><31>str2
|
||||
//*str1:<3A>ַ<EFBFBD><D6B7><EFBFBD>1ָ<31><D6B8>
|
||||
//*str2:<3A>ַ<EFBFBD><D6B7><EFBFBD>2ָ<32><D6B8>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
u8 usmart_strcmp(u8 *str1,u8 *str2)
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
if(*str1!=*str2)return 1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(*str1=='\0')break;//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
str1++;
|
||||
str2++;
|
||||
}
|
||||
return 0;//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><>str1<72><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>copy<70><79>str2
|
||||
//*str1:<3A>ַ<EFBFBD><D6B7><EFBFBD>1ָ<31><D6B8>
|
||||
//*str2:<3A>ַ<EFBFBD><D6B7><EFBFBD>2ָ<32><D6B8>
|
||||
void usmart_strcopy(u8*str1,u8 *str2)
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
*str2=*str1; //<2F><><EFBFBD><EFBFBD>
|
||||
if(*str1=='\0')break;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
str1++;
|
||||
str2++;
|
||||
}
|
||||
}
|
||||
//<2F>õ<EFBFBD><C3B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>(<28>ֽ<EFBFBD>)
|
||||
//*str:<3A>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
u8 usmart_strlen(u8*str)
|
||||
{
|
||||
u8 len=0;
|
||||
while(1)
|
||||
{
|
||||
if(*str=='\0')break;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
len++;
|
||||
str++;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
//m^n<><6E><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:m^n<>η<EFBFBD>
|
||||
u32 usmart_pow(u8 m,u8 n)
|
||||
{
|
||||
u32 result=1;
|
||||
while(n--)result*=m;
|
||||
return result;
|
||||
}
|
||||
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>תΪ<D7AA><CEAA><EFBFBD><EFBFBD>
|
||||
//֧<><D6A7>16<31><36><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>,<2C><><EFBFBD><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD>д<EFBFBD><D0B4>,<2C>Ҹ<EFBFBD>ʽΪ<CABD><CEAA>0X<30><58>ͷ<EFBFBD><CDB7>.
|
||||
//<2F><>֧<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
|
||||
//*str:<3A><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//*res:ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ַ.
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0<><30><EFBFBD>ɹ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//1,<2C><><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>.2,16<31><36><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ0.3,<2C><>ʼ<EFBFBD><CABC>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>.4,ʮ<><CAAE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ0.
|
||||
u8 usmart_str2num(u8*str,u32 *res)
|
||||
{
|
||||
u32 t;
|
||||
u8 bnum=0; //<2F><><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
u8 *p;
|
||||
u8 hexdec=10;//Ĭ<><C4AC>Ϊʮ<CEAA><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
p=str;
|
||||
*res=0;//<2F><><EFBFBD><EFBFBD>.
|
||||
while(1)
|
||||
{
|
||||
if((*p<='9'&&*p>='0')||(*p<='F'&&*p>='A')||(*p=='X'&&bnum==1))//<2F><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>
|
||||
{
|
||||
if(*p>='A')hexdec=16; //<2F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ĸ,Ϊ16<31><36><EFBFBD>Ƹ<EFBFBD>ʽ.
|
||||
bnum++; //λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
}else if(*p=='\0')break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>˳<EFBFBD>.
|
||||
else return 1; //<2F><>ȫ<EFBFBD><C8AB>ʮ<EFBFBD><CAAE><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
p++;
|
||||
}
|
||||
p=str; //<2F><><EFBFBD>¶<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ĵ<EFBFBD>ַ.
|
||||
if(hexdec==16) //16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(bnum<3)return 2; //λ<><CEBB>С<EFBFBD><D0A1>3<EFBFBD><33>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>.<2E><>Ϊ0X<30><58>ռ<EFBFBD><D5BC>2<EFBFBD><32>,<2C><><EFBFBD><EFBFBD>0X<30><58><EFBFBD>治<EFBFBD><E6B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷǷ<DDB7>.
|
||||
if(*p=='0' && (*(p+1)=='X'))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'0X'<27><>ͷ.
|
||||
{
|
||||
p+=2; //ƫ<>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ.
|
||||
bnum-=2;//<2F><>ȥƫ<C8A5><C6AB><EFBFBD><EFBFBD>
|
||||
}else return 3;//<2F><>ʼͷ<CABC>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||||
}else if(bnum==0)return 4;//λ<><CEBB>Ϊ0<CEAA><30>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>.
|
||||
while(1)
|
||||
{
|
||||
if(bnum)bnum--;
|
||||
if(*p<='9'&&*p>='0')t=*p-'0'; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ֵ<EFBFBD>ֵ
|
||||
else t=*p-'A'+10; //<2F>õ<EFBFBD>A~F<><46>Ӧ<EFBFBD><D3A6>ֵ
|
||||
*res+=t*usmart_pow(hexdec,bnum);
|
||||
p++;
|
||||
if(*p=='\0')break;//<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
}
|
||||
return 0;//<2F>ɹ<EFBFBD>ת<EFBFBD><D7AA>
|
||||
}
|
||||
//<2F>õ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>
|
||||
//*str:Դ<>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
//*cmdname:ָ<><D6B8><EFBFBD><EFBFBD>
|
||||
//*nlen:ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//maxlen:<3A><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ָ<><EFBFBD><EEB2BB><EFBFBD><EFBFBD>̫<EFBFBD><CCAB><EFBFBD><EFBFBD>)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;<3B><><EFBFBD><EFBFBD>,ʧ<><CAA7>.
|
||||
u8 usmart_get_cmdname(u8*str,u8*cmdname,u8 *nlen,u8 maxlen)
|
||||
{
|
||||
*nlen=0;
|
||||
while(*str!=' '&&*str!='\0') //<2F>ҵ<EFBFBD><D2B5>ո<EFBFBD><D5B8><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*cmdname=*str;
|
||||
str++;
|
||||
cmdname++;
|
||||
(*nlen)++;//ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB3A4>
|
||||
if(*nlen>=maxlen)return 1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
}
|
||||
*cmdname='\0';//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>кܶ<D0BA><DCB6>ո<EFBFBD><D5B8><EFBFBD>ʱ<EFBFBD>˺<F2A3ACB4><CBBA><EFBFBD>ֱ<EFBFBD>Ӻ<EFBFBD><D3BA>Կո<D4BF><D5B8><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ո<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
//str:<3A>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>
|
||||
u8 usmart_search_nextc(u8* str)
|
||||
{
|
||||
str++;
|
||||
while(*str==' '&&str!='\0')str++;
|
||||
return *str;
|
||||
}
|
||||
//<2F><>str<74>еõ<D0B5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//*str:Դ<>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//*fname:<3A><>ȡ<EFBFBD><C8A1><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//*pnum:<3A><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//*rval:<3A>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ֵ(0,<2C><><EFBFBD><EFBFBD>Ҫ;1,<2C><>Ҫ)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
u8 usmart_get_fname(u8*str,u8*fname,u8 *pnum,u8 *rval)
|
||||
{
|
||||
u8 res;
|
||||
u8 fover=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 *strtemp;
|
||||
u8 offset=0;
|
||||
u8 parmnum=0;
|
||||
u8 temp=1;
|
||||
u8 fpname[6];//void+X+'/0'
|
||||
u8 fplcnt=0; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 pcnt=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 nchar;
|
||||
//<2F>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>з<EFBFBD><D0B7><EFBFBD>ֵ
|
||||
strtemp=str;
|
||||
while(*strtemp!='\0')//û<>н<EFBFBD><D0BD><EFBFBD>
|
||||
{
|
||||
if(*strtemp!=' '&&(pcnt&0X7F)<5)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼5<C2BC><35><EFBFBD>ַ<EFBFBD>
|
||||
{
|
||||
if(pcnt==0)pcnt|=0X80;//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>λ,<2C><><EFBFBD>ǿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
if(((pcnt&0x7f)==4)&&(*strtemp!='*'))break;//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*
|
||||
fpname[pcnt&0x7f]=*strtemp;//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
pcnt++;
|
||||
}else if(pcnt==0X85)break;
|
||||
strtemp++;
|
||||
}
|
||||
if(pcnt)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
fpname[pcnt&0x7f]='\0';//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(usmart_strcmp(fpname,"void")==0)*rval=0;//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ֵ
|
||||
else *rval=1; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ֵ
|
||||
pcnt=0;
|
||||
}
|
||||
res=0;
|
||||
strtemp=str;
|
||||
while(*strtemp!='('&&*strtemp!='\0') //<2F>˴<EFBFBD><CBB4><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
|
||||
{
|
||||
strtemp++;
|
||||
res++;
|
||||
if(*strtemp==' '||*strtemp=='*')
|
||||
{
|
||||
nchar=usmart_search_nextc(strtemp); //<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>
|
||||
if(nchar!='('&&nchar!='*')offset=res; //<2F><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8><EFBFBD>*<2A><>
|
||||
}
|
||||
}
|
||||
strtemp=str;
|
||||
if(offset)strtemp+=offset+1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ĵط<C4B5>
|
||||
res=0;
|
||||
nchar=0;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>־,0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>;1<><31><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>;
|
||||
while(1)
|
||||
{
|
||||
if(*strtemp==0)
|
||||
{
|
||||
res=USMART_FUNCERR;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
break;
|
||||
}else if(*strtemp=='('&&nchar==0)fover++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
else if(*strtemp==')'&&nchar==0)
|
||||
{
|
||||
if(fover)fover--;
|
||||
else res=USMART_FUNCERR;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,û<>յ<EFBFBD>'('
|
||||
if(fover==0)break;//<2F><>ĩβ<C4A9><CEB2>,<2C>˳<EFBFBD>
|
||||
}else if(*strtemp=='"')nchar=!nchar;
|
||||
|
||||
if(fover==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(*strtemp!=' ')//<2F>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*fname=*strtemp;//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fname++;
|
||||
}
|
||||
}else //<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
{
|
||||
if(*strtemp==',')
|
||||
{
|
||||
temp=1; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pcnt++;
|
||||
}else if(*strtemp!=' '&&*strtemp!='(')
|
||||
{
|
||||
if(pcnt==0&&fplcnt<5) //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,Ϊ<>˱<EFBFBD><CBB1><EFBFBD>ͳ<EFBFBD><CDB3>void<69><64><EFBFBD>͵IJ<CDB5><C4B2><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>.
|
||||
{
|
||||
fpname[fplcnt]=*strtemp;//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
fplcnt++;
|
||||
}
|
||||
temp++; //<2F>õ<EFBFBD><C3B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>(<28>ǿո<C7BF>)
|
||||
}
|
||||
if(fover==1&&temp==2)
|
||||
{
|
||||
temp++; //<2F><>ֹ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
parmnum++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
}
|
||||
}
|
||||
strtemp++;
|
||||
}
|
||||
if(parmnum==1)//ֻ<><D6BB>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
{
|
||||
fpname[fplcnt]='\0';//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(usmart_strcmp(fpname,"void")==0)parmnum=0;//<2F><><EFBFBD><EFBFBD>Ϊvoid,<2C><>ʾû<CABE>в<EFBFBD><D0B2><EFBFBD>.
|
||||
}
|
||||
*pnum=parmnum; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*fname='\0'; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return res; //<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
//<2F><>str<74>еõ<D0B5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
||||
//*str:Դ<>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//*fparm:<3A><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//*ptype:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1<><31><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>;0XFF<46><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>Ѿ<EFBFBD><D1BE><EFBFBD><DEB2><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>.
|
||||
u8 usmart_get_aparm(u8 *str,u8 *fparm,u8 *ptype)
|
||||
{
|
||||
u8 i=0;
|
||||
u8 enout=0;
|
||||
u8 type=0;//Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 string=0; //<2F><><EFBFBD><EFBFBD>str<74>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڶ<EFBFBD>
|
||||
while(1)
|
||||
{
|
||||
if(*str==','&& string==0)enout=1; //<2F>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>,Ŀ<><C4BF><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
if((*str==')'||*str=='\0')&&string==0)break;//<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>ʶ<EFBFBD><CAB6>
|
||||
if(type==0)//Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>
|
||||
{
|
||||
if((*str>='0' && *str<='9')||(*str>='a' && *str<='f')||(*str>='A' && *str<='F')||*str=='X'||*str=='x')//<2F><><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(enout)break; //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֱ<><D6B1><EFBFBD>˳<EFBFBD>.
|
||||
if(*str>='a')*fparm=*str-0X20; //Сдת<D0B4><D7AA>Ϊ<EFBFBD><CEAA>д
|
||||
else *fparm=*str; //Сд<D0A1><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ֲ<EFBFBD><D6B2><EFBFBD>
|
||||
fparm++;
|
||||
}else if(*str=='"')//<2F>ҵ<EFBFBD><D2B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD><CABC>־
|
||||
{
|
||||
if(enout)break;//<2F>ҵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>",<2C><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
type=1;
|
||||
string=1;//<2F>Ǽ<EFBFBD>STRING <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>
|
||||
}else if(*str!=' '&&*str!=',')//<2F><><EFBFBD>ַǷ<D6B7><C7B7>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
type=0XFF;
|
||||
break;
|
||||
}
|
||||
}else//string<6E><67>
|
||||
{
|
||||
if(*str=='"')string=0;
|
||||
if(enout)break; //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֱ<><D6B1><EFBFBD>˳<EFBFBD>.
|
||||
if(string) //<2F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>
|
||||
{
|
||||
if(*str=='\\') //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>)
|
||||
{
|
||||
str++; //ƫ<>Ƶ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD>ʲô<CAB2>ַ<EFBFBD>,ֱ<><D6B1>COPY
|
||||
i++;
|
||||
}
|
||||
*fparm=*str; //Сд<D0A1><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ֲ<EFBFBD><D6B2><EFBFBD>
|
||||
fparm++;
|
||||
}
|
||||
}
|
||||
i++;//ƫ<><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
str++;
|
||||
}
|
||||
*fparm='\0'; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*ptype=type; //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return i; //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F>õ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
//num:<3A><>num<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Χ0~9.
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
u8 usmart_get_parmpos(u8 num)
|
||||
{
|
||||
u8 temp=0;
|
||||
u8 i;
|
||||
for(i=0;i<num;i++)temp+=usmart_dev.plentbl[i];
|
||||
return temp;
|
||||
}
|
||||
//<2F><>str<74>еõ<D0B5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//str:Դ<>ַ<EFBFBD><D6B7><EFBFBD>;
|
||||
//parn:<3A><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>.0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> void<69><64><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
u8 usmart_get_fparam(u8*str,u8 *parn)
|
||||
{
|
||||
u8 i,type;
|
||||
u32 res;
|
||||
u8 n=0;
|
||||
u8 len;
|
||||
u8 tstr[PARM_LEN+1];//<2F>ֽڳ<D6BD><DAB3>ȵĻ<C8B5><C4BB><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>PARM_LEN<45><4E><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
for(i=0;i<MAX_PARM;i++)usmart_dev.plentbl[i]=0;//<2F><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD>
|
||||
while(*str!='(')//ƫ<>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ĵط<C4B5>
|
||||
{
|
||||
str++;
|
||||
if(*str=='\0')return USMART_FUNCERR;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
str++;//ƫ<>Ƶ<EFBFBD>"("֮<><D6AE><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
while(1)
|
||||
{
|
||||
i=usmart_get_aparm(str,tstr,&type); //<2F>õ<EFBFBD><C3B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
str+=i; //ƫ<><C6AB>
|
||||
switch(type)
|
||||
{
|
||||
case 0: //<2F><><EFBFBD><EFBFBD>
|
||||
if(tstr[0]!='\0') //<2F><><EFBFBD>յ<EFBFBD><D5B5>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>Ч
|
||||
{
|
||||
i=usmart_str2num(tstr,&res); //<2F><>¼<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
if(i)return USMART_PARMERR; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
*(u32*)(usmart_dev.parm+usmart_get_parmpos(n))=res;//<2F><>¼ת<C2BC><D7AA><EFBFBD>ɹ<EFBFBD><C9B9>Ľ<EFBFBD><C4BD><EFBFBD>.
|
||||
usmart_dev.parmtype&=~(1<<n); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
usmart_dev.plentbl[n]=4; //<2F>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>Ϊ4
|
||||
n++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(n>MAX_PARM)return USMART_PARMOVER;//<2F><><EFBFBD><EFBFBD>̫<EFBFBD><CCAB>
|
||||
}
|
||||
break;
|
||||
case 1://<2F>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
len=usmart_strlen(tstr)+1; //<2F><><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>'\0'
|
||||
usmart_strcopy(tstr,&usmart_dev.parm[usmart_get_parmpos(n)]);//<2F><><EFBFBD><EFBFBD>tstr<74><72><EFBFBD>ݵ<EFBFBD>usmart_dev.parm[n]
|
||||
usmart_dev.parmtype|=1<<n; //<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
usmart_dev.plentbl[n]=len; //<2F>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>Ϊlen
|
||||
n++;
|
||||
if(n>MAX_PARM)return USMART_PARMOVER;//<2F><><EFBFBD><EFBFBD>̫<EFBFBD><CCAB>
|
||||
break;
|
||||
case 0XFF://<2F><><EFBFBD><EFBFBD>
|
||||
return USMART_PARMERR;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
if(*str==')'||*str=='\0')break;//<2F>鵽<EFBFBD><E9B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>.
|
||||
}
|
||||
*parn=n; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
return USMART_OK;//<2F><>ȷ<EFBFBD>õ<EFBFBD><C3B5>˲<EFBFBD><CBB2><EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
83
PORTING/USMART/usmart_str.h
Normal file
@@ -0,0 +1,83 @@
|
||||
#ifndef __USMART_STR_H
|
||||
#define __USMART_STR_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F>汾<EFBFBD><E6B1BE>V3.1
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> 2011-2021
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.4
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶Բ<CBB6><D4B2><EFBFBD>Ϊstring<6E><67><EFBFBD>͵ĺ<CDB5><C4BA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>.<2E><><EFBFBD>÷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<2F>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>,<2C><>̬<EFBFBD>ڴ<EFBFBD>ռ<EFBFBD><D5BC>Ϊ79<37><39><EFBFBD>ֽ<EFBFBD>@10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><>̬<EFBFBD><CCAC>Ӧ<EFBFBD><D3A6><EFBFBD>ּ<EFBFBD><D6BC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//V2.0
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD>listָ<74><D6B8>,<2C><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idָ<64><D6B8>,<2C><>ӡÿ<D3A1><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ.
|
||||
//3,<2C><EFBFBD><DEB8>˲<EFBFBD><CBB2><EFBFBD>ƥ<EFBFBD><C6A5>,֧<>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ַ).
|
||||
//4,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ궨<C8BA><EAB6A8>.
|
||||
//V2.1 20110707
|
||||
//1,<2C><><EFBFBD><EFBFBD>dec,hex<65><78><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
//ע:<3A><>dec,hex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>趨<EFBFBD><E8B6A8>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>ת<EFBFBD><D7AA>.
|
||||
//<2F><>:"dec 0XFF" <20><><EFBFBD>Ὣ0XFFתΪ255,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>.
|
||||
//<2F><>:"hex 100" <09><><EFBFBD>Ὣ100תΪ0X64,<2C>ɴ<EFBFBD><C9B4>ڷ<EFBFBD><DAB7><EFBFBD>
|
||||
//2,<2C><><EFBFBD><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڻ<EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//V2.2 20110726
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void<69><64><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ͳ<EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>.
|
||||
//2,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ʽĬ<CABD><C4AC>Ϊ16<31><36><EFBFBD><EFBFBD>.
|
||||
//V2.3 20110815
|
||||
//1,ȥ<><C8A5><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>"("<22><>bug.
|
||||
//3,<2C><EFBFBD><DEB8>˺<EFBFBD><CBBA><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ķ<DEB8>ʽ.
|
||||
//V2.4 20110905
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD>usmart_get_cmdname<6D><65><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,<2C><><EFBFBD><EFBFBD>USMART_ENTIM2_SCAN<41>궨<EFBFBD><EAB6A8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>TIM2<4D><32>ʱִ<CAB1><D6B4>scan<61><6E><EFBFBD><EFBFBD>.
|
||||
//V2.5 20110930
|
||||
//1,<2C><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD>Ϊvoid usmart_init(u8 sysclk),<2C><><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>ϵͳƵ<CDB3><C6B5><EFBFBD>Զ<EFBFBD><D4B6>趨ɨ<E8B6A8><C9A8>ʱ<EFBFBD><CAB1>.(<28>̶<EFBFBD>100ms)
|
||||
//2,ȥ<><C8A5><EFBFBD><EFBFBD>usmart_init<69><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>uart_init<69><74><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>ʼ<EFBFBD><CABC>,<2C><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>.
|
||||
//V2.6 20111009
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ַ).<2E><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//2,read_addr<64><72>write_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USMART_USE_WRFUNSΪ<53><CEAA>ʹ<EFBFBD>ܺر<CDB9>.
|
||||
//3,<2C><EFBFBD><DEB8><EFBFBD>usmart_strcmp,ʹ<><CAB9><EFBFBD>淶<EFBFBD><E6B7B6>.
|
||||
//V2.7 20111024
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD>ֵ16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<CABE><CAB1><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>bug.
|
||||
//2,<2C><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>з<EFBFBD><D0B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>ֵ,<2C><EFBFBD><F2B2BBBB><EFBFBD>ʾ.<2E>з<EFBFBD><D0B7><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD>䷵<EFBFBD><E4B7B5>ֵ.
|
||||
//V2.8 20111116
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>list<73>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug.
|
||||
//V2.9 20120917
|
||||
//1,<2C><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺void*xxx(void)<29><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>bug<75><67>
|
||||
//V3.0 20130425
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>֡<EFBFBD>
|
||||
//V3.1 20131120
|
||||
//1,<2C><><EFBFBD><EFBFBD>runtimeϵͳָ<CDB3><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>.
|
||||
//<2F>÷<EFBFBD>:
|
||||
//<2F><><EFBFBD><EFBFBD>:runtime 1 ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>:runtime 0 ,<2C><><EFBFBD>رպ<D8B1><D5BA><EFBFBD>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
///runtimeͳ<65>ƹ<EFBFBD><C6B9><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:USMART_ENTIMX_SCAN Ϊ1,<2C>ſ<EFBFBD><C5BF><EFBFBD>ʹ<EFBFBD><CAB9>!!
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
u8 usmart_get_parmpos(u8 num); //<2F>õ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
|
||||
u8 usmart_strcmp(u8*str1,u8 *str2); //<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 usmart_pow(u8 m,u8 n); //M^N<>η<EFBFBD>
|
||||
u8 usmart_str2num(u8*str,u32 *res); //<2F>ַ<EFBFBD><D6B7><EFBFBD>תΪ<D7AA><CEAA><EFBFBD><EFBFBD>
|
||||
u8 usmart_get_cmdname(u8*str,u8*cmdname,u8 *nlen,u8 maxlen);//<2F><>str<74>еõ<D0B5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EEB3A4>
|
||||
u8 usmart_get_fname(u8*str,u8*fname,u8 *pnum,u8 *rval); //<2F><>str<74>еõ<D0B5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 usmart_get_aparm(u8 *str,u8 *fparm,u8 *ptype); //<2F><>str<74>еõ<D0B5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 usmart_get_fparam(u8*str,u8 *parn); //<2F>õ<EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD>еĺ<D0B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||