Archive for 九月, 2016

已知曲线上的点 求函数解析式

LINUX C & ARM & C51 | Posted by 老沙
9月 13 2016
已知道曲线上的4个X及其对应的Y,怎么求y=f(x)的函数解析式。或者说函数原型吧
多谢了
x=1.2 y=3600 。。。。。。f(1.2)=3600
x=1.5 y=60 。。。。。。。f(1.5)=60
x=6 y=8。。。。。。。。。f(6)=8
x=9 y=0.2。。。。。。。。f(9)=0.2
其实这样的题目,最简单的方法就是用待定系数法来求,这有两种情况:
1、你的坐标平面上只有这4个点,且知道其坐标;
2、你的坐标平面上除了这4个点外,还有其他的点,只不过除了这4个点外,其他点的坐标未知。

对于第一种情况,最简单的方法就是多项式拟合法,有n个点,就拟合一个n-1次的多项式
比如你给的条件,就应该拟合曲线y=ax^3+bx^2+cx+d,这样,知道了4个点,可得4个方程,4个未知数,这个函数可以唯一确定下来。
我用计算机算了一下,得到了一个三次方程y = -315x^3 + 5194x^2 – 24096x + 25580,计算结果给出来的系数小数位数太少了,x取较小值的时候还比较靠谱,X比较大的时候,比如反算X=6和9的时候,丢掉的小数位数乘以6和9的三次方的值比较大了,但都被舍去了,因此,反算6的时候结果变成了-52,反算9的时候更大了。

对于第二种情况,用上面的方法计算出来的多项式不一定能够通过其他的点,这种情况下,你就只能采用离散数据的处理方法了,此时你也可以用多项式来拟合,这个多项式甚至可以是直线,只不过用不同的多项式时的统计偏差有大有小罢了,要想使求得的曲线通过所有的点,必须满足拟合曲线的最高阶次是数据点数量减以一。只有这样得到的方程组才有唯一解。

STM8 读取 UID

STM32 | Posted by 老沙
9月 07 2016

UID

UID即Unique ID,STM8S105提供了96BIT的全球唯一ID,可以用于加密,也可以用于板子的ID,像我的应用,就是用在了给箱子一个全球唯一的ID,这样就便于联网了。

用UID的时候,请参考英文手册,不知道为什么,中文版的是没有UID这方面的介绍的。那么我们就来学习一下UID把,官方给的应用如下:

•For use as serial numbers

•For use as security keys to increase the code security in the program memory while using and combining this unique ID with software cryptograhic primitives and protocols before programming the internal memory.

•To activate secure boot processes

其地址如下:

 1473251352-3985-30

1-2 byte为晶圆上x轴位置
3-4 byte为晶圆上y轴位置
5   byte为晶圆号码
6-12 byte是Lot number.

实际上一开始的时候,我也对UID的读取是相当的疑惑,但是看了这个地址后,其实就是直接读取地址上的数据就可以了。程序如下:

void get_id(void)

{

u8 i;

u16 addr;

u8 uid1[12];

addr=0x48CD;

for(i=0;i<12;i++)

{

uid1[i]=*(u8*)addr++;

putchar(uid1[i]);

}

}

怎么样,简单把,还有另外一个方法,在网上搜到的,也分享给大家把,

__no_init const union { //either the struct or a string

struct { //nameless struct

unsigned short X_coordinate; //X-coordinate on the wafter

unsigned short Y_coordinate; //Y-coordinate on the wafer

unsigned char Wafer_Number; //wafer number

unsigned char Lot_Number[7]; //lot number

} ;

unsigned char str[12]; //or the string

} U_ID @ 0x48cd; //u_id typ