Questions tagged «c»

C是命令式(过程式)系统实现语言。它被设计为使用相对简单的编译器进行编译,以提供对内存的低级访问,提供可有效映射到机器指令的语言构造,并且需要最少的运行时支持。因此,C对于以前使用汇编语言进行编码的许多应用程序很有用。来自http://en.wikipedia.org/wiki/C_(programming_language)

2
标准文字LCD菜单系统
是否有用于C的简单菜单系统的模式,用于文本LCD。我发现自己经常重写代码来处理简单的文本LCD菜单。 我发现大多数系统都有一个主菜单和一些子菜单,选择这些菜单后,您便可以在最小和最大值之间设置参数。 理想情况下,可以使用4个简单的键(例如Enter,Cancel,Up和Down)浏览此菜单系统。 在我的应用程序中,我使用的是2行x 16字符的文本LCD,尽管理想的解决方案应该可以应用于任何NxM显示器。
10 lcd  c 

4
STM32:定时器中断立即起作用
这是我的STM32F429项目中的计时器代码: //timer initialization void timerInit() { uwPrescalerValue2 = (uint32_t) ((SystemCoreClock / 2) / 100000) - 1; RS485Timer.Instance = TIM5; RS485Timer.Init.Period = 67400000; // high value to notice interrupt even without debugging RS485Timer.Init.Prescaler = 400000; RS485Timer.Init.ClockDivision = 0; RS485Timer.Init.CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_Base_Init(&RS485Timer); } void timerReset() { HAL_TIM_Base_Stop_IT(&RS485Timer); HAL_TIM_Base_DeInit(&RS485Timer); HAL_TIM_Base_Init(&RS485Timer); HAL_TIM_Base_Start_IT(&RS485Timer); printf("%d …

