自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 收藏
  • 关注

原创 C++Primer学习(14.2 输入和输出运算符)

在这样的例子中,即使从技术上来看I0是成功的,输入运算符也应该设置流的条件状态以标示出失败信息。通常情况下,输入运算符的第一个形参是运算符将要读取的流的引用,第二个形参是将要读入到的(非常量)对象的引用。该运算符通常会返回某个给定流的引用。if语句检查读取操作是否成功,如果发生了I0错误,则运算符将给定的对象重置为空sales_data,这样可以确保对象处于正确的状态。例如在读取完bookNo后,输入运算符假定接下来读入的是两个数字数据,一旦输入的不是数字数据,则读取操作及后续对流的其他使用都将失败。

2025-03-31 08:28:00 672

原创 C++Primer学习(14.1 基本概念)

(4)重载运算符的返回类型通常情况下应该与其内置版本的返回类型兼容:逻辑运算符和关系运算符应该返回 bool,算术运算符应该返回一个类类型的值,赋值运算符和复合赋值运算符则应该返回左侧运算对象的一个引用。赋值运算符的行为与复合版本的类似:赋值之后,左侧运算对象和右侧运算对象的值相等,并且运算符应该返回它左侧运算对象的一个引用。如果一个运算符函数是成员函数,则它的第一个(左侧)运算对象绑定到隐式的this指针上,因此,成员运算符函数的(显式)参数数量比运算符的运算对象总数少一个。

2025-03-30 00:00:00 822

原创 C++Primer学习(13.6 对象移动)

否则,我们释放左侧运算对象所使用的内存,并接管给定对象的内存。如我们已经看到的,我们的strvec类是这种不必要的拷贝的一个很好的例子。此版本对于非const的右值是精确匹配(也是更好的匹配)的,因此当我们传递一个可修改的右值时,编译器会选择运行这个版本。类似的,从一个对象进行拷贝的操作不应该改变该对象因此,通常不需要定义一个接受一个(普通的)x&参数的版本。我们将看到,除非标准库知道我们的移动构造函数不会抛出异常,否则它会认为移动我们的类对象时可能会抛出异常,并且为了处理这种可能性而做一些额外的工作。

2025-03-29 00:00:00 892

原创 C++Primer学习(13.5 动态内存管理类)

通过使用新标准库引入的两种机制,我们就可以避免string的拷贝。首先,当reallocate 在新内存中构造string 时,它必须调用move 来表示希望使用string 的移动构造函数,原因我们将在13.6.1节(第470页)中解释。由于alloc_n_copy 分配的空间恰好容纳给定的元素,cap也指向最后一个构造的元素之后的位置。它使用后置递增(参见4.5节,第131页),因此这个调用会在first_free当前值指定的地址构造一个对象,并递增first_free 指向下一个未构造的元素。

2025-03-28 08:31:36 546

原创 C++Primer学习(13.4 拷贝控制示例)

但是,任意给定的Message的内容只有一个副本。因此,我们必须遍历Folder指针的set,对每个指向原Message的Folder添加一个指向新Message的指针。为了记录Message位于哪些Folder中,每个Message 都会保存一个它所在Folder的指针的set,同样的,每个Folder 都保存一个它包含的 Message 的指针的set。更新一个Folder的任务是由Folder 类的addMsg和remMsg成员来完成的,分别添加和删除给定message的指针。

2025-03-27 08:30:48 944

原创 Touchgfx DebugPrinter屏幕打印和模拟器打印

(一)修改FrontendApplication.cpp文件。(二)修改Screen1View.cpp文件。

2025-03-25 14:44:32 141

原创 touchgfx C程序调用C++程序中类的成员函数

C程序语法中没有类的概念,所以,C++中的类对应C程序来说时不可见不可访问的。那么我们如何在C程序中访问Touchgfx界面中控件类的成员变量和成员函数,进而操作UI界面呢?下面介绍一下基本的思路和方法。一)在Freetos.c中建立一个新任务。三)编写C++程序的类头文件。

2025-03-25 14:25:42 133

原创 C++Primer学习(13.3 交换操作)

它通过在改变左侧运算对象之前拷贝右侧运算对象保证了自赋值的正确,这与我们在原来的赋值运算符中使用的方法是一致的。此代码中有一个很重要的微妙之处:虽然这一点在这个特殊的例子中并不重要,但在一般情况下它非常重要–swap函数中调用的swap不是std::swap。在本例中,数据成员是内置类型的,而内置类型是没有特定版本的swap的,所以在本例中,对swap的调用会调用标准库std::swap。因此,在swap调用之后,*this中的指针成员将指向新分配的string–右侧运算对象中 string 的一个副本。

