Tag: 嵌入

什么是嵌入式C编程语言中的“超级循环”?

嵌入式C编程语言中的Super Loop是什么?

如何在C中嵌入资源文件?

我知道如何执行此操作的唯一方法是将文件转换为C源文件,其中包含单个字节/ char数组,其中包含hex资源文件的内容。 有没有更好或更简单的方法来做到这一点?

函数调用之间是否刷新了全局变量?

我正在编写嵌入式固件,并发现有时很难确定何时需要使用volatile。 当我有一个等待某个布尔标志被中断改变的函数时,很明显该标志需要是易失性的,因为该函数会永远等待,因为编译器没有意识到该值可以由打断。 但是当我有一个只检查第一行中的标志的短函数时,我希望标志不需要是易失性的,因为每次进入函数时它的值都会被读取? 所以当一个中断在我第一次调用函数和第二次调用函数之间修改它的值时,我将获得最新的值。 或者是否无法保证每次进入该function时都会清除所有缓存寄存器?

Ruby解释器嵌入在C代码中

我只是从一本书中尝试一个简单的例子:我有一个sum.rb文件: class Summer def sum(max) raise “Invalid maximum #{max}” if max < 0 (max*max + max)/2 end end 还有一个embed_sum.c文件: #include #include int main ( int argc, char ** argv) { VALUE result; ruby_sysinit(&argc, &argv); RUBY_INIT_STACK; ruby_init(); ruby_init_loadpath(); rb_require(“sum”); rb_eval_string(“$summer = Summer.new”); rb_eval_string(“$result = $summer.sum(10)”); result = rb_gv_get(“result”); printf(“Result = %d\n”, NUM2INT(result)); return ruby_cleanup(0); } 我编译它: […]

嵌入时Python 3解释器是否会泄漏内存?

此错误报告指出,截至2007年6月,Python解释器在使用嵌入式Python解释器的C / C ++应用程序中调用Py_Finalize后,将不会清除所有已分配的内存。 建议在应用程序终止时调用Py_Finalize一次。 此错误报告指出,从版本3.3和2011年3月开始,解释器仍会泄漏内存。 有谁知道这个问题的当前状态? 我很担心,因为我有一个应用程序,其中每个运行实例多次调用解释器,我遇到内存泄漏。 我已经使用boost :: python来处理引用计数,并清除了在运行之间运行Python程序所创建的所有引用的全局字典。 我有一些单身人士课 – 这可能是问题吗? 这是一个易处理的问题还是Python解释器中的错误?

为什么strcpy()和strcat()在嵌入式域中不好用

在这里,我想了解strcpy() and strcat()缺点 我想了解嵌入式域/环境中的这些function危险区域。 有人告诉我,我们从不在嵌入域中使用strcpy,strcat and strlen函数,因为它以null结尾,有时我们处理加密数据和null字符,所以我们无法获得实际结果,因为这些函数停止在null字符上。 所以我想知道这些function的所有东西和其他替代品。 我们如何使用其他替代function

转置2Darrays

你如何有效地转置矩阵? 是否有这样的库,或者你会使用什么算法? 例如: short src[W*H] = { {1,2,3}, {4,5,6} }; short dest[W*H]; rotate_90_clockwise(dest,src,W,H); //<– magic in here, no need for in-place //dest is now: { {4, 1}, {5, 2}, {6, 3} }; (在我的具体情况下,它的src数组是原始图像数据,目标是帧缓冲,我在ARM上嵌入了不支持汇编的工具链)

通过C API从字符串创建和调用python函数

是否可以从字符串加载python函数,然后使用参数调用该函数并获取返回值? 我正在使用python C API从我的C ++应用程序中运行python代码。 我可以使用PyImport_Import从文件加载模块,使用PyObject_GetAttrString从中获取一个函数对象,并使用PyObject_GetAttrString调用该函数。 我想做的是从字符串而不是文件加载模块/函数。 是否有一些等同于PyImport_Import ,它允许我传递一个字符串而不是文件? 我需要将参数传递给我正在调用的函数,我需要访问返回值,所以我不能只使用PyRun_SimpleString 。 编辑: 在打开PyRun_String后我找到了这个解决方案。 我正在创建一个新模块,获取它的字典对象,在调用PyRun_String传递它以在我的新模块中定义一个函数,然后为新创建的函数获取一个函数对象,并通过PyObject_CallObject调用它,传递我的args。 这是我发现解决我的问题: main.cpp int main() { PyObject *pName, *pModule, *pArgs, *pValue, *pFunc; PyObject *pGlobal = PyDict_New(); PyObject *pLocal; //Create a new module object PyObject *pNewMod = PyModule_New(“mymod”); Py_Initialize(); PyModule_AddStringConstant(pNewMod, “__file__”, “”); //Get the dictionary object from my module so I can pass […]

SIGTRAP尽管没有设置断点; 隐藏的硬件断点?

我正在为STM32嵌入式系统调试这个软件。 在其中一个函数中,我的程序一直在遇到某种断点: SIGTRAP,跟踪/断点陷阱 但是,在GDB中,当我执行info breakpoints我得到No breakpoints or watchpoints 。 断点实际上对应于我在很久以前设置的断点,在另一个版本的可执行文件中。 当我设置该断点时,GDB告诉我automatically using a hardware breakpoint on read-only memory (或类似消息) automatically using a hardware breakpoint on read-only memory 。 我认为硬件断点仍然在我的芯片上,尽管已经加载了新版本的软件。 如果确实存在虚假断点,我该如何找到并删除它?

((Port *)0x41004400UL)在这里是什么意思?

我正在开发一种基于32位ARM的微控制器的开发板(即电路板是Atmel SAM D21J18A)。 我还处于学习阶段,我还有很多工作要做,但我真的很喜欢嵌入式系统。 我有一些C背景。但是,这显然是不够的。 我正在查看Atmel的一个示例项目的代码,我并没有真正得到它的一些部分。 这是其中之一: #define PORT ((Port *)0x41004400UL) /**< \brief (PORT) APB Base Address */ 端口定义为: typedef struct { PortGroup Group[2]; /**< \brief Offset: 0x00 PortGroup groups [GROUPS] */ } Port; 和PortGroup定义为: typedef struct { __IO PORT_DIR_Type DIR; /**< \brief Offset: 0x00 (R/W 32) Data Direction */ __IO PORT_DIRCLR_Type DIRCLR; /**< \brief […]