restrict的作用就是限制一个指针对一块内存的访问,进一步说就是如果一块内存区域通过一个受限制指针访问,那么它就不能通过另一个受限指针访问。
引入restrict的目的是确保同一块内存上没有其它引用,让编译器更好地优化指令,生成更有效的汇编代码。
把#pragma MUST_ITERATE( , , )放在循环体之前,告知开发板循环次数,改善软件流水
MUST_ITERATE告诉编译器循环的属性,但是这些属性必须是真实的,不然程序可能运行出错。此指令主要用于优化C函数循环,一般情况下,只要有循环都最好带上此指令
#pragma MUST_ITERATE(min, max, multiple);其中multiple参数必须有,循环执行次数必是multiple的整数倍。
这个信息对编译器使用软件流水技术非常重要
那min和max是最大和最小循环次数
const short *restrict x;
//Assumption: Vectors x and h are double-word aligned
_nassert((int)x % 8 == 0);
是个断言语句。 对条件进行判断,如果为1,通过,为0,则抛出异常。
通过对printf() 和 LOG_printf() 运行时间作比较发现,在C6211运行在150MHz的情况下,printf()需花费4000个周期约26.7μs, LOG_printf()只花费36个周期约0.24μs。printf() 比 LOG_printf() 多开销100倍以上的时间,因此 LOG_printf() 对于实时地显示一些运行状态是非常有帮助的。而且对于熟悉C语言的开发者来说, LOG_printf() 的调用格式几乎与printf() 完全一样。
就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
一般说来,volatile用在如下的几个地方:
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
asm (" ESTOP0");
for(;;);
asm (" ESTOP0"); 是停止仿真的意思。
1.连接仿真器后ESTOP0是0还是1?
是1的话就会停止仿真
是0的话就会执行下面的for循环, 处理器就停留在此处了。。。。
General Purpose Input Output (通用输入/输出)简称为GPIO