2025-03-24 08:22:08 764

原创 C++Primer学习(13.2 拷贝控制和资源管理)

但是,非常重要的一点是,这些操作是以正确的顺序执行的,即使将一个对象赋予它自身,也保证正确。而不出意外的,shared_ptr类提供类似指针的行为,就像我们的strBlob类(参见12.11节,第405 页)一样,I0类型和 unique_ptr不允许拷贝或赋值,因此它们的行为既不像值也不像指针。即,它必须递增右侧运算对象的引用计数(即,拷贝构造函数的工作),并递减左侧运算对象的引用计数,在必要时释放使用的内存(即,析构函数的工作)。为了提供类值的行为,对于类管理的资源,每个对象都应该拥有一份自己的拷贝。

2025-03-23 00:00:00 555

原创 C++Primer学习(13.1 拷贝、赋值与销毁)

虽然我们可以将一个新值赋予一个引用成员,但这样做改变的是引用指向的对象的值,而不是引用本身。如果为这样的类合成拷贝赋值运算符,则赋值后,左侧运算对象仍然指向与赋值前一样的对象,而不会与右侧运算对象指向相同的对象。如果拷贝赋值运算符并非出于此目的,它会将右侧运算对象的每个非static 成员赋予左侧运算对象的对应成员,这一工作是通过成员类型的拷贝赋值运算符来完成的。直接初始化 v1是合法的,但看起来与之等价的拷贝初始化v2则是错误的,因为vector的接受单一大小参数的构造函数是explicit的。

2025-03-22 00:00:00 856

原创 C++Primer学习(7.6 类的静态成员)

然而,我们可以为静态成员提供const整数类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr(参见7.5.6节,第267页)。有的时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联。非静态数据成员不能作为默认实参,因为它的值本身属于对象的一部分,这么做的结果是无法真正提供一个对象以便从中获取成员的值,最终将引发错误。和其他的成员函数一样,我们既可以在类的内部也可以在类的外部定义静态成员函数。和类的所有成员一样,当我们指向类外部的静态成员时,必须指明成员所属的类名。

2025-03-21 13:07:11 839

原创 Touchgfx 自定义容器之间的交互操作

interaction4: 当BottonContainer trigger1 happens, 当容器bottonContainer的触发(trigger1)发生时, 显示容器setAlarmContainers1,同时触发另一个内部交互动作。(2)弹窗容器SetAlarmContainers后,把容器SetAlarmContainers上的内容:“参数设置”和其下面的长方形图片设置为隐藏。(1)点击容器BottonContainer上的报警限值,弹窗容器SetAlarmContainers。

2025-03-20 17:59:27 580

原创 C++Primer学习(7.5 构造函数再探)

在第一个调用中,我们直接使用Sales_data的构造函数,该调用通过接受string 的构造函数创建了一个临时的Sales_data对象。(3)当我们通过书写形如T()的表达式显式地请求值初始化时,其中是类型名(vector的一个构造函数只接受一个实参用于说明vector大小,它就是使用一个这种形式的实参来对它的元素初始化器进行值初始化)。我们已经在7.1.4节(第235页)中介绍了构造函数的基础知识,本节将继续介绍构造函数的一些其他功能,并对之前已经介绍的内容进行一些更深入的讨论。

2025-03-20 08:42:15 470

原创 C++Primer学习(7.4 类的作用域)

因此当成员函数定义在类的外部时,返回类型中使用的名字都位于类的作用域之外。编译器接着会在Screen内查找匹配的声明,即使height的声明出现在 dummy_fcn 使用它之后,编译器也能正确地解析函数使用的是名为height的成员。当成员定义在类的外部时,名字查找的第三步不仅要考虑类定义之前的全局作用域中的声明,还需要考虑在成员函数定义之前的全局作用域中的声明。对于定义在类内部的成员函数来说,解析其中名字的方式与上述的查找规则有所区别,不过在当前的这个例子中体现得不太明显。

2025-03-19 12:26:33 798

原创 C++Primer学习(7.3 类的其他特性)

