有人可以解释两种实现之间的主要区别(优点/缺点)吗?
对于库,建议使用什么实现?
有哪些方法可用于确定嵌入式/内存受限系统的最佳堆栈大小?如果它太大那么浪费的内存可以在其他地方使用.但是,如果它太小,那么我们得到这个网站的同名......
为了尝试快速启动:Jack Ganssle在"嵌入式系统设计的艺术"中指出,"凭借经验,人们可以学习标准的,科学的方法来计算堆栈的正确尺寸:随机选择尺寸并希望." 任何人都可以做得更好吗?
要求提供更具体的例子.那么,在没有操作系统的情况下使用IAR Embedded Workbench工具链,针对具有2 kB RAM 的MSP430 MCU的C程序怎么样?使用JTAG调试器时,此IDE可以显示堆栈内容和使用情况.
我正在编写一个3d引擎,我遇到了DirectX文档中描述的LookAt算法:
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) l
Run Code Online (Sandbox Code Playgroud)
现在我得到它在旋转方面的工作方式,但我不太明白的是为什么它将矩阵的平移组件放在那些点积上.稍微检查一下,它似乎是根据新基础矢量投影到眼睛/摄像机位置上的一小部分来调整摄像机位置.
问题是为什么需要这样做?它完成了什么?
如果我编写一个使用其他预处理器常量执行操作的#define,那么每次宏在运行时出现时计算的最终值是多少?这取决于编译器中的优化,还是属于标准?
例:
#define EXTERNAL_CLOCK_FREQUENCY 32768
#define TIMER_1_S EXTERNAL_CLOCK_FREQUENCY
#define TIMER_100_MS TIMERB_1_S / 10
Run Code Online (Sandbox Code Playgroud)
将操作十分之三万二千七百六十八每次都发生在运行时我用的是TIMER_100_MS宏?
我想避免以下情况:
#define EXTERNAL_CLOCK_FREQUENCY 32768
#define TIMER_1_S EXTERNAL_CLOCK_FREQUENCY
#define TIMER_100_MS 3276
Run Code Online (Sandbox Code Playgroud)
编译器需要能够计算常量积分表达式,因为它们是在编译时计算数组大小等内容所必需的.但是,标准只说他们"可以" - 而不是"必须" - 这样做.因此,只有脑死亡编译器不会在编译时评估常量积分表达式,但是对非常规编译器的汇编输出的简单检查将验证每种情况.
c compiler-construction optimization standards c-preprocessor
有没有直接的方法从c#(或一般的.NET)中获取双尾数和指数?
我发现这个使用谷歌的例子,但我不确定它会有多强大.二进制表示可以在框架的某些未来版本中进行双重更改吗?
我发现的另一个替代方法是使用System.Decimal而不是double,并使用Decimal.GetBits()方法来提取它们.
有什么建议?
微控制器通常需要读取寄存器以清除某些状态条件.在C中是否有可移植的方式来确保在不使用数据的情况下不优化读取?指向内存映射寄存器的指针是否足以声明为volatile?换句话说,以下是否始终适用于标准兼容编译器?
void func(void)
{
volatile unsigned int *REGISTER = (volatile unsigned int *) 0x12345678;
*REGISTER;
}
Run Code Online (Sandbox Code Playgroud)
我知道处理这样的功能会遇到编译器相关的问题.所以,在这种情况下,我对便携式设备的定义有点松散.我只是说它会尽可能广泛地使用最流行的工具链.
我需要声明一个指向函数的指针数组,如下所示:
extern void function1(void);
extern void function2(void);
...
void (*MESSAGE_HANDLERS[])(void) = {
function1,
function2,
...
};
Run Code Online (Sandbox Code Playgroud)
但是,我希望将数组声明为常量 - 数组中的数据和指向数据的指针.不幸的是,我不记得在哪里放置const关键字.
我假设在这种情况下,实际指针MESSAGE_HANDLERS已经是常量,因为它被声明为数组.另一方面,如果声明如图所示,那么数组中的函数指针是否可以在运行时更改?
我有一个需要新功能的传统固件应用程序.应用程序的大小已经接近设备的有限闪存容量,并且少数新功能和变量将其推到了边缘.打开编译器优化可以解决这个问题,但客户对这样做很谨慎,因为它们过去曾导致过失败.那么,在重构C代码以产生较小的输出时,需要注意哪些常见的事情?