473,554 Members | 2,949 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before '{' token

8 New Member
Hi
I am using WINAVR compiler for ATMEGA32. While compiling c progam , I am getting the error
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribu te__’ before '{' token
before evrey function.

code:


Expand|Select|Wrap|Line Numbers
  1. #include <avr\io.h>
  2.  
  3. #include <stdio.h>
  4.  
  5. #include <avr\delay.h>
  6.  
  7. #include <math.h>
  8.  
  9. void initialize(void);
  10.  
  11. char val;
  12.  
  13.  
  14.  
  15. // current measurement state
  16.  
  17. enum {PULSE, GSR, BREATH} measure, nextmeasure;
  18.  
  19.  
  20.  
  21. // current signal voltages
  22.  
  23. char pulseV = 0;
  24.  
  25. char gsrV = 0;
  26.  
  27. char breathV = 0;
  28.  
  29.  
  30.  
  31. // enter every 100Hz
  32.  
  33. interrupt(TIM0_COM) void getAD(void)
  34.  
  35. {
  36.  
  37.     // sample A/D and store
  38.  
  39.     val = ADCH;
  40.  
  41.     // start a/d converter
  42.  
  43.     switch(measure)
  44.  
  45.     {
  46.  
  47.         case PULSE:
  48.  
  49.             pulseV = val << 1;
  50.  
  51.             nextmeasure = GSR;
  52.  
  53.             break;
  54.  
  55.         case GSR:
  56.  
  57.             gsrV = val;
  58.  
  59.             nextmeasure = BREATH;
  60.  
  61.             break;
  62.  
  63.         case BREATH:
  64.  
  65.             breathV = val;
  66.  
  67.             nextmeasure = PULSE;
  68.  
  69.             break;
  70.  
  71.     }
  72.  
  73.  
  74.  
  75.     switch(nextmeasure)
  76.  
  77.     {
  78.  
  79.         case PULSE:  ADMUX = 0b01100001; break;
  80.  
  81.         case GSR:    ADMUX = 0b01100010; break;
  82.  
  83.         case BREATH: ADMUX = 0b01100011; break;
  84.  
  85.     }
  86.  
  87.     measure = nextmeasure;
  88.  
  89.  
  90.  
  91.     ADCSR.6 = 1;
  92.  
  93. }
  94.  
  95.  
  96.  
  97. // send signals to MATLAB for drawing
  98.  
  99. void transmit()
  100.  
  101. {
  102.  
  103.     printf("%d ", (int)pulseV);
  104.  
  105.     printf("%d ", (int)gsrV);
  106.  
  107.     printf("%d ", (int)breathV);
  108.  
  109.     printf("\r");    // end packet
  110.  
  111.     PORTD.7 = ~PORTD.7;
  112.  
  113. }
  114.  
  115.  
  116.  
  117. // read A/D converter and communicate with MATLAB
  118.  
  119. void main(void)
  120.  
  121. {
  122.  
  123.     char inchar;
  124.  
  125.  
  126.  
  127.     initialize();
  128.  
  129.  
  130.  
  131.     while(1)
  132.  
  133.     {
  134.  
  135.         // when signaled by MATLAB, return current values
  136.  
  137.         if (UCSRA.7)
  138.  
  139.         {
  140.  
  141.             inchar = UDR;
  142.  
  143.             if (inchar=='s') {
  144.  
  145.                 transmit();
  146.  
  147.             }
  148.  
  149.         }
  150.  
  151.     }
  152.  
  153. }
  154.  
  155.  
  156.  
  157. // setup
  158.  
  159. void initialize(void)
  160.  
  161. {
  162.  
  163.     // comm indicator LED
  164.  
  165.     DDRD.7 = 1;
  166.  
  167.     PORTD.7 = 0;
  168.  
  169.  
  170.  
  171.     // serial RS-232  setup for debugging using printf, etc.
  172.  
  173.     UCSRB = 0x18;
  174.  
  175.     UBRRL = 103;
  176.  
  177.  
  178.  
  179.     // set up timer0 to sample a/d at about 100Hz
  180.  
  181.     TCCR0 = 0b00000101;
  182.  
  183.     TIMSK = 0b00000010;
  184.  
  185.     OCR0 = 156;
  186.  
  187.  
  188.  
  189.     // set up a/d for external Vref, channel 0
  190.  
  191.     // channel zero / left adj / AVcc Reference
  192.  
  193.     // A1=PULSE, A2=GSR, A3=BREATH
  194.  
  195.     ADMUX = 0b01100001;
  196.  
  197.  
  198.  
  199.     // enable ADC and set prescaler to 1/128*16MHz=125kHz
  200.  
  201.     // and clear interupt enable
  202.  
  203.     // and start a conversion
  204.  
  205.     ADCSR = 0b11000111;
  206.  
  207.  
  208.  
  209.     measure = PULSE;
  210.  
  211.     _sei();
  212.  
  213. }
