本帖最后由 tear086 于 2010-12-24 21:40 编辑
19:10:13
在51时,俺可以累的吐血
http://www.61ic.com/Technology/embed/200604/3300.html
19:11:45
19:12:17
但在俺为什么在资源和条件好时高举C++冒着愤青们的砖块继续前进呢?
19:12:42
软硬结合才是真
19:13:51
看到这个了吗?http://www.61ic.com/Technology/embed/200604/3300.html
若没一点硬件知识,估计也难
19:14:34
俺学什么都感觉手累,何也???
19:15:04
为何这样不怕累???
19:16:09
因为不怕累,所以才能在此大“喷”
19:16:52
手过一遍眼过百遍
19:17:48
所以,51岁的老农民就记住这些了~~~俺忘了它,它也忘不了俺
19:18:49
俺见过很多用VC6的不会C,也不知道属性
19:19:10
实际就是用来C++的框架
19:20:04
假若有人说C++效率低下,也可学之
19:20:12
为何???
19:21:00
因为今天包内有函数重载,C语言是不行的
19:22:06
所以俺用C++将汇编的启动文件咔嚓了,虽然还有些问题
19:22:54
开发效率肯定高于C,至于运行效率,也可采用C
19:24:10
C++的框架在启动过程中,比C繁琐,但不影响运行效率
19:24:44
因为真理总掌握在少部分人的手里
19:25:44
追求真理就不要怕流血不要怕拍砖~~~
19:26:35
俺在2K空间的AVR 的T26上也是用的C++,竟然代码比C少,实在不解
19:27:01 HotCortex(106821270)
编译后的?
19:27:07
可能是WINAVR即GCC编译器的关系吧
19:27:17
对,俺至今不解
19:28:33
汇编暂时放放,那么俺为何在MCU上喜欢C++呢???
19:28:49 HotCortex(106821270)
跟加密有关吗
19:28:53
不
19:29:47
首先,全局类的实例的构造函数比main()先运行
19:31:47
我把研讨会的板子加上,稍后
19:32:56
请看刚才工程包内的main.cpp
19:32:59
#include "main.h"
__noinit__ volatile unsigned int SystemRamTest;// = 0x19591119;//RAM不初始化
volatile unsigned int ErrorCount = 0;
/*-------------------------------------------
注意:
1.全局类对象实例的构造函数运行级别高于main()
2.类的构造函数的运行次序与申请次序一样
--------------------------------------------*/
SystemObj System;//自动调用构造函数
SysTickObj SystemTick;//自动调用构造函数
TimerObj Timer;//自动调用构造函数
I2cObj I2c;//自动调用构造函数
WdtObj Wdt;//自动调用构造函数
TargetObj Target;//自动调用构造函数
/*-------------------------------------------
main()将在以上构造函数的后面运行
--------------------------------------------*/
int main()
{
19:33:09 林木森森(965243619)
c的启动代码可以做类似于c++全局对象构造函数的参数初始化,但这并不是c的一部分.
19:34:17
这就意味着我们的模块的初始化优先于main()执行
19:35:14
哈哈,天生就是为MCU准备的,愤青们为何极力反对呢???
19:36:26
在好多OS框架下,main()就一句:
os_Start();
19:36:57
Ti的DSP/BIOS甚至main()可以是空的
19:37:35
==俺再找证据来
19:40:42
没吃过葡萄的人总说葡萄是酸的,有人可知第一个吃西红柿即番茄的是什么人?
19:41:19
是个死囚
19:41:52
吃完还活着,被当场释放~~~
19:42:04
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
19:43:12
它也几句,一个框架,最多你再添加几句
19:44:23
俺认为C++在MCU应用中不需要析构函数,即卸载函数
19:44:28
何也???
19:45:34
MCU一般在FLASH中运行,你卸载什么???
19:45:45
哈哈
19:45:54 林木森森(965243619)
是对全局对象的,不必卸载.
19:46:17
俺应用C++是将它适合MCU的部分提纯出来
19:46:21 林木森森(965243619)
但对于动态加载的对象,有时是需要的.
19:46:58
哈哈,为一个字节能拍死你的人会用动态加载???
19:47:57
俺变异的COM接口技术应用于中断回调都有人提出效率之问题
19:49:00
今天的将汇编的启动文件咔嚓后就回应了上面红字的问题
19:49:37 林木森森(965243619)
嵌入式讲的是效率,一般用动态加载的不多.
19:49:43
为什么一定要咔嚓汇编的启动文件呢???
何也????
19:51:32
汇编的启动文件的核心是什么?
19:53:00
中断向量表
http://blog.**/hotpower/125148/message.aspx
19:58:09
//---------------------------------------------------------//
#define __IRQARRAY__ __attribute__((at(0)))//定位中断向量表在0地址处
#if __STARTUP__ == 1
//将此函数重载
extern "C" void __user_setup_stackheap(unsigned int StackMem)
{
}
#ifdef __NUC1xx_H__ //NUC100
#else//M05x
__IRQARRAY__ const CALLBACK __Vectors[16 + 32] =
{
(CALLBACK)0x20000570,//MSP __initial_sp
(CALLBACK)Reset_Handler,//Reset_Handler
(CALLBACK)NMI_Handler,//NMI_Handler
(CALLBACK)HardFault_Handler,//HardFault_Handler
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)SVC_Handler,//SVC_Handler
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)Default_Handler,//Reserved
(CALLBACK)PendSV_Handler,//PendSV_Handler
(CALLBACK)SysTick_Handler,//SysTick_Handler
//-----------------------------//
(CALLBACK)BOD_IRQHandler,//BOD_IRQHandler
(CALLBACK)WDT_IRQHandler,//WDT_IRQHandler
(CALLBACK)EINT0_IRQHandler,//EINT0_IRQHandler
(CALLBACK)EINT1_IRQHandler,//EINT1_IRQHandler
(CALLBACK)GPIOP0P1_IRQHandler,//GPIOP0P1_IRQHandler
(CALLBACK)GPIOP2P3P4_IRQHandler,//GPIOP2P3P4_IRQHandler
(CALLBACK)PWMA_IRQHandler,//PWMA_IRQHandler
(CALLBACK)PWMB_IRQHandler,//PWMB_IRQHandler
(CALLBACK)TMR0_IRQHandler,//TMR0_IRQHandler
(CALLBACK)TMR1_IRQHandler,//TMR1_IRQHandler
(CALLBACK)TMR2_IRQHandler,//TMR2_IRQHandler
(CALLBACK)TMR3_IRQHandler,//TMR3_IRQHandler
(CALLBACK)UART0_IRQHandler,//UART0_IRQHandler
(CALLBACK)UART1_IRQHandler,//UART1_IRQHandler
(CALLBACK)SPI0_IRQHandler,//SPI0_IRQHandler
(CALLBACK)SPI1_IRQHandler,//SPI1_IRQHandler
(CALLBACK)SPI2_IRQHandler,//SPI2_IRQHandler
(CALLBACK)SPI3_IRQHandler,//SPI3_IRQHandler
(CALLBACK)I2C_IRQHandler,//I2C_IRQHandler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)ACMP_IRQHandler,//ACMP_IRQHandler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)PWRWU_IRQHandler,//PWRWU_IRQHandler
(CALLBACK)ADC_IRQHandler,//ADC_IRQHandler
(CALLBACK)Default_Handler,//Default_Handler
(CALLBACK)RTC_IRQHandler,//RTC_IRQHandler
};
#endif
#endif
20:02:01
假若我们直接改写__Vectors[]的某中断向量,即中断服务程序的地址。
难道不就是一般的单片机应用了吗???
愤青们不张口结舌吗???
20:04:04
咔嚓启动文件,避开回调,将直接PK愤青们~~~
20:04:38
所以,俺的很重要的任务就是要继续
20:05:47
若需高效率代码时
20:06:37
因为愤青反对C++,俺必须预备后续手段加以对付
20:08:22
到底效率真的那么重要吗?
20:14:39
试问你的MCU的CPU占有率是多少???
即空闲认为的比例是多少?
20:15:00 笨孩子(570298585)
0
20:15:29
0,说明你全部采用的是轮询的方法
20:16:02
而且硬件模块都是IO模拟的
20:16:29
待机也算空闲
20:17:01
所以这些都是51芯片的愤青们之所为
20:17:54
新什么了,看看ARM等的硬件模块之配置
20:19:03
以前有句名言:
高人用汇编,菜鸟才用C
20:20:34
不仿请这些高人在ARM中用用汇编
20:21:26
文字池和寄存器地址就会让他住医院
20:22:15
再加上控制到位,他不少白头才怪呢
20:23:36
所以俺一生致力于如何偷懒~~~不过自己很辛苦~~~
20:24:49
是呀,这就是4500行红杏差点让俺“手残”,避免了大家的“脑残”
20:25:21
所以俺为之高兴~~~
20:35:31
C++还有一个好处就是不同类成员可以同名,或本类的函数可以重载即重名不重参数
20:36:37
这样就没必要整日操心和其他函数重名
20:36:39 hotFPGA 弟子®<yuphone@qq.com>
同名
20:37:29
COM接口虽然也可重名,但实际的C函数是不允许的
20:37:55
C可以用COM接口山寨
20:40:20
C/COM是有与和C++等高级语言PK的机会的
20:46:42
今天的课的中断就是咔嚓汇编的启动文件,
其次是C++的好处就是其构造函数就是天然的模块初始化函数
20:46:59
今天的课的重点就是咔嚓汇编的启动文件,
其次是C++的好处就是其构造函数就是天然的模块初始化函数
20:51:03
类,重载、继承、封装、多态
这些要看书学习的~~~要实践多动手,多用脑
自己判断用什么语言最合理
实际你也可只用C++的壳即构造函数,其他成员函数或成员变量实际和C一样
20:52:06
封装会减少出错,C满世界的全局函数实在倒塌
20:52:49
同文件如何避免
20:53:30
既然号称"++",肯定比前任有优点
20:54:56
C++被轻视,估计就是成员函数的调用比C函数的效率低,这是事实
20:55:26
即隐含的this指针
20:56:39
实际真的一直都是纯软件的,在硬件中,真的移植是做不到的 |