本帖最后由 tear086 于 2010-12-16 22:52 编辑
20:03:27
先问什么是《单片机》?
。。。
20:22:24
所谓“单片机”要追述到遥远的80年代初期
20:22:54
当时Z80横行中国大地
一叶擒王(106821270) 20:23:03
单板机?
20:23:14
TP801
20:23:24
北工大
20:23:40
PIO,CTC
一叶擒王(106821270) 20:23:46
北方工业大学?
20:23:52
对
20:24:22
PIO就是现在的GPIO,CTC就是TIMER
20:24:43
还有SIO就是UART
20:25:15
即Z80+PIO+CTC+SIO横行霸道
20:25:34
每个都是40管脚的巨无霸
一叶擒王(106821270) 20:25:59
都是外挂存储吧
20:26:04
是
20:27:17
当8031出现后,单片机迎来了最长的寿星
20:29:04
8031的成功就在于他的外部总线,P0口的数据和地址的复用。
20:30:37
再看多少豪杰,有谁还有“准双向IO”?
20:32:13
当俺又看到芯唐有此功能后,首先敬礼!!!
20:33:01
因为看到它,俺选用了它
20:33:14
它太精明了
20:34:36
虽然真双向IO也可伪造成准双向IO,但一般人不明白为什么输出输入用方向控制
最成功的就是它经典永恒的“准双向IO”
20:35:00
俺在网上此问题答复的很多
20:35:42
张明峰的书也特别强调了这点
20:36:21
他主要不太上网,否则肯定被俺色诱成功
20:37:38
一根线在一点时间如何双向?
20:38:16
真双向主要是大电流驱动
20:38:31
同时只能一个方向
一叶擒王(106821270) 20:39:03
开漏加上拉啊?
20:39:14
内部就是两线了,而且你输出低能接收吗?
20:39:26
对
20:39:41
这不是今天的话题
Mr.Wrong(44500789) 20:41:14
20:41:56
先忆苦和思甜,手机如今就像战斗机!
Mr.Wrong(44500789) 20:42:17
在开漏模式下,带上拉,确实可以基本实现准双向功能,只是读写寄存器不一样。
20:44:10
旧社会时(单片机)浪费是最大的犯罪!
新社会了(ARM,DSP,CPLD.FPGA)节约是最大的犯罪~~~
20:46:33
所谓的嵌入式领域俗称“电工”,至今还在追求“代码的效率”,“汇编和C”
“C与C++"之间的口水,说实话,档次太低~~~
20:47:38
有些电工连上位机软件都不会,整日守着”超级终端“,”串口助手“~~~
20:48:27
整日追求汇编和C,什么时候才能脱贫???
20:49:35
俺不指特定人群~~~
20:50:12
俺51岁多了,还如此的菜鸟,实在惭愧~~~
20:51:20
当我们进入新时代(至少M0),就应该抛弃旧社会的想法!
20:52:24
俺在网上只要编译器支持C++,俺绝不用C
20:52:47
还行~~
20:58:18
休会
21:26:19
C有什么优点,C++有什么好处?
21:27:20
说实话,有很多用VC的不会C++
21:28:00
只是用了框架
李冬发(632653918) 21:28:43
C++,虚函数不错
21:28:52
哈哈~~~俺做的充电器AVR的T26都用C++(2K)
John Lee<j.y.lee@yeah.net> 21:29:11
模板(template)也不错
21:29:37
在这里俺比老师差远了~~~
21:30:22
https://bbs.21ic.com/icview-35239-1-1.html
21:30:47
俺没色诱俺的老师~~~
21:32:13
哈哈~~~看来C++有救了~~~老师不在,俺到处被拍砖~~~
李冬发(632653918) 21:32:31
为什么有救没救的
21:32:50
你是没人拍砖~~~
李冬发(632653918) 21:33:14
我有安全帽
李冬发(632653918) 21:33:19
不怕砖
21:34:05
”."引领世界新潮流~~~
21:34:21
所以红杏推荐”."
21:35:09
-> 只能在C/C++看到了~~~
21:36:46
刚上传的过程包实际不想特别推荐C++,而是准备用C PK C++
21:37:34
这两天俺就搞个C PK C++的工程来
21:38:08
自己玩无趣,要大家一起玩才是~~~
21:38:25
这样就可以PK冬发了~~~
李冬发(632653918) 21:38:44
我C/C++都用啊
李冬发(632653918) 21:39:09
C#实在用不来。
21:39:32
晕!期待什么,包里面已经藏匿了其精华----COM接口技术
21:40:12
https://bbs.21ic.com/icview-210620-1-1.html
21:40:31
老师请指教~~~
21:40:39
俺抽烟去
21:44:01
COM接口技术就是今晚的“战斗机”!!!
21:44:32
菜农将其编译,用于加密程序之用途
21:44:38
变异
李冬发(632653918) 21:44:46
COM?PC端的?
21:45:03
对
21:45:36
俺将它老人家色诱来为电工们服务!!!
21:46:37
谁讲讲COM接口的来历和出处
21:47:24
https://bbs.21ic.com/icview-190954-1-1.html
21:49:49
COM接口技术是微软为了制止动态链接库DLL的级数速度的增长提出的
21:51:05
首先是为防止DLL的**,其次才是控平台即控件的无关性等
21:51:38
单片机也存在此问题
21:52:29
例如C语言庞大的函数阵列,归类很晕~~~
21:54:49
在保持C语言函数库现状下,用COM接口技术将其封装,就伪装成了“山寨的C++”,而且更为凶猛~~~
21:56:16
菜农的红杏就有一半它的影子。
保内comIRQ就是它最最至高的精华所在
21:59:15
当今软件的潮流就是事件驱动,实质就是回调函数
22:01:20
俺拿一手,抽代旱烟!
22:04:43
托一按钮,双击,填入代码。
运行,点击按钮,程序自动运行。
这就是回调
22:05:03
任何PC程序都是如此
22:05:30
回调即系统调用也
22:06:25
在单片机中,定时器中断后,会怎样?
22:06:44
回调就是,用户写一个让系统能执行的代码,以实现你的特别用意。
22:07:43
电工都是自己填入中断函数中,因为他们害怕浪费几个时钟周期
22:08:48
22:09:58
这样加装了回调函数指针后,有好处和坏处
22:10:16
坏处就是电工穷
22:10:29
好处太多
22:12:25
当用户没安装即申请回调函数时,即使中断也是什么都不执行
22:13:43
当安装了回调函数,就会执行用户程序。
而且可以卸载或换一个程序,很灵活
22:14:31
利大于弊,在M0上,原厂的库函数都是用回调函数的
22:15:27
但太烂,没几种管理,像菜农的comIRQ几种管理一样
22:16:02
真是没真的悟出回调的真谛,实在是倒塌了
22:17:52
俺没这个本事,但头文件有俺的缩影,所以俺这次红杏轻松许多。
故俺没彻底抛弃它,和它并存互不干扰,而且是俺绑架(绑定)了它
22:18:40
有基础实在是晕,如GPIO的PMD
22:18:52
俺只能将就了
22:19:12
晕否??????????
22:22:44
COM接口接口技术在单片机的应用很少
22:23:02
代理全部回家迷糊吧~~~
22:23:20
俺今天早课,没半夜**叫
22:23:56
俺没讲?
22:24:07
这才对
22:24:26
#include "main.h"
#ifndef __NUC1xxcomIRQ_H__
#define __NUC1xxcomIRQ_H__
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*CALLBACK)(void);//通用回调函数指针
typedef void (*BOD_CALLBACK)(void);//0 DrvSYS.C已使用
typedef void (*WDT_CALLBACK)(void);//1
typedef void (*EINT0_CALLBACK)(void);//2
typedef void (*EINT1_CALLBACK)(void);//3
typedef void (*GPAB_CALLBACK)(void);//4
typedef void (*GPCDE_CALLBACK)(void);//5
typedef void (*PWMA_CALLBACK)(void);//6
typedef void (*PWMB_CALLBACK)(void);//7
typedef void (*TMR0_CALLBACK)(void);//8
typedef void (*TMR1_CALLBACK)(void);//9
typedef void (*TMR2_CALLBACK)(void);//10
typedef void (*TMR3_CALLBACK)(void);//11
typedef void (*UART02_CALLBACK)(void);//12
typedef void (*UART1_CALLBACK)(void);//13
typedef void (*SPI0_CALLBACK)(void);//14
typedef void (*SPI1_CALLBACK)(void);//15
typedef void (*SPI2_CALLBACK)(void);//16
typedef void (*SPI3_CALLBACK)(void);//17
typedef void (*I2C0_CALLBACK)(void);//18
typedef void (*I2C1_CALLBACK)(void);//19
typedef void (*CAN0_CALLBACK)(void);//20
typedef void (*CAN1_CALLBACK)(void);//21
typedef void (*SD_CALLBACK)(void);//22
typedef void (*USBD_CALLBACK)(void);//23
typedef void (*PS2_CALLBACK)(void);//24
typedef void (*ACMP_CALLBACK)(void);//25
typedef void (*PDMA_CALLBACK)(void);//26
typedef void (*I2S_CALLBACK)(void);//27
typedef void (*PWRWU_CALLBACK)(void);//28 DrvSYS.C已使用
typedef void (*ADC_CALLBACK)(void);//29
typedef void (*DAC_CALLBACK)(void);//30
typedef void (*RTC_CALLBACK)(void);//31
#define interface struct
typedef interface IComIRQ_Interface IComIRQ_Interface;//接口定义
typedef struct IComIRQ_Vtbl//回调函数指针或回调函数数组结构
{
union{
CALLBACK FnArray[32];//回调函数数组
struct{//回调函数指针结构
void (*BOD_IRQCallbackPtr)(void);//0 DrvSYS.C已使用
void (*WDT_IRQCallbackPtr)(void);//1
void (*EINT0_IRQCallbackPtr)(void);//2
void (*EINT1_IRQCallbackPtr)(void);//3
void (*GPAB_IRQCallbackPtr)(void);//4
void (*GPCDE_IRQCallbackPtr)(void);//5
void (*PWMA_IRQCallbackPtr)(void);//6
void (*PWMB_IRQCallbackPtr)(void);//7
void (*TMR0_IRQCallbackPtr)(void);//8
void (*TMR1_IRQCallbackPtr)(void);//9
void (*TMR2_IRQCallbackPtr)(void);//10
void (*TMR3_IRQCallbackPtr)(void);//11
void (*UART02_IRQCallbackPtr)(void);//12 注意Uart0和Uart1公有一个回调函数
void (*UART1_IRQCallbackPtr)(void);//13
void (*SPI0_IRQCallbackPtr)(void);//14
void (*SPI1_IRQCallbackPtr)(void);//15
void (*SPI2_IRQCallbackPtr)(void);//16
void (*SPI3_IRQCallbackPtr)(void);//17
void (*I2C0_IRQCallbackPtr)(void);//18
void (*I2C1_IRQCallbackPtr)(void);//19
void (*CAN0_IRQCallbackPtr)(void);//20
void (*CAN1_IRQCallbackPtr)(void);//21
void (*SD_IRQCallbackPtr)(void);//22
void (*USBD_IRQCallbackPtr)(void);//23
void (*PS2_IRQCallbackPtr)(void);//24
void (*ACMP_IRQCallbackPtr)(void);//25
void (*PDMA_IRQCallbackPtr)(void);//26
void (*I2S_IRQCallbackPtr)(void);//27
void (*PWRWU_IRQCallbackPtr)(void);//28 DrvSYS.C已使用
void (*ADC_IRQCallbackPtr)(void);//29
void (*DAC_IRQCallbackPtr)(void);//30
void (*RTC_IRQCallbackPtr)(void);//31
}FnPtr;//回调函数指针
};
}IComIRQ_Vtbl, *pIComIRQ_Vtbl;//回调函数指针或回调函数数组结构
interface IComIRQ_Interface//回调函数COM接口
{
IComIRQ_Vtbl Callback;//回调函数指针或回调函数数组结构
volatile int Count;//已成功安装的回调函数的个数
};
extern IComIRQ_Interface IComIRQ;//回调函数COM接口全局变量
extern bool comIRQ_InstallCallbackFn(unsigned int IRQn, CALLBACK pFn);//安装回调函数
extern bool comIRQ_UnInstallCallbackFn(unsigned int IRQn);//卸载已安装的回调函数
#ifdef __cplusplus
}
#endif
#endif//__NUC1xxcomIRQ_H__
FAN(307451030) 22:24:34
村长,有机会把你讲的整理下,我们好拜读
22:25:04
哈哈~~~村民潜水?
22:25:49
COM接口技术实际就是两个结构体
22:27:20
第一个结构内的一个成员指向第二个结构的首地址
第二个结构体内成员是清一色的C语言函数指针
这就是COM接口技术的精华
22:27:46
明白否?
22:28:06
在comIRQ.h中
22:28:19
interface IComIRQ_Interface//回调函数COM接口
{
IComIRQ_Vtbl Callback;//回调函数指针或回调函数数组结构
volatile int Count;//已成功安装的回调函数的个数
};
22:29:59
结构ComIRQ_Interface
成员有2个,(也可以一个)
22:30:19
interface IComIRQ_Interface//回调函数COM接口
{
IComIRQ_Vtbl Callback;//回调函数指针或回调函数数组结构
volatile int Count;//已成功安装的回调函数的个数
};
22:30:50
Callback是指向IComIRQ_Vtbl的指针
22:31:36
为何用2个不用一个结构???
22:32:24
一会就明白了它的真谛了
typedef struct IComIRQ_Vtbl//回调函数指针或回调函数数组结构
{
union{
CALLBACK FnArray[32];//回调函数数组
struct{//回调函数指针结构
void (*BOD_IRQCallbackPtr)(void);//0 DrvSYS.C已使用
void (*WDT_IRQCallbackPtr)(void);//1
void (*EINT0_IRQCallbackPtr)(void);//2
void (*EINT1_IRQCallbackPtr)(void);//3
void (*GPAB_IRQCallbackPtr)(void);//4
void (*GPCDE_IRQCallbackPtr)(void);//5
void (*PWMA_IRQCallbackPtr)(void);//6
void (*PWMB_IRQCallbackPtr)(void);//7
void (*TMR0_IRQCallbackPtr)(void);//8
void (*TMR1_IRQCallbackPtr)(void);//9
void (*TMR2_IRQCallbackPtr)(void);//10
void (*TMR3_IRQCallbackPtr)(void);//11
void (*UART02_IRQCallbackPtr)(void);//12 注意Uart0和Uart1公有一个回调函数
void (*UART1_IRQCallbackPtr)(void);//13
void (*SPI0_IRQCallbackPtr)(void);//14
void (*SPI1_IRQCallbackPtr)(void);//15
void (*SPI2_IRQCallbackPtr)(void);//16
void (*SPI3_IRQCallbackPtr)(void);//17
void (*I2C0_IRQCallbackPtr)(void);//18
void (*I2C1_IRQCallbackPtr)(void);//19
void (*CAN0_IRQCallbackPtr)(void);//20
void (*CAN1_IRQCallbackPtr)(void);//21
void (*SD_IRQCallbackPtr)(void);//22
void (*USBD_IRQCallbackPtr)(void);//23
void (*PS2_IRQCallbackPtr)(void);//24
void (*ACMP_IRQCallbackPtr)(void);//25
void (*PDMA_IRQCallbackPtr)(void);//26
void (*I2S_IRQCallbackPtr)(void);//27
void (*PWRWU_IRQCallbackPtr)(void);//28 DrvSYS.C已使用
void (*ADC_IRQCallbackPtr)(void);//29
void (*DAC_IRQCallbackPtr)(void);//30
void (*RTC_IRQCallbackPtr)(void);//31
}FnPtr;//回调函数指针
};
}IComIRQ_Vtbl, *pIComIRQ_Vtbl;//回调函数指针或回调函数数组结构
22:35:37
第2个结构体内存放了M0的全部32个回调函数
22:36:46
哈哈~~~断掉它将会如何???------------------加密
一叶擒王(106821270) 22:37:00
加密?
22:37:09
对
22:37:56
假若你的系统没了任何中断会将如何?
22:38:32
union{
CALLBACK FnArray[32];//回调函数数组
struct{//回调函数指针结构
void (*BOD_IRQCallbackPtr)(void);//0 DrvSYS.C已使用
void (*WDT_IRQCallbackPtr)(void);//1
22:39:58
这是菜农将COM接口变异了
FnArray是数组,入口是中断序号,假若密码解不开了,程序将飞往何方???
22:40:46
呵呵,手机中的战斗机
22:42:22
这就是俺在论坛了的加密理念
22:42:39
论坛纠结,无法沟通~~~
22:43:48
这就是菜农COM接口应用的一部分,虽少但精华所在
22:44:26
http://www.hotpower.org/HotAjax/HotPower_HotAjax.html
22:44:48
加上俺的HotWC3(厕所密码3)
22:45:46
这是菜农的三个自主知识产权构成的密码体系
22:47:35
就到这里?
22:48:17
关键是可气芯唐的没UID
22:49:32
告诫大家,不用用CRC加密,俺100%**~~~~
22:50:23
变异就不一样了~~~
22:51:10
http://blog.secdoctor.com/html/75/475.html
|