Oct 18 '09 #1
10 31962
Banfa
9,065 Recognized Expert Moderator Expert
I can't see anything particularly wrong with this code, allowing for AVR micro-controller extensions, are these the only errors you are getting?

If not please post all your errors.
Oct 18 '09 #2
anju1401
8 New Member
I am getting the following errors:

c:/winavr-20090313/lib/gcc/../../avr/include/avr\delay.h:36: 2: warning: #warning "This file has been moved to <util/delay.h>."
try.c:33: warning: return type defaults to 'int'
try.c:33: warning: function declaration isn't a prototype
try.c: In function 'interrupt':
try.c:35: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
try.c:99: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
try.c:121: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
try.c:159: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
try.c:213: warning: type of 'TIM0_COM' defaults to 'int'
try.c:213: error: expected '{' at end of input
Oct 18 '09 #3
Banfa
9,065 Recognized Expert Moderator Expert
SOunds like a problem with

interrupt(TIM0_ COM) void getAD(void)

I would start my removing interrupt(TIM0_ COM) from this line and seeing it you can get it to compile. This wont produce a runable program but will make sure you have your C syntax correct.

The interrupt(TIM0_ COM) is clearly an extension presumably to generate interrupt routines for the AVR micro-controler. That means it is an extension and not standard C. You will have to careful check your compiler documentation and make sure you are using the extension correctly including
  • Setting any compiler switches required by the extension.
  • Including any headers required by the extension.

Above all make sure you read your compiler documentation on how to define interrupt handlers.
Oct 18 '09 #4
anju1401
8 New Member
Thanks.I have not included the file "avr\interrupt. h". But after adding this file I am getting the following errors :

try.c:91: error: expected ';' before numeric constant
try.c:111: error: expected ';' before numeric constant
try.c:137: error: expected ';' before numeric constant
try.c:165: error: expected ';' before numeric constant
try.c:167: error: expected ';' before numeric constant

Can't I access just one bit of any register?
Oct 19 '09 #5
newb16
687 Contributor
You can, but the source code you got is for some other compiler for avr - iar, icc or whatever. avr-gcc doesn't support "regname.N" bit addressing, use instead
regname |= 1<<N to set bit N.
Oct 19 '09 #6
Banfa
9,065 Recognized Expert Moderator Expert
Well no, or may be yes, but not like that. There is no way that this syntax

ADCSR.6 = 1;

could be valid standard C and it is an unlikely extension.

The way to access a bit in the register (assuming 8 bit registers) is this
Expand|Select|Wrap|Line Numbers
  1.     /* To read */
  2.     unsigned char reg = ADCSR;
  3.     unsigned char bit;
  4.  
  5.     bit = (reg >> N) & 1;
  6.  
  7.     /* To Write */
  8.     ADCSR |= (1 << N);
  9.  
Where in both cases N is the bit number to access in the range 0 - 7.

Accessing bits in registers must be done carefully. It is easy to accidentally destroy data. For instance (and I take this from a real life error) imagine an 8 bit register that has 4 data bits and a data ready bit that indicates the data bits are valid. When you read the register the data ready bit is cleared and the hardware starts acquiring another value (as in an ADC).

I saw (and corrected an implementation) that did this

Expand|Select|Wrap|Line Numbers
  1.     int data;
  2.     if (REGISTER & DATA_READY_BIT) /* Test data ready bit */
  3.     {
  4.         data = REGISTER & DATA_BITS_MASK;
  5.     }
  6.  
The problem is that the register is actually read twice. The first time to test the data ready bit, the second time to read the data if it is set. That sounds fine but remember my description above. When you read the register the data ready bit is cleared and the hardware starts acquiring another value invalidating the data bits. This method effectively invalidates the data bits testing the data ready bit, you can never read a proper value form the register.

It needs to be written like this

