brew开发之入门必读

BREW development guidelines
--------------------------------------------------------------------------------
The following development guidelines are provided to help you avoid common mistakes and minimize the amount of time you spend testing, debugging, and reworking your source code. The guidelines identify the following:
Issues that cause problems in transitioning from Windows to the ARM environment
Issues that cause problems on the target device, but cannot necessarily be detected in the BREW Emulator
General good practices
By reviewing and implementing these guidelines, you should be able to minimize the overall transition time from Windows to ARM and maximize the success of your application running correctly on the mobile device.

Development guidelines  Description  

JAVA手机网[www.cnjm.net]

Perform NULL pointer checks.  There are two situations, as follows:

JAVA手机网[www.cnjm.net]

You must check for NULL pointers when you create an instance of a BREW interface. If the pointers are not correct, the interface cannot be used.
QUALCOMM recommends that you check all pointers, both passed and returned from BREW methods or allocated memory, to ensure their validity. Invalid pointers should be handled with an exception handling mechanism.

Avoid stack overflow.  Do not have huge arrays on the stack. Do not declare huge arrays or variables as local variables inside functions, because the stack size available to the BREW environment is limited. If substantial memory is needed (for example, greater than 256 bytes), use the dynamic memory allocation operators such as MALLOC or use IHeap.

JAVA手机网[www.cnjm.net]

If the allocation is in a recursive routine, dynamically allocate your buffers. If the function is deep in a call stack, monitor the stack for prior large stack buffers.

Do not program tight loops.  Staying within a tight loop could cause the target device to reset itself. For this reason, do not program tight loops in which a lot of time is spent processing a single event in an application. This prevents other events from being posted to the application and eventually causes the reset.
When an event is received, applications do the required processing and return from that event. This enables other events to be sent to the application.

Strive for device independent applications.  To ensure that your application can execute on any target device independent of memory size, keypad, screen size, and color depth, use ISHELL_GetDeviceInfo() to get specifications from the target device. Use the results to specify parameters such as display, key, and multi-media. Do not hard code these parameters.
Use the CONVERTBMP routine to deal with images on different devices.

Use resources.  Use resources to store language-specific strings, dialogs, and bitmaps. This helps localize the application and move it from a target device in one language to a target device in a different language. Do not hard code these types of information in the source files.

Clean up memory.  Since the available memory on the target mobile device can be limited, you must free unused memory. There are two situations as follows:
You must release all instances of objects you create.
You must release all dynamic memory (all allocated memory) when an application terminates.
QUALCOMM recommends that you free memory when it is no longer needed.

Do not use global or static variables.  The BREW architecture does not support global or static variables, because these types of data cannot be handled by an application that is dynamically downloaded. Additionally, the use of global or static variables causes a linker error on the target. Always store persistent data in the applet structure.

Do not initialize a structure when defining it.  From the perspective of the ARM compiler, defining and initializing a structure is considered static data. See above "Do not use global or static variables.”

Do not assign variables inside conditional statements.  Avoid problems with an ARM compiler. Do not write code that assigns values inside conditional statements.

Do not use native floating point operations.  Same as above for "Do not use global variables”; this includes typecasting.
Use the BREW-supplied floating point calls in the Helper functions.

Use BREW-supplied standard library functions.  To keep your compiled code size to a minimum because of RAM limitations on a target device, use the BREW subset of standard C library functions when supplied rather than the standard library functions.

Avoid typecasting errors.  Because the ARM compiler handles implicit typecasts more strictly than most Windows compilers, explicitly declare typecasts. This avoids compilation errors when transitioning from the Windows SDK to the ARM environment.

JAVA手机网[www.cnjm.net]


Check return values.  When calling a BREW API method that returns a value, handle both successful and failed return values.

Handle error codes.  Because some functions return void, wherever applicable, use the BREW API GetLastError() mechanism to identify the error.

Use lower case file and database names.  Because the EFS in the QUALCOMM ASIC is case sensitive, use lower case file and database names. BREW API releases 1.0.1.x and later handle the case sensitivity issue transparently to the application developer.
Do not use a filename with two dots (.) or a database name with one dot (.). These characters cannot be used due to a known problem.

Minimize code size.  To minimize the size of the code, disable the debug info option before loading the application onto a target device.

Set the warning level.  Set the warning level to the highest, level 4, while compiling the application on Windows. This action helps you do a more thorough check of your code. Because the ARM compiler is stricter in indicating errors than the Windows compiler, you ensure that your application compiles smoothly for the ARM target.

Combine multiple reads and writes.  To improve the overall efficiency of reading and writing files, by combining multiple read and write operations, where possible. Read the data into a buffer and access as needed.  

资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 行列式是线性代数的核心概念,在求解线性方程组、分析矩阵特性以及几何计算中都极为关键。本教程将讲解如何用C++实现行列式的计算,重点在于如何输出分数形式的结果。 行列式定义如下:对于n阶方阵A=(a_ij),其行列式由主对角线元素的乘积,按行或列的奇偶性赋予正负号后求和得到,记作det(A)。例如,2×2矩阵的行列式为det(A)=a11×a22-a12×a21,而更高阶矩阵的行列式可通过Laplace展开或Sarrus规则递归计算。 在C++中实现行列式计算时,首先需定义矩阵类或结构体,用二维数组存储矩阵元素,并实现初始化、加法、乘法、转置等操作。为支持分数形式输出,需引入分数类,包含分子和分母两个整数,并提供与整数、浮点数的转换以及加、减、乘、除等运算。C++中可借助std::pair表示分数,或自定义结构体并重载运算符。 计算行列式的函数实现上,3×3及以下矩阵可直接按定义计算,更大矩阵可采用Laplace展开或高斯 - 约旦消元法。Laplace展开是沿某行或列展开,将矩阵分解为多个小矩阵的行列式乘积,再递归计算。在处理分数输出时,需注意避免无限循环和除零错误,如在分数运算前先约简,确保分子分母互质,且所有计算基于整数进行,最后再转为浮点数,以避免浮点数误差。 为提升代码可读性和可维护性,建议采用面向对象编程,将矩阵类和分数类封装,每个类有明确功能和接口,便于后续扩展如矩阵求逆、计算特征值等功能。 总结C++实现行列式计算的关键步骤:一是定义矩阵类和分数类;二是实现矩阵基本操作;三是设计行列式计算函数;四是用分数类处理精确计算;五是编写测试用例验证程序正确性。通过这些步骤,可构建一个高效准确的行列式计算程序,支持分数形式计算,为C++编程和线性代数应用奠定基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值