Tổ chức quản lý và nội dung các file thuộc các lớp dùng chung

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu thiết kế hệ thống điều khiển tốc độ động cơ đồng bộ nam châm vĩnh cửu (Trang 66 - 74)

Chương 4 : THIẾT KẾ MẠCH IN VÀ PHẦN MỀM

4.2.2Tổ chức quản lý và nội dung các file thuộc các lớp dùng chung

4.2 Phần mềm

4.2.2Tổ chức quản lý và nội dung các file thuộc các lớp dùng chung

Tùy theo mục đích thực hiện phần mềm, ví dụ lớp Example được tạo

bởi 3 file nguồn:

ExampleClass.h

File này được lưu trong thư mục \MC của thư viện. Đây là một file header dùng chung chứa các giao tiếp của lớp Example. Các giao tiếp của

một lớp đưa ra những định nghĩa của các phương pháp (method) được sử dụng trong các đối tượng của lớp đó. Về cơ bản,trong thư viện firmware FOC viết cho STM32F103ZET6, file này chứa tất cả các thứ cần thiết để làm việc với lớp đó. Với mục đích đó, file này chứa định nghĩa chung của kiểu lớp (CEXMP) và kiểu cấu trúc chứa các tham số hằng để tạo ra đối tượng (ExampleParams_t).

Ngồi ra, chỉ khi có u cầu, các định nghĩa của các kiểu cần cho việc sử dụng method mới được lưu trong file này.

/************************************************************** ****

* @file ExampleClass.h

* @author IMS Systems Lab and Technical Marketing - MC Team * @version V0.0.1

* @brief This file contains interface of Example class

************************************************************** ***** */ /* Includes -----------------------------------------------------*/ #include "MC_type.h" /**

* @brief Public Example class definition */

typedef struct CEXMP_t *CEXMP; /**

* @brief Example class parameters definition */

typedef const struct {

unsigned int paramA; /*!< Example of parameter */ }ExampleParams_t, *pExampleParams_t;

/**

* @brief Creates an object of the class Example

* @param pExampleParams pointer to an Example parameters structure * @retval CEXMP new instance of Example object

*/

CEXMP EXMP_NewObject(pExampleParams_t pExampleParams); /**

* @brief Example of public method of the class Example * @param this related object of class CEXMP

* @retval none */

void EXMP_Func(CEXMP this); /**

* @brief Example of virtual method of the class Example implemented by derived class

* @param this related object of class CEXMP * @retval none

*/

void EXMP_VFunc(CEXMP this);

Cần phải nhấn mạnh rằng lớp kiểu CEXMP là một con trỏ (pointer) đến một cấu trúc không kiểu (void structure) CEXMP_t. Điều này nhằm tránh cho

người sử dụng truy cập vào các thành phần đối tượng và các dữ liệu ẩn.

ExamplePrivate.h (adsbygoogle = window.adsbygoogle || []).push({});

File này được lưu trong thư mục \MC library\inc (chỉ được phân phối riêng cho STM32 FOC PMSM SDK). Đây là một lớp header riêng chứa các định nghĩa riêng cho các lớp thi hành bao gồm các định nghĩa kiểu cấu trúc dữ liệu đối tượng (các thành phần biến đối tượng của cấu trúc đó), các cấu trúc chứa các method ảo, các thông số lớp được định nghĩa lại riêng và định nghĩa lớp riêng.

************************************************************** *****

* @file ExamplePrivate.h

* @author IMS Systems Lab and Technical Marketing - MC Team * @version V0.0.1

* @brief This file contains private definition of Example class

************************************************************** *****

*/ /**

* @brief Example class members definition */

typedef struct {

unsigned int base_vars; /*!< Example of member */ }Vars_t,*pVars_t;

/**

* @brief Redefinition of parameter structure */

typedef ExampleParams_t Params_t, *pParams_t; /**

* @brief Virtual methods container */

typedef struct {

void (*pIRQ_Handler)(void *this, unsigned char flag); /*!< Only if class implementation requires to be triggered by an interrupt */

void (*pVFunc)(CEXMP this); /*!< Example of virtual function pointer */ }Methods_t,*pMethods_t;

/**

* @brief Private Example class definition */

typedef struct {

Methods_t Methods_str ;/*!< Virtual methods container */ Vars_t Vars_str; /*!< Class members container */

pParams_t pParams_str; /*!< Class parameters container */ void *DerivedClass;/*!< Pointer to derived class */

}_CEXMP_t, *_CEXMP;