Expand|Select|Wrap|Line Numbers
  1.     int data;
  2.     unsigned char reg;
  3.  
  4.     reg = REGISTER;
  5.  
  6.     if (reg & DATA_READY_BIT) /* Test data ready bit */
  7.     {
  8.         data = reg & DATA_BITS_MASK;
  9.     }
  10.  
This only reads the register once, then if the data ready bit is set it uses the value read at the same time as the data ready bit.


The point is that when you access (for read or write) hardware registers directly you have to be aware of any side effects that access may have on that or other registers.

You will need to know and understand the bitwise and shift operators.
Oct 19 '09 #7
anju1401
8 New Member
Thanks a lot for your help. Can you also tell me how to go about correcting it :
PORTD.7 = ~PORTD.7; ?
Oct 19 '09 #8
Banfa
9,065 Recognized Expert Moderator Expert
You are trying to toggle bit 7, yes?

You need to use xor ^ operator.

Either read the register into a variable perform the xor and write out the new value or xor directly with the register ^=.

In the rhs operand set the bits you want to toggle to 1and bits you want to leave along to 0.

PORTD ^= 0x80;
Oct 19 '09 #9
anju1401
8 New Member
Yes , I was trying to toggle that particular bit.
Thanks a lot for your help.
Oct 30 '09 #10

Sign in to post your reply or Sign up for a free account.

Similar topics

4
3565
by: jakkem | last post by:
For example the following gives me error "expected `(' before '{' token" "expected asm body before '{' token " etc. int main() { asm { /* some asm-functions */ } }
5
2397
by: ritesh | last post by:
Hi, I'm compiling the following code on linux/cc and keep getting a compiler error "attrib.c:4: syntax error before '{' token" I'm using the following options to compile - cc -Wall -c attrib.c #include "stdio.h"
3
3306
by: creativeinspiration | last post by:
Hey guys. I am trying to implement a system call in linux kernel. I usually use ubutntu, but this I am doing on Fedora. I am using kernel 2.6. Here is what I did: 1. Added a line to arch/i386/kernel/syscall_table.S: .long sys_foo 2. Added a line to linux/include/asm-i386/unistd.h: #define __NR_foo 324
1
2702
by: m.selvakannan | last post by:
hi iam working with uclinux i got errors while compilation.. /opt/uClinux/bfin-uclinux/bfin-uclinux/runtime/usr/include/asm/ system.h: In function 'long unsigned int __cmpxchg(volatile void*, long unsigned int, long unsigned int)': /opt/uClinux/bfin-uclinux/bfin-uclinux/runtime/usr/include/asm/ system.h:204: error: expected...
2
1645
by: entellus | last post by:
I'm using gcc to compile the code listed below when I get the following error error: expected '=', ',', ';', 'asm' or '__attribute__' before ' is_prime_number /* * What is the largest prime factor of the number 317584931803? */ #include <stdio.h>
2
8092
by: kya2 | last post by:
I am not able to create following store procedure. CREATE PROCEDURE DBSAMBA.InsertDeleteBatch(OUT norows INT ) RESULT SETS 1 LANGUAGE SQL BEGIN part1 DECLARE TOTAL_LEFT INT DEFAULT 0; SELECT COUNT(*)INTO TOTAL_LEFT FROM DBSAMBA.REPORTEDTRANSACTION_S; WHILE (TOTAL_LEFT > 0) DO
4
2361
by: ...vagrahb | last post by:
Hi, I have the following structure struct Format { char x; unsigned char a; unsigned char b; unsigned char c; char y;
7
70268
by: singhPrabhat | last post by:
Hi, I am using gcc (GCC) 4.2.1 (SUSE Linux). SUSE 10.3 While compiling a .c file I get following error :::: CCWebConfiguration.h:70: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘extern’ CCWebBrowser.c: In function ‘main’:
2
6344
by: akhilesh.noida | last post by:
I am trying to compile glibc-2.5 for ARM based board. But I am getting errors while configuring it. Please check and give your inputs for resolving this. configure command : $ ../glibc-2.5/configure --prefix=/mnt/new/Mars/glibc_HQ_test/GLIBC/ install/ --with-__thread --enable-kernel=2.6.11 --enable-shared
0
7600
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main...
0
7521
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language...
1
7563
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For...
0
7889
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the...
0
6145
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then...
1
5436
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Duprι who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes...
0
5155
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert...
1
2020
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
0
841
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.