在此例中我们使用一个单独的元素值对vector成员执行了列表初始化(参见3.3.1节,第87页),这个 Screen的值被传递给vector的构造函数,从而创建了一个单元素的vector对象。一开始,首先把s定义成screens vector 中第i个位置上的Screen的引用,随后利用 Screen 的 height 和 width 成员计算出一个新的 string对象,并令其含有若千个空白字符,最后我们把这个含有很多空白的字符串赋给contents成员。为什么还要这么做呢?

2025-03-18 08:27:29 765

原创 C++Primer学习(7.2 访问控制与封装)

7.2 访问控制与封装到目前为止,我们已经为类定义了接口,但并没有任何机制强制用户使用这些接口。我们的类还没有封装,也就是说,用户可以直达Sales_data对象的内部并且控制它的具体实现细节。在C++语言中,我们使用访问说明符(access specifers)加强类的封装性:(1)定义在 public说明符之后的成员在整个程序内可被访问,public 成员定义类的接口。(2)定义在 private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private部分封装了(即隐藏

2025-03-17 08:27:07 659

原创 C++Primer学习(7.1 定义抽象数据类型)

回忆我们之前介绍过的,如果定义在块中的内置类型或复合类型(比如数组和指针)的对象被默认初始化,则它们的值将是未定义的。任何对类成员的直接访问都被看作 this 的隐式引用,也就是说,当isbn 使用 bookNo 时,它隐式地使用 this 指向的成员,就像我们书写了this->bookNo一样。和其他成员函数一样,当我们在类的外部定义构造函数时,必须指明该构造函数是哪个类的成员。和其他函数一样,如果=default在类的内部,则默认构造函数是内联的:如果它在类的外部,则该成员默认情况下不是内联的。

2025-03-16 00:00:00 859

原创 C++Primer学习(6.7 函数指针——难!)

需要注意的是,decltype返回函数类型,此时不会将函数类型自动转换成指针类型。因此,pf就是一个指向函数的指针,其中该函数的参数是两个const string的引用,返回值是boo1类型。其中我们使用类型别名(参见2.51节,第60页)将F定义成函数类型,将PF定义成指向函数类型的指针。进一步观察发现,指针的类型本身也包含形参列表,因此指针指向函数,该函数的返回类型是int。最后的 (返回类型, 参数列表) 是该指针所指向的函数的参数列表,而整个声明的开头的 返回类型 是该指针所指向的函数的返回类型。

2025-03-15 00:00:00 781

原创 C++Primer学习(6.6 函数匹配)

可行函数也有两个特征:一是其形参数量与本次调用提供的实参数量相等,二是每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。指针类型的形参也类似。如果两个函数的唯一区别是它的指针形参指向常量或非常量,则编译器能通过实参是否是常量决定选用哪个函数:如果实参是指向常量的指针,调用形参是const*的函数:如果实参是指向非常量的指针,调用形参是普通指针的函数。2)f(double,double)是可行的,因为它的第二个形参提供了默认值,而第一个形参的类型正好是double,与函数使用的实参类型完全一致。

2025-03-14 08:23:31 506

原创 C++Primer学习(6.5 特殊用途语言特性)

当设计含有默认实参的函数时,其中一项任务是合理设置形参的顺序,尽量让不怎么使用默认值的形参出现在前面,而让那些经常使用默认值的形参出现在后面。不过,对于某个给定的内联函数或者constexpr函数来说,它的多个定义必须完全一致。某些函数有这样一种形参,在函数的很多次调用中它们都被赋予一个相同的值,此时我们把这个反复出现的值称为函数的默认实参(default argument)。在6.3.2节(第201页)中我们编写了一个小函数,它的功能是比较两个string形参的长度并返回长度较小的string的引用。

2025-03-13 08:40:29 596

原创 C++Primer学习(6.4 函数重载)

相反的,因为非常量可以转换成const,所以上面的4个函数都能作用于非常量对象或者指向非常量对象的指针。不过,如6.6.1节(第220页)将要介绍的,当我们传递一个非常量对象或者指向非常量对象的指针时,编译器会优先选用非常量版本的函数。因此,第二对中两个形参的区别仅在于一个使用类型原来的名字,另一个使用它的别名,从本质上来说它们没什么不同。在这个版本的函数中,首先将它的实参强制转换成对const的引用,然后调用了shorterString函数的const版本。,找到的是接受int值的那个局部声明。

2025-03-12 10:14:30 804

原创 C++Primer学习(6.3 返回类型和return语句)

return语句返回值的类型必须与函数的返回类型相同,或者能隐式地转换成(参见4.11节,第141页)函数的返回类型。否则,返回的值由函数的返回类型决定。一个返回类型是void的函数也能使用return语句的第二种形式,不过此时return语句的 expression 必须是另一个返回 void 的函数。因为上面提到的运算符都满足左结合律,所以shorterstring的结果是点运算符的左侧运算对象,点运算符可以得到该string对象的size成员,size 又是第二个调用运算符的左侧运算对象。

2025-03-11 09:17:50 639

原创 C++Primer学习(6.2 参数传递)

为了编写能处理不同数量实参的函数,C++11新标准提供了两种主要的方法:如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型;如果实参的类型不同,我们可以编写一种特殊的函数,也就是所谓的可变参数模板,关于它的细节将在16.4节(第618页)介绍。和所有数组一样,当将多维数组传递给函数时,真正传递的是指向数组首元素的指针(参见3.6节,第115页)。因为我们处理的是数组的数组,所以首元素本身就是一个数组,指针就是一个指向数组的指针。同时一个普通的引用必须用同类型的对象初始化。

2025-03-10 13:41:25 707

原创 C++Primer学习(函数基础6.1)

例如,可以把6.1节练习(第184页)的函数存在一个文件里,把使用这些函数的代码存在其他源文件中。函数的返回类型不能是数组(参见3.5节,第101页)类型或函数类型,但可以是指向数组或函数的指针。大多数编译器提供了分离式编译每个文件的机制,这一过程通常会产生一个后缀名是.obj(Windows)或.O(UNIX)的文件,后缀名的含义是该文件包含对象代码(object code)。实参的类型必须与对应的形参类型匹配,这一点与之前的规则是一致的,我们知道在初始化过程中初始值的类型也必须与初始化对象的类型匹配。

2025-03-09 00:00:00 944

原创 C++Primer学习(5.4和5.5 迭代语句和跳转语句)

和break语句类似的是,出现在嵌套循环中的continue语句也仅作用于离它最近的循环。在这个循环中,因为所有要做的工作都在for语句头的条件和表达式部分完成了,所以for循环体也是空的。接下来,程序继续执行 for 循环之后的第一条语句,这条语句可能接着处理连字符的情况,也可能是另一条用于终止当前分支的 break语句。expression 表示的必须是一个序列,比如用花括号括起来的初始值列表(参见3.3.1节,第88页)、数组(参见3.5节,第101页)或者vector或string等类型的。

2025-03-08 00:00:00 557

原创 Touchgfx(交互系统和创建无触发交互)

(一)目的是让Touchgfx给我们自动生成一些函数。

2025-03-07 11:00:43 670

原创 C++Primer学习(5.3条件语句)

假设数字成绩的范围是从0到100(包括100在内),其中100分对应的字母形式是“A++”,低于60分的成绩对应的字母形式是“F”。从代码的缩进格式来看,程序的初衷应该是希望else和外层的if匹配,也就是说,我们希望当 grade 的末位小于3时执行 else 分支。在else分支中,由成绩计算得到一个下标,具体过程是:首先从grade中减去50,然后执行整数除法(参见4.2节,在125页),去掉余数后所得的商就是数组scores对应的下标。要想理解这段程序的执行过程,不妨假设ch的值是’e’。

2025-03-07 08:28:50 744

原创 C++Primer学习(5.1和5.2 简单语句和语句作用域)

如果在程序的某个地方,语法上需要一条语句,但是逻辑上需要多条语句,则应该使用复合语句。例如,while或者for的循环体必须是一条语句,但是我们常常需要在循环体内做很多事情,此时就需要将多条语句用花括号括起来,从而把语句序列转变成块。如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语一种常见的情况是,当循环的全部工作在条件部分就可以完成时,我们通常会用到空语句。通常,名字在有限的区域内可见,该区域从名字定义处开始,到名字所在的(最内层)块的结尾为止。通常情况下,语句是顺序执行的。

2025-03-06 08:33:20 972

原创 Touchgfx(重写Screen和MVP架构在各个Screen上的传参机制)

屏幕(Screen)代表一个全屏可绘制区域。应用程序通过继承这个类来创建特定的屏幕。每个屏幕都有一个根容器,可绘制对象会被添加到这个根容器中。屏幕会确保按照正确的顺序将绘制请求和各种事件委托给相应的可绘制对象。这是一个用于普通应用程序的通用 TouchGFX 屏幕(touchgfx::Screen)特化版本。它提供了与呈现器(Presenter)类的链接。leadScreen1ViewBase 类继承自View类模板。