Nếu có cả lớp cơ sở hoặc thi hành yêu cầu các dịng lệnh thực hiện tạo ra một ngắt (interrupt) thì một con trỏ tới các dịng lệnh này (pIRQ_Handler) cũng sẽ được định nghĩa.

ExampleClass.c

File này được lưu trong thư mục \MC library\src (chỉ được phân phối riêng cho STM32 FOC PMSM SDK), đó là một file nguồn chứa phần thi hành của các method lớp. File này bao gồm cả các định nghĩa riêng và giao tiếp của cùng một lớp.

Method Example_NewObject có một số giải thích. Method này tạo ra các đối tượng của lớp Example (CEXMP) khi có yêu cầu.

Có hai phần thi hành khác nhau của Example_NewObject được tạo ra, tùy thuộc vào hiệu lực của MC_CLASS_DYNAMIC trong định nghĩa

MCLibraryConf.h. Nếu MC_CLASS_DYNAMIC được định nghĩa thì

định vị RAM động được cho phép và các đối tượng được tạo ra thông qua một thủ tục thư viện cấp phát bộ nhờ động tiêu chuẩn, làm cho việc sử dụng bộ nhớ RAM một cách có hiệu quả. Phương pháp này khơng tương thích với các quy định của MISRA C 2004 vì có những rủi ro tiềm tàng của việc rị rỉ hoặc hư hỏng bộ nhớ do cấp phát bộ nhớ động. (adsbygoogle = window.adsbygoogle || []).push({});

Ngược lại, việc cấp phát bộ nhớ động bị cấm khi người sử dụng loại bỏ hiệu lực (comment) của định nghĩa MC_CLASS_DYNAMIC. Trong trường hợp này, một mảng của đối tượng được cấp phát trước và tĩnh trong bộ nhớ RAM. Danh sách các đối tượng này, vốn được dành cho mỗi một lớp, được định nghĩa trong MCLibraryConf.h cho cả chương trình điều khiển động cơ đơn và điều khiển động cơ kép (MAX_EXMP_NUM và tương tự). Để tránh cho trình dịch để dành bộ nhớ RAM cho các đối tượng không bao giờ được khởi tạo ta có thể sửa lại kích thước cho phù hợp với ứng dụng cuối cùng.

Đo đếm kích thước chung chỉ được cho phép trong bản phân phối mật của STM32 FOC PMSM SDK. Trong các ứng dụng Web thì khơng có đối tượng ngoại lệ được đưa ra bởi người sử dụng. Chỉ có các ngoại lệ sau được cho phép: không quá 3 đối tượng PID, không quá 5 đối tượng PI và không quá 5 đối tượng đầu ra số.

/**

************************************************************** *****

* @file ExampleClass.c

* @author IMS Systems Lab and Technical Marketing - MC Team * @version V0.0.1

* @brief This file contains interface of Example class

************************************************************** *****

*/ #include "ExampleClass.h" #include "ExamplePrivate.h" #include "MCLibraryConf.h" #include "MC_type.h" #ifdef MC_CLASS_DYNAMIC

#include "stdlib.h" /* Used for dynamic allocation */ #else

_CEXMP_t EXMPpool[MAX_EXMP_NUM]; unsigned char EXMP_Allocated = 0u;

#endif /**

* @brief Creates an object of the class Example

* @param pExampleParams pointer to an Example parameters structure * @retval CEXMP new instance of Example object

*/

CEXMP EXMP_NewObject(pExampleParams_t pExampleParams) { _CEXMP _oEXMP; #ifdef MC_CLASS_DYNAMIC _oEXMP = (_CEXMP)calloc(1u,sizeof(_CEXMP_t)); #else if (EXMP_Allocated < MAX_EXMP_NUM) { _oEXMP = &EXMPpool[EXMP_Allocated++]; } else {

_oEXMP = MC_NULL; } #endif _oEXMP->pParams_str = (pParams_t)pExampleParams; return ((CEXMP)_oEXMP); } /**

* @brief Example of public method of the class Example * @param this related object of class CEXMP

* @retval none */

void EXMP_Func(CEXMP this) {

((_CEXMP)this)->Vars_str.base_vars = 0u; }

/**

* @brief Example of virtual method of the class Example implemented by derived * class

* @param this related object of class CEXMP * @retval none

*/

void EXMP_VFunc(CEXMP this) {

((_CEXMP)this)->Methods_str.pVFunc(this); }

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu thiết kế hệ thống điều khiển tốc độ động cơ đồng bộ nam châm vĩnh cửu (Trang 66 - 74)