Tag: 嵌入式

在C中实现Goertzel算法

我正在DSP处理器上实现BFSK跳频通信系统。 一些论坛成员建议使用Goertzel算法解调特定频率的跳频。 我已经尝试在C中实现goertzel算法。代码如下: float goertzel(int numSamples,int TARGET_FREQUENCY,int SAMPLING_RATE, float* data) { int k,i; float floatnumSamples; float omega,sine,cosine,coeff,q0,q1,q2,result,real,imag; floatnumSamples = (float) numSamples; k = (int) (0.5 + ((floatnumSamples * TARGET_FREQUENCY) / SAMPLING_RATE)); omega = (2.0 * M_PI * k) / floatnumSamples; sine = sin(omega); cosine = cos(omega); coeff = 2.0 * cosine; q0=0; q1=0; q2=0; for(i=0; […]

学习嵌入式C / C ++开发的最佳评估套件是什么?

我正在尝试改进我在ARM体系结构上的嵌入式C / C ++开发。 我最近从68K开发转向ARM,并希望利用我的业余时间深入挖掘平台并学习最佳实践,尤其是开发移动平台。 优选地,32位架构将有助于支持开发工具。 学习过程中的一些乐趣可以增强我对平台的理解

用于嵌入式系统的C XML库

我正在开发一个嵌入式系统的项目,该系统使用XML将数据输入和输出系统。 我不希望XML处理转换成一堆使用snprintf() / strcat()和朋友构建XML字符串的位,或者通过计算“ < ”和“ > ”字符来解析XML。 我发现了几个XML库,其中一些甚至可能足够小,但它们最接近C的是C ++,这不是这个系统的卡片。 我希望我能找到一个满足以下约束条件的XML库: C源代码 没有动态内存分配 廉价。 免费更好,但Copyleft不会这样做。 它不一定是一个完整的解析器 – 我只是希望能够从嵌套元素中提取文本,并且有一种相当简单的方法来生成不依赖于格式字符串的XML。 属性尚未被使用(因此),因此库甚至不需要支持它们。 XML文档非常小,所以类似DOM的东西就可以了,只要它可以与客户端提供的缓冲区一起工作(就地解析原始XML会很好)。 PugXML和TinyXML看起来非常接近,但我希望那里的人知道一个专为基于C的嵌入式系统量身定制的XML库,我的谷歌搜索丢失了。

在C中使用memset()有什么好处

我很好奇在类似下面的情况下使用memset()在效率方面是否有任何优势。 鉴于以下缓冲区声明…… struct More_Buffer_Info { unsigned char a[10]; unsigned char b[10]; unsigned char c[10]; }; struct My_Buffer_Type { struct More_Buffer_Info buffer_info[100]; }; struct My_Buffer_Type my_buffer[5]; unsigned char *p; p = (unsigned char *)my_buffer; 除了少量代码之外,使用它还有一个优点: memset((void *)p, 0, sizeof(my_buffer)); 在此: for (i = 0; i < sizeof(my_buffer); i++) { *p++ = 0; }

在嵌入式C中使用带有sprintf()的浮点数

大家好,我想知道float变量是否可以在sprintf()函数中使用。 就像,如果我们写: sprintf(str,”adc_read = %d \n”,adc_read); 其中adc_read是一个整数变量,它将存储该字符串 “adc_read = 1023 \n” 在str (假设adc_read = 1023 ) 如何使用float变量代替整数?

从中断返回后的轻微延迟

我写了一个小程序,它使用STM32 Discovery板上的一个按钮作为二进制/十进制/hex模式的计数器(屏幕循环通过3个选项,一旦按下,每次按下最多计数16,然后重置为骑车穿越选项)。 我遇到了一个让我有点困惑的小“虫子”(读,不是真的)。 如果我以十进制/hex计数,它会立即返回循环选项,但如果我在二进制中计数,则需要大约1秒左右才会这样做(明显的延迟)。 int main(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); lcd_init(); button_init(); while (1) { while (!counting) { standard_output(); } } } void standard_output(void) { state = 0; lcd_command(0x01); delay_microsec(2000); lcd_putstring(“Binary”); for (i=0; i<40; i++) delay_microsec(50000); // keep display for 2 secs if (counting) return; // if we have pressed the button, want to exit this […]

微控制器C代码的unit testing模式

虽然有很多unit testing框架支持C,但我对如何为微控制器代码编写unit testing感到有些困难(在我的情况下是PIC,但我认为这个问题比这更普遍)。 为微控制器编写的大部分代码都围绕将配置和数据值写入寄存器,从寄存器读取输入数据以及响应中断事件。 我想知道是否有人可以提供一些最有效的方法指针。

嵌入式系统的小型libc

我正在寻找一个用于嵌入式使用ARM7微控制器上的freertos的小型libc。 我看过newlib,但它对我的需求来说太复杂了。 Newlib在许多函数(例如printf())中调用malloc(),这对小型嵌入式实时系统不利。 有谁知道一个适合我的应用程序的小型,可移植的开源libc实现?

嵌入式C – 函数的参数太多(指针)

我试图在我的.cpp文件中调用以下宏: #define IAP_ROM_LOCATION 0x1FFF1FF1UL #define IAP_EXECUTE_CMD(a, b) ((void (*)())(IAP_ROM_LOCATION))(a, b) 但是,当我像这样调用所述函数时: IAP_EXECUTE_CMD(0, 0); 我得到一个错误,说明了太多的参数? 这怎么样? 我会很感激任何指针。 开发环境是Cortex-M3的GCC。

用于设置和清除位的宏

我试着写一些简单的宏来简化设置和清除位的任务,这应该是一个简单的任务,但我似乎无法使它们正常工作。 #define SET_BIT(p,n) ((p) |= (1 << (n))) #define CLR_BIT(p,n) ((p) &= (~(1) << (n)))