2025-03-05 10:52:26 140

原创 C++Primer学习(4.11 类型转换)

如果一个运算对象是无符号类型、另外一个运算对象是带符号类型,而且其中的无符号类型不小于带符号类型,那么带符号的运算对象转换成无符号的。较大的 char 类型(wchar_t、char16_t、char32_t)提升成int、unsigned int、long、unsigned long、long long和unsigned long long 中最小的一种类型,前提是转换后的类型要能容纳原类型所有可能的值。也就是说,强制转换的结果将与原始的地址值相等,因此我们必须确保转换后所得的类型就是指针所指的类型。

2025-03-04 09:56:18 586

原创 touchgfx之box点击事件 ClickListener

touchgfx::ClickListener 是一个模板类,这里使用 touchgfx::Box 作为模板参数进行实例化,box2 可以用于监听 touchgfx::Box 类型对象的点击事件。,touchgfx就会生成如下基类。其中,box1控件没有勾选:ClickListener。一个是BOX类型,一个是touchgfx::ClickListener< touchgfx::Box > 类型。BOX一种简单的控件,能够显示一个特定颜色的矩形,并且可以选择设置透明度。

2025-03-03 17:59:48 330

原创 C++Primer学习(4.9和4.10 sizeof运算符和逗号运算符)

其次,因为sizeof不会实际求运算对象的值,所以即使p是一个无效(即未初始化)的指针(参见2.3.2节,第47页)也不会有什么影响。通常情况下只有通过类的对象才能访问到类的成员,但是sizeof运算符无须我们提供一个具体的对象,因为要想知道类成员的大小无须真的获取该成员。5)对数组执行 sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和。因为sizeof的返回值是一个常量表达式,所以我们可以用sizeof的结果声明数组的维度。

2025-03-03 08:28:02 378

原创 C++Primer学习(4.8位运算符)

4.8位运算符位运算符作用于整数类型的运算对象,并把运算对象看成是二进制位的集合。位运算符提供检查和设置二进制位的功能,如17.2节(第640页)将要介绍的,一种名为bitset的标准库类型也可以表示任意大小的二进制位集合,所以位运算符同样能用于bitset 类型。一般来说,如果运算对象是“小整型”,则它的值会被自动提升(参见4.11.1节,第142页)成较大的整数类型。运算对象可以是带符号的,也可以是无符号的。如果运算对象是带符号的且它的值为负,那么位运算符如何处理运算对象的“符号位”依赖于机器。而

2025-03-02 00:00:00 803

原创 C++Primer学习(4.7 条件运算符)

条件运算符的执行过程是:首先求cond的值,如果条件为真对expr1求值并返回该值,否则对 expr2求值并返回该值。在第二条表达式中,grade和60的比较结果是<<运算符的运算对象,因此如果grade<60为真输出1,否则输出0。<<运算符的返回值是cout,接下来cout作为条件运算符的条件。因此在上面的代码中,靠右边的条件运算(比较成绩是否小于60)构成了靠左边的条件运算的:分支。当条件运算符的两个表达式都是左值或者能转换成同一种左值类型时,运算的结果是左值:否则运算的结果是右值。

2025-03-01 00:00:00 414

原创 C++Primer学习(4.4赋值运算符)

因为 ival 和 pval 的类型不同,而且 pval的类型(int*)无法转换成 ival 的类型(int),所以尽管0这个值能赋给任何对象,但是第一条赋值语句仍然是非法的。=的运算对象将是get_value函数的返回值及 42,比较的结果不论真假将以布尔值的形式赋值给1,这显然不是我们期望的结果。,所以靠右的赋值运算jval=0作为靠左的赋值运算符的右侧运算对象。又因为赋值运算返回的是其左侧运算对象,所以靠右的赋值运算的结果(即jval)被赋给了 ival。相应的,结果的类型就是左侧运算对象的类型。

2025-02-28 08:34:39 878

原创 C++Primer学习(4.3 逻辑和关系运算符)

