简体   繁体   中英

c program functionality confusion

I'm pretty new to c programming and I have this following program to degub. Problem is, I have no idea what these lines of code even mean. Could anyone point me in the direction of what they mean as far as from a syntax point of view/functionality? What does the code do? The code is compiled with MPLab C30 v3.23 or higher.

fractional abcCoefficient[3] __attribute__ ((space(xmemory)));    /*ABC Coefficients loaded from X memory*/

fractional controlHistory[3] __attribute__ ((space(ymemory)));    /*Control History loaded from Y memory*/

fractional kCoeffs[] = {0,0,0};     /*Kp,Ki,and Kd gains array initialized to zero*/

These lines declare variables; there's no execution code associated with what you've pasted.

The environment this code is intended for understands that fractional is a type; either in the same file or in a header this file includes (directly or indirectly), fractional will be defined with a typedef statement. In your examples, each of the variables are arrays of three fractional types.

The __attribute__ ((space(?memory))) entries are attributes the compiler intended to build this understands and affect something regarding how the variables are managed. You'll want to consult the compiler documentation for the platform you're using.

See this page to learn about __attribute__ in gcc (however, I don't see a space(xmemory) option in there, consult your compiler's documentation if it's not gcc. If it is, then space() can be a macro). fractional is also a custom type, search for typedef definitions for fractional.

Basically, the code is creating a bunch of arrays of type fractional . The first two make use of gcc's attribute extension (or whatever compiler you are using), and the last one is initialized to 0 on every position.

It looks like "fractional" is a custom type, look for its typedef somewhere and it should get you started on what you're looking at. I expect these are variable declarations.

Macros are established using the "#define" preprocessor directive, so you can look for "#define space(x) code" somewhere to tell you what it does. Good luck.

The first two lines declare arrays with three elements each. The type is fractional , which is probably a typedef (to a struct with numerator and denominator?). The comments suggest that the data is stored in another memory space, perhaps some sort of Flash.

So the program seems to be for an embedded system.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM