常规问题
SylixOS 能支持的中间件库有哪些?
Q:SylixOS 能支持的中间件库有哪些? 分类 名称 简介 版本 说明文档 基础库 libboost Boost 是一个功能强大、构造精巧、跨平台、开源并且完全免费的 C++ 程序库,在 1998 年由 Beman G.Dawes 发起倡议并建立。使用了许多现代 C++ 编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了 C++ 的功能和表现力,能够使 C++ 软件开发更加简洁、优雅、灵活和高效。 Boost ...
SylixOS IPC通信出现符号表找不到的解决方式
Q:SylixOS IPC通信出现符号表找不到的解决方式 首先查看 xinput.ko(input 模块)、xsiipc.ko(IPC 模块)内核自带的驱动模块文件是否加载,这两个模块在部署 Qt 库的时候会同 startup.sh 等脚本一同部署至目标机,并会写入到 startup.sh 脚本自动加载(自动加载需要重启系统); 若未部署过 Qt 库,可自行加载 /lib/modules 目录下的 两个模块。重新运行程序即可正常进行 IPC通信。 详见《SylixOS应用程序开发手册》 ...
内存算法配置的使用
Q:内存算法配置的使用 TLSF 虽然拥有 O(1) 时间复杂度的内存管理算法,适用于实时操作系统,但是在 32 位系统上仅能保持 4 字节对齐特性,在 64 位系统上仅能保持 8 字节对齐特性,不满足 POSIX 对 malloc 具有 2 * sizeof(size_t)对齐的要求。所以有些软件可能会严重错误,例如 Qt/JavaScript 引擎,所以使用时需慎重! 只有确认应用没有 2 * sizeof(size_t) 对齐要求时, 方可使用。TLSF 由于具有 O(1) 时间复杂度, ...
SylixOS kill 命令是不安全的操作
现象: 在 SylixOS 的 shell 终端执行 kill 命令,会出现如下现象 [sh]Warning: Program is killed (SIGKILL) by shell. Restart SylixOS is recommended! 上述的意思是使用shell下面的kill命令去杀死另外一个进程是不安全的,建议重启处理。 kill命令会导致如下问题: 1、如果 kill 的时候,应用进程刚好持有驱动函数锁,会导致驱动函数的锁被删除掉,导致驱动函数信号量被意外释放。 ...
SylixOS系统 shell 执行界面如何显示代码中打印的中文字符?
Q:SylixOS 系统 shell 执行界面如何显示代码中打印的中文字符? A:SylixOS 默认支持的中文字符是 GB2312 编码,在 shell 界面操作时需要将您使用的串口打印工具更改为对应的字符编码即可。 如:在支持 GB2312 编码的串口或网络调试工具中直接更改,重新链接后即可显示中文打印。 如使用 Putty 工具,可以更改编码为 ISO-8859-1:1998(latin-1,West Europe)编码即可显示打印的中文。
SylixOS 环境变量是怎么样的?
Q: SylixOS 环境变量是怎么样的? SylixOS 拥有一整套环境变量的算法,它定义在 shell 中。 系统上电时,从 /etc/profile 中获取,这些系统的全局环境变量模板 系统全局环境变量可以通过 shell 来修改,然后通过 varsave 命令保存到 /etc/profile 文件中。 进程启动时将通过全局环境变量初始化自身的环境变量,进程内部对环境变量的修改不影响全局环境变量。 更多扩展知识: 参考文章:SylixOS 启动后显示环境变量从 profile 读取失败?
SylixOS 使用 FPU 应该注意什么?
Q: 使用 FPU 应该注意什么 SylixOS 支持浮点协处理器,每一个任务(线程有自己的 FPU 上下文,可以独立的进程浮点运算),但是, SylixOS 内核代码包括内核模块,中断函数,BSP包等等,强烈不建议使用 FPU 指令。因为没有独立的 FPU 上下文,除非操作系统启动时,参数 kfpu为 yes,这样操作系统在中断中会切换 FPU 的上下文,但是这将造成操作系统中断延迟加大。所以,除非兼容老的系统,其他情况不建议在内核和中断中使用 ...
缺页中断后系统被任务 Kill ?
Q:缺页中断后系统被任务 Kill ? SylixOS 系统发生缺页中断后,打印了一些调试后系统就重启或者任务被杀死了 由于 SylixOS 操作系统为了保持硬实时操作系统的特性,所以内核与应用程序没有严格的隔离。 缺页中断如果发生在内核被锁定或者中断中,则操作系统不能正确处理,这里需要应用程序员与驱动开发人员注意。
如何禁止Contrl+X执行?
Q:如何禁止Contrl+X执行? 应用层如何控制 SylixOS 禁止 Contrl+X 快捷重启系统,参考代码如下: #include <sys/stat.h> #include <termios.h> #include <fcntl.h> static struct termios term_orig, term_new; static void do_cancel_ctrlx (void) { tcgetattr(STD_IN, &term_orig); term_new = ...
如何禁止Ctrl+C执行?
Q:如何禁止Ctrl+C执行? 应用层如何控制S ylixOS 禁止 Ctrl+C 快捷键杀掉应用,参考代码如下: #include <sys/stat.h> #include <termios.h> #include <fcntl.h> static INT iOptionNoAbort, iOption; static void do_cancel_ctrlc (void) { ioctl(STD_IN, FIOGETOPTIONS, &iOption); iOptionNoAbort = ...
应用线程或者进程如何保证不能被Ctrl+C杀掉?
Q:应用线程或者进程如何保证不能被 Ctrl+C 杀掉? 使用 pthread_safe_np 和 pthread_unsafe_np 可以保证线程进入安全模式,避免被Ctrl+C杀掉。 更多扩展知识: 参考文章:SylixOS 中 CTRL + C 的大致处理流程 参考文章:SHELL 中 CTRL 控制命令 参考文章:如何禁止Contrl+X执行?
SylixOS 部署 Qt 应用失败的问题排查
Q:Qt程序部署失败问题确认 如果在使用 Qt 进行部署时,出现部署失败的情况,需要进行以下几步的确认: 1. 确认是否正确设置了 SylixOS 设备(对应正确的编译工具链); 2. 点击“Test”按键确认网络是否连通; 3. 确认是否已经成功设置了对于设备的 SylixOS BASE 路径; 4. 确认是否正确选择了“Debug 版本”选项(需要根据实际编译的 SylixOS BASE 进行正确选择); 5. 确认是否正确选择了“不支持符号链接”选项(在 SylixOS 系统中 TpsFs ...
Qt 程序显示特殊符号“℃”
Q:Qt 程序显示特殊符号 “℃” 通常在字库中不会提供℃符号,在 Qt 中需要输入这个特殊符号时,例如:我们希望在一个 label 中显示 ℃,可以采用如下的方式: ui->label->setText("\u00B0C");
SylixOS 进程资源回收机制
SylixOS 中使用 t_reclaim 线程回收进程资源。t_reclaim 线程在系统启动时创建,优先级较低,为 253。线程执行流程非常简单,即接收消息队列值并执行 vprocReclaim() 进行回收,消息队列数据位待回收的线程控制块指针。如下图所示。 vprocReclaim() 执行流程如下: 1)等待所有线程被彻底删除; 2)回收线程全部资源(打开的文件、信号量、时间、定时器等); 3)释放模块资源; 4)回收进程控制块资源 通过调用 __resReclaimReq() ...
如何屏蔽 Unusedvariable
Q:如何消除定义后未使用的变量引起的编译警告 例1:可以使用 “__unused” 关键字,对于定义后未使用的变量,在编译后也不会引起警告,如下图所示。 例2:__attribute__((unused)) 对于定义后的静态函数static void a(void) ,在编译后也不会引起警告__attribute__((unused)) static void a(void); 或者添加编译参数去掉警告。 更多扩展知识见: 参考文章:编译器优化导致的问题排故
GCC浮点相关的编译选项配置
gcc的浮点相关编译选项配置 GCC 中的浮点相关的编译选项属于依赖于不同平台的配置选项, 本文的相关配置都是在 ARM32 平台下. SylixOS 下常用的浮点编译配置有两个 -mfpu=name, -mfloat-abi=name 测试程序 #include <stdio.h> #include <time.h> float calc(float *src_mem_32, float *dst_mem_32) { float mem_32; int i, j; for ...
ping 不通如何排查?
Q:ping 不通如何排查? 首先检查 phy 芯片是否 link 上,然后确定速率与双工对端与本地是否匹配,在满足前两项的前提下依然 ping 不通可以尝试查找硬件 mdi 电路问题。 更多扩展知识: 参考文章:无法与板卡进行FTP连接(ping通) 参考文章:如何解决 SylixOS ping 网络大包 参考文章:uboot 可以 ping 通,进入系统里 ping 不通?
uboot 可以 ping 通,进入系统里 ping 不通?
Q:uboot 可以ping 通,但是进入系统里面ping不通? uboot 里面可以 ping 通说明设备和主机间的网络是没有问题,可以进行 TFTPBOOT, 但是进入系统之后 ping 不通的话: 敲 ifconfig 命令查看系统内的网络配置: 看系统中的设备 IP 地址和主机是否处于同一子网段,网关也要配置对。 如果有多个网卡,则他们不能配置成相同的子网内。 更多扩展知识: 参考文章:ping 不通如何排查? 参考文章:如何解决 SylixOS ping 网络大包 ...
主机上不能识别到网口设备?
Q:设备通过网线连接,主机上并不能识别到网口设备? 确保网线没有问题的前提下,有些板子的网口不支持千兆 点击网络->修改适配器配置->选择对应的网口打开属性-> 设置速度和双工模式为自动协商或者强制配置成和设备的一致(一般多为100Mbps全双工)。
tftpboot 传输失败的原因?
Q:tftpboot传输失败的原因? 传输失败的原因各种各样,目前先列出已查明的情况。 情况一:uboot 可 ping 通 PC 端,但使用 tftpboot 传输文件失败。 有其他网卡适配器处于同一子网,包括虚拟网卡。处理方法是确保各个网卡适配器处于不同的网段,避免发生干扰。 查看 PC 端防火墙及杀毒软件等是否处于关闭退出状态。处理方法是关闭退出各类防火墙及杀毒软件的防护干扰。
DW 网卡 DMA 复位失败是什么原因?
Q:DW网卡DMA复位失败是什么原因? 初始化 DMA 网卡时提示如程序 清单1 所示信息,通常这种情况是 RX_CLK 引脚的时钟出现问题,可以查看 phy 的设置,如果没有 phy 存在,则检查时钟是否正常。 程序清单1 网卡DMA复位失败 1.__dmaInitEngine : Failed to reset the dma 2.__dwHwSetup: DMA engine initialization failed 3.__dwOpen: Hardware setup failed
SylixOS 添加 SHELL 的命令方式
Q:可以在 APP 里面加入 SHELL 命令使用吗? SylixOS 系统规定了在进程里面不可以进行注册 shell 命令,只可以在 BSP 中进行注册 更多扩展知识见: 详见《SylixOS shell用户手册》第 1 章 第 1.3节 “添加” 相关内容。 公开链接:SylixOS 手册获取 不能在 APP 里面加入 SHELL 命令原因见如下文章: 参考文章:在应用程序中注册 shell 命令执行会产生的后果
RealEvo-IDE 使用手册
RealEvo-IDE 使用手册 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《RealEvo-IDE使用手册》 公开链接:SylixOS 手册获取 更多 IDE 配置见: 参考文章:RealEvo-IDE 获取地址 参考文章:IDE 窗口布局介绍 参考文章:IDE 中如何高亮变量 参考文章:IDE 中如何按列编辑 参考文章:IDE 中如何显示特殊字符 参考文章:IDE 中如何屏蔽单个工程文件 ...
RealEvo-QtSylixOS 使用手册
RealEvo-QtSylixOS 使用手册 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《RealEvo-QtSylixOS使用手册》 公开链接:SylixOS 手册获取
RealEvo-Simulator 使用手册
RealEvo-Simulator 使用手册 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《RealEvo-Simulator使用手册》 公开链接:SylixOS 手册获取
SylixOS 应用程序开发
SylixOS 应用程序开发 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《SylixOS应用开发手册》 公开链接:SylixOS 手册获取
SylixOS 设备驱动程序开发
SylixOS 设备驱动程序开发 详见:RealEvo-IDE (SylixOS IDE)安装目录如:F:\ACOINFO\RealEvo\doc 中 doc 文件夹下的 《SylixOS设备驱动程序开发》 公开链接:SylixOS 手册获取
文件名或扩展名太长问题
问题描述: 问题原因: 在编译时,需要链接的 .o 文件过多,IDE 中编译信息每行输出量有限,一行无法显示所有 .o 文件,因此会报“文件名或扩展名太长”的错误。 解决办法: 通过修改 Makefile 将链接的文件拆分成多次链接。 可以通过 $(info "0000000000000") //$(info "打印信息") 在 makefile 中添加打印信息 ...
符号表导出
Q:如何导出 BSP 驱动中的 API 给到用户使用? BSP 驱动导出 API 给用户使用,可以通过 API_SymbolAdd 导出符号表功能,建议统一在 bspBoardSymbolInit() 调用,使用示例如图所示。其中要导出的 API 为 “fmqlIntAffinity”,第一参数是名词,第二参数是函数 API 地址,第三个参数是属性,这里选择可执行。 导出 BSP 驱动 API ...
无法与板卡进行FTP连接(ping通)
问:SylixOS 下可 Ping 通但是无法通过 FTP 连接板卡如何解决? 当下位机操作系统可以 Ping 通主机,但是主机无法通过 FTP 服务链接板卡时,可以通过以下方式排查: 1.检查主机是否关闭防火墙以及杀毒软件; 2.检查网线是否链接正确,主机与板卡是否在同一网关下,IP是否在同一网段下; 3.检查通过 windows 下命令行 ftp xxxx(板卡 IP) 能否连接上; 4.检查通过 FileZilla 工具能否链接上板卡; 如果以上方法都无法通过,可以删除 etc ...
基于 SylixOS arm64 的 ABI 说明
根据 ARM 官方的 AAPCS64 文档说明,X18 是一个平台自定义的寄存器,可用作线程上下文相关处理使用。这样使用的好处是减少了部分压栈和弹栈操作,整体提升了性能。 因为绝大多数用户场景是 C及更高级的语言,所以我们在 gcc 编译的时候已经指定了编译器不要使用 x18。对于客户代码中使用汇编的场景,客户只需要将 x18 修改为别的寄存器即可。 我们这样的处理方式既提升了性能,也能适应绝大多数的场景,并且对于直接用汇编编程的情况只需要做很简单的替换即可。 下图内容摘自ARM ...
Qt4 显示旋转设置
Q:Qt4 显示旋转环境变量及运行参数如何设置? 可以通过修改环境变量或修改运行参数来进行显示图像旋转的设置。 修改环境变量:QWS_DISPLAY=Transformed:Rot90:sylixosfb:/dev/fb0 修改启动参数:qtdemo -qws -display "Transformed:Rot90:sylixosfb:/dev/fb0" 注意 ...
早期版本 IDE 编译 C++ 工程执行文件过大?
早期版本 IDE 编译 C++ 工程执行文件过大? 早期(目前已知 3.5.1 版本的 IDE 之前)的 IDE 编译 C++ 工程会静态链接 C++ 相关库文件,因此会导致编译生成的 C++ 执行文件过大(600k)。 目前最新版本则采用的是动态链接实现,因此编译的 C++ 文件执行文件较小,但是在程序运行时同样需要动态链接 C++ 相关库。 若只有一个 C++ 工程,则两者所占用的内存大小不会有太大差别,因为动态链接的方式在运行时,也需要将 C++ 相 关库搬运到内存;但是若有多个 C++ ...
SylixOS 每个进程的堆栈大小是多少?
Q:SylixOS 每个进程的堆栈大小是多少? SylixOS 进程虚拟空间以页 ( 典型大小为 4KB ) 为单位进行分配, 每一个进程在装载时预分配 32MB 的虚拟页面,( 空间的大小将通过环境变量 SO_MEM_PAGES 决定 ) API_TShellExec("SO_MEM_PAGES=8192"); /* 动态内存虚拟页面数量 */ ...
SylixOS 下内核线程简介
1.概述 内核线程共享内核所有资源,例如内核文件描述符表,而进程内线程则共享使用进程内所有资源,例如进程文件描述符表。SylixOS 对于一些系统级功能是通过使用内核线程进行管理使用。 2.内核线程 基于 SylixOS Version:2.1.6 的内核,在终端上输入命令“ts”如图 2.1所示。 图2.1 “ts”命令 2.1 内核线程工程 ...
SylixOS 系统的中断优先级与线程优先级是相互独立的吗?
Q:SylixOS 系统的中断优先级与线程优先级是相互独立的吗? 是相互独立的。 中断优先级是由硬件决定的,而线程优先级则是由操作系统决定的。 中断优先级天然要比线程优先级高的多,这样才能保证每次中断操作都能响应。 中断优先级由硬件决定: 例如硬件支持两种级别的中断优先级,那就是一高一低, 如果硬件支持多级,则可以通过编号区别高低。 因此在支持多级中断优先级的硬件上,可以根据中断优先级的编号大小区别中断间的高低,数字越小,优先级越高。 参考文章:SylixOS ...
free 命令含义解析
Q:free 命令含义解析 free 命令执行效果如下: heap show >> 部分显示 kernel 堆和 system 堆信息,一般二者合二为一显示为 “kersys"TOTAL 表示大小,即在调用 API_KernelStart() 接口时传入的 __heap_end 与 __heap_start 的差值(实际因为对齐会有一点偏差),如下图所示。USED 表示当前已使用的大小,MAX USED 表示曾经使用过的最大大小,SEGMENT 表示当前堆中的碎片块数,USED ...
SylixOS 使用 MD5 校验程序完整性
Q:是否有办法在应用程序执行前,通过 MD5 验证应用程序镜像是否完整? 在下载应用程序时,使用 windows 的 md5 生成工具,然后将 md5 以单独文件存储到文件系统中。在运行对应程序前,先调用我们的 crypt 接口生成 md5,然后进行 md5 验证,验证正确后再启动应用程序。
解决 CppTest 插件在 RealEvo IDE 只能扫描到第一个文件
问: CppTest 插件在 RealEvo IDE 中扫描信息只能扫描到第一个文件,如何解决? 答:通过查看,CppTest 在同一目录级别下含有编译生成的 Debug 目录或者 Release 目录时, 会无法扫描到全部文件,当删除 Debug 目录时,则可以扫描全部文件。 有以下两种解决方法: 解决方法1:通过编译器的指令将 Debug 移除到其他目录下。 可以通过配置 properties 下 SylixOS projec 下的 link setting -> command ...
重定向串口回环测试方法
Q:是否支持重定向串口回环测试?怎么使用? A:使用 cat 获取串口信息、 echo XXX >/dev/ttys 重定向信息。 具体操作如下: 注:推荐使用串口测试程序进行串口功能测试 (附件为串口测试程序)。
Next page