if语句的条件部分首先检查s是否是一个空string,如果是,则不论右侧运算对象的值如何都应该换行。举一个使用逻辑或运算符的例子,假定有一个存储着若干string对象的vector对象,要求输出string 对象的内容并且在遇到空字符串或者以句号结束的字符串时进行换行。if语句的条件部分首先把ì、讠和第一个<运算符组合在一起,其返回的布尔值再作为第二个<运算符的左侧运算对象。第3章中的几个程序用到了逻辑与运算符,它们的左侧运算对象是为了确保右侧运算对象求值过程的正确性和安全性。

2025-02-27 08:29:41 489

原创 Touchgfx控件 BOX和Texts View

可在用户代码中使用这些函数以及Box类中提供的其他函数。如果更改Box的外观,请必须调用 boxName.invalidate() 强制进行重新绘制。是TouchGFX中最轻量级的控件之一,因为它不需要读取任何像素数据或进行任何复杂计算。(5)FadeAnimator 指定控件是否可绘制其 Alpha 值变化的动画。(6)MoveAnimator 指定控件是否可绘制 X 和 Y 值变化的动画。(4)ClickListener 指定控件被点击时是否会调用回调函数。(3)可拖动 指定在运行时控件是否可拖动。

2025-02-26 17:29:34 207

原创 C++Primer学习(4.2 算术运算符)

根据取余运算的定义,如果m和n是整数且n非0,则表达式(m/n)*n+m%n的求值结果与m相等。如4.11节(第141页)描述的那样,在表达式求值之前,小整数类型的运算对象被提升成较大的整数类型,所有运算对象最终会转换成同一类型。如上所示,布尔变量b的值为真,参与运算时将被提升成整数值1(参见2.1.2节,第32页),对它求负后的结果是-1。很多系统在编译和运行时都不报溢出错误,像其他未定义的行为一样,溢出的结果是不可预知的。-(m/n),m%(-n)等于m%n,(-m)%n等于-(m%n)。

2025-02-26 08:33:24 812

原创 C++Primer学习(4.1 表达式基础)

不同的运算符对运算对象的要求各不相同,有的需要左值运算对象、有的需要右值运算对象;可以做一个简单的归纳:当一个对象被用作右值的时候,用的是对象的值(内容):当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。此时(或类似的情况下),求值的顺序不会成为问题,因为递增运算(即改变运算对象的子表达式)必须先求值,然后才轮到解引用运算。第一种是3.2.3节(第85页)提到的逻辑与(&&)运算符,它规定先求左侧运算对象的值,只有当左侧运算对象的值为真时才继续求右侧运算对象的值。:)运算符和逗号(,)运算符。

2025-02-25 11:21:58 706

原创 touchgfx的工作机制

1.presenters所分配的内存空间大小等于界面中内存消耗最大的那一个Presenter,而不是所有的Presenter内存消耗的总和,然后所有的Presenter共享同一个presenters内存区域,即分时复用。2.views所分配的内存空间大小等于界面中内存消耗最大的那一个View,而不是所有的View内存消耗的总和,然后所有的View共享同一个views内存区域,即分时复用。touchgfx中的控件对象的内存分配全部都是在内部ram中的,而且都是分配在几个私有的大数组中。

2025-02-24 16:12:39 1073

Touchgfx 编写下载算法文件(.stldr)

Touchgfx 编写下载算法文件(.stldr)

2025-02-21

TouchGFX 实现图片资源存储在外部flash中(2)

TouchGFX 实现图片资源存储在外部flash中(2)

2024-12-19

TouchGFX移植(2)STM32CubeMX配置

TouchGFX移植(2)STM32CubeMX配置

2024-12-18

TouchGFX移植(2)STM32CubeMX配置

TouchGFX移植(2)STM32CubeMX配置

2024-12-18

06-TouchGFX4.2x 新功能,助力STM32用户快速设计美观统一友好的人机交互产品.pdf

06-TouchGFX4.2x 新功能,助力STM32用户快速设计美观统一友好的人机交互产品.pdf

2024-12-17

应用笔记LAT1392 LTDC RGB接口 LCD的TouchGFX工程的移植步骤

应用笔记LAT1392 LTDC RGB接口 LCD的TouchGFX工程的移植步骤

2024-12-17

STM32TouchGFX方案助你快速创建出色的图形界面

STM32TouchGFX方案助你快速创建出色的图形界面

2024-12-17

TouchGFX 开发应用

TouchGFX 开发应用

2024-12-17

STM32CubeMX与TouchGFX联合实现GUI应用开发-V03

STM32CubeMX与TouchGFX联合实现GUI应用开发-V03

2024-12-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除