7
Arduino串行打印不希望地改变了程序的行为
我正在使用在标头中声明的循环计数器: int loop_counter = 0; 我经常使用此计数器触发事件​​。我曾经对这种类型的行为使用模,但是我简化了它,因此使用起来更容易(它仍然会导致相同的行为) void loop() { if(loop_counter > 100) loop_counter = 0; else loop_counter++; //Serial.println("hey"); if(loop_counter == 0) { //do_something_important(); } } 一切都很好,直到我尝试Serial取消注释//Serial.println("hey"); ("hey"在此示例中,因为对我而言,这种行为是荒谬的)来与之交流。 这将导致loop_counter永远不会触发do_something_important();代码部分。我尝试声明loop_counter为volatile,但没有任何改变。我尝试了Serial.printing loop_counter,而且我也得到了奇怪的行为(它将冻结循环)。 Serial.println("hey");在串行监视器中,我得到很多“嘿”的意思(即很快超过100个“嘿”,这是另一部分代码应触发的迭代次数) 是什么原因导致的使用Serial,而数据(据我所知)并未loop_counter完全阻止其正常运行? 编辑:这是最终导致问题的主文件部分(嗯,为它做出了最大的贡献(使用过多的内存)): void display_state() { int i,j,index=0; short alive[256][2]; for(i=0;i<num_rows;i++) { for(j=0;j<num_cols;j++) { if(led_matrix[i][j]==1) { alive[index][0]=i; alive[index][1]=j; index++; } } …

2
将可变字符打印到UART不起作用,常数可以正常工作
我在PIC18F27K40单片机上的XC8有一个很奇怪的问题。在PIC16F1778上它可以工作。我定义了: void uart_putch(unsigned char byte) { while (!PIR3bits.TX1IF); TX1REG = byte; } 在我的main循环中,当我致电时uart_putch('a');,它工作正常。但是,当我定义const char c = 'a';并调用时uart_putch(c);,它不起作用。它打印出一些内容,尽管不是a-我认为它们是0x00字符,是我从中得到的hexdump -x /dev/ttyUSB0。这不是我计算机上串行端口的问题;我看了一下示波器,信号却不同(左起作用,右没有): 代码很简单: void main(void) { init(); // Sets up ports and UART control registers while (1) { uart_putch('a'); // or c } } 我认为与之相关的任何字符串函数(puts,printf等)也不起作用,因此在这个问题中,我用字符做了一个最小的工作示例。 使用变量时生成的程序集c具有: _c: db low(061h) global __end_of_c _main: ; …

4
为什么GCC编译器会省略一些代码?
我不明白为什么GCC编译器会在保留附近绝对相同的代码的同时删掉部分代码? C代码: #define setb_SYNCO do{(PORTA|= (1<<0));} while(0); ISR(INT0_vect){ unsigned char i; i = 10; while(i>0)i--; // first pause - omitted setb_SYNCO; setb_GATE; i=30; clrb_SYNCO; while(i>0)i--; // second pause - preserved clrb_GATE; } LSS的相应部分(汇编文件,由编译器创建): ISR(INT0_vect){ a4: 1f 92 push r1 a6: 0f 92 push r0 a8: 0f b6 in r0, 0x3f …
9 avr  c  avr-gcc  optimization  gcc 


2
定点三角函数用于嵌入式应用
我需要在嵌入式应用程序中进行旋转(和其他)转换,需要sin()cos()和tan()函数。我知道您可以使用查找表,这是我自己进行研究时可以找到的唯一解决方案,但是那里有一个好的定点触发库吗? 我正在考虑为应用程序使用cortex M3,因此我想尽可能远离浮点,以使应用程序保持简洁。
9 c  embedded  arm 

1
用合成的ROM内核模拟一个简单的测试台
我对FPGA领域是一个全新的领域,并认为我将从一个非常简单的项目开始:一个4位7段解码器。我纯粹用VHDL编写的第一个版本(基本上是单个组合select,不需要时钟),并且似乎可以使用,但我也想尝试使用Xilinx ISE中的“ IP内核”功能。 因此,现在我正在使用“ ISE Project Explorer” GUI,并使用ROM内核创建了一个新项目。生成的VHDL代码为: LIBRARY ieee; USE ieee.std_logic_1164.ALL; -- synthesis translate_off LIBRARY XilinxCoreLib; -- synthesis translate_on ENTITY SSROM IS PORT ( clka : IN STD_LOGIC; addra : IN STD_LOGIC_VECTOR(3 DOWNTO 0); douta : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END SSROM; ARCHITECTURE SSROM_a OF SSROM IS -- …

3
在单独的选项卡/头文件中调用Serial.print
我正在用Arduino 0022编写程序。 Serial.println在我的主要草图代码中,调用工作正常,但是当我尝试Menu.h在单独的选项卡中的头文件“ ”中使用它时,出现错误: 在AppController.cpp包含的文件中:2: Menu.h:在构造函数'Menu :: Menu()'中: Menu.h:15:错误:在此范围内未声明'Serial' 如何Serial.println在草图代码之外使用?
9 arduino  c 

5
从带有ATmega32的嵌入式C(ATmega AVR系列)开始
我周围有一块ATmega32板,我认为从微控制器开始是完美的。我曾经在嵌入式C中做过些小事(那是在我获得此板时),但是由于某些原因,流程停止了。现在我有两个问题: 对于AVR系列,以C开始的最佳免费资源是什么。我知道AVR-GCC,但正在寻找一些入门指南或免费书籍。 我应该直接跳到C还是先通过ASM?我看到周围有很多asm书。那么什么是更好的选择? 在Internet上搜索时,我在http://retrointerface.com/?p=30上找到了ATmega32的Arduino引导加载程序,但问题是我不愿对保险丝位和所有器件进行修补。这样做安全吗?
9 avr  atmega  books  c 

2
PIC12F675 GP4不起作用
我正在为一个项目使用PIC12F675,除一件事情外,其他所有东西都工作正常。GP4不能用作数字IO。我已经看了很多配置和代码,但是找不到任何东西。 配置: #pragma config FOSC = INTRCCLK #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config BOREN = ON #pragma config CP = OFF #pragma config CPD = OFF 码: #include <xc.h> #include <math.h> #include "config.h" #define _XTAL_FREQ 4000000 void delay(unsigned int …
9 pic  c  embedded  programming  audio  oscillator  spark  dc-dc-converter  boost  charge-pump  eagle  analog  battery-charging  failure  humidity  hard-drive  power-supply  battery-charging  charger  solar-energy  solar-charge-controller  pcb  eagle  arduino  voltage  power-supply  usb  charger  power-delivery  resistors  led-strip  series  usb  bootloader  transceiver  digital-logic  integrated-circuit  ram  transistors  led  raspberry-pi  driver  altium  usb  transceiver  piezoelectricity  adc  psoc  arduino  analog  pwm  raspberry-pi  converter  transformer  switch-mode-power-supply  power-electronics  dc-dc-converter  phase-shift  analog  comparator  phototransistor  safety  grounding  current  circuit-protection  rcd  batteries  current  battery-operated  power-consumption  power-electronics  bridge-rectifier  full-bridge  ethernet  resistance  mosfet  ltspice  mosfet-driver  ftdi  synchronous  fifo  microcontroller  avr  atmega  atmega328p  verilog  error  modelsim  power-supply  solar-cell  usb-pd  i2c  uart 

6
从嵌入式C角度看static关键字的概念
static volatile unsigned char PORTB @ 0x06; 这是PIC微控制器头文件中的一行代码。的@操作者用于存储地址内的值PORTB 0x06,这是PIC控制器表示PORTB内部的寄存器。到目前为止,我有一个明确的想法。 该行在头文件(.h)中声明为全局变量。因此,根据我对C语言的了解,“静态全局变量”对于其他任何文件都不可见-或简单地说,不能在当前文件外部使用静态全局变量/函数。 然后,该关键字如何PORTB对我的主源文件和我手动创建的许多其他头文件可见? 在我的主源文件上,我仅添加了头文件,#include pic.h这与我的问题有关吗?


2
真的需要手动清除XMEGA定时器溢出中断标志吗?
你们中有些人可能知道,Atmel提供了一个软件框架(主要是Atmel Studio的一部分),该框架提供了驱动程序和示例,并且或多或少定期进行更新。 他们在最近的更新中明确指出,在中断回调函数中手动清除溢出中断标志很重要。 // * \subsection xmega_tc_qs_ovf_setup_code Example code // * // * Add a callback function that will be executed when the overflow interrupt // * trigger. // * \code static void my_callback(void) { // User code to execute when the overflow occurs here // THIS WAS ADDED IN …
8 c  atmel-studio  xmega 

4
嵌入式C程序的生命周期内运行一次代码
如何使代码段在程序的生命周期内仅运行一次?它可以关闭和打开很多次。再次运行代码段的唯一选择必须是再次刷新电路板。 该代码是“校准部分”,我不想再次运行。如果我使用EEPROM或闪存,我们将标志设置为true或False。因此,当我们第一次读取该内存位置时,该内存区域中的随机值是多少? 在嵌入式C中实现此功能的最佳方法是什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.