完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想在C中定义一个XC8函数,我可以从我的MPASM项目中调用它。使用“@”指定符,我们可以指定在所得到的固件文件中,这个函数结束的位置:但由于这个函数不会从C代码本身调用,所以链接器会删除它。我能阻止这个吗?
|
|
相关推荐
9个回答
|
|
你确定你知道自己在做什么吗?C代码假定所有的C运行时代码都已运行,并且内存分配由C编译器处理。您提到的是从C调用的程序集代码吗?
|
|
|
|
不久以前有一些类似的线索。目前无法找到它……缩短事情:找到开关禁用优化步骤消除未使用的代码。
|
|
|
|
对。我想调用的C函数是无参数的,只触及访问库中的全局属性。从程序集调用它应该是一个“call myfunc”语句。它是从我用mpasm编写的中断内部调用的。我想我遇到过这个线程,但它是关于一个在内存使用统计中没有考虑的变量。这是关于一个程序存储器。完全禁用此优化不是一个选项,因为我希望我的代码中存在许多调试函数,这些函数在发布版本中根本不被调用。目前看来,最接近解决办法的是在调用代码之前放置一些虚假的条件测试。尽管它工作起来并不优雅。但我希望有更好的东西,我为什么问这个问题。
|
|
|
|
这里有一个线程,你必须把函数名放在哪里。还可以通过将函数名赋值给指针来欺骗。
|
|
|
|
那当然更优雅了。我来看看我能不能找到正确的方法。
|
|
|
|
您要查找的信息是在手册3.4.5.2中,如何停止未使用的函数被删除?如果C函数的符号在手写程序集代码中被引用,则该函数将永远不会被删除,即使它没有被调用,或者它的地址从未在C代码中被获取。您只能引用该文件中的符号;因此,该文件可以包含以下GLOBAL_myFuncwhere myFunc是所讨论的函数的C名称(注意程序集名称的前下划线,请参阅5.12.3.1节“等效程序集符号”)。这有助于防止函数去除优化被执行。
|
|
|
|
为什么不重写ASM中的函数呢?它会更快,更适合中断。否则,很难找出正确的上下文保存(通过更改和重新编译将执行100%)。
|
|
|
|
从高效ASM中写的ISR调用C函数似乎是矛盾的。
|
|
|
|
你完全正确。我同意,要真正成为一个好主意,这需要很少的案例,并且当这样做时,很难跟踪所需的上下文保存。我最终可能会咬牙切齿。但现在我对可用的解决方案感到满意。
|
|
|
|
只有小组成员才能发言,加入小组>>
5248 浏览 9 评论
2037 浏览 8 评论
1957 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3218 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2265 浏览 5 评论
788浏览 1评论
680浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
608浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
685浏览 0评论
582浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 09:53 , Processed in 1.646106 second(s), Total 92, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号