工具/软件:Code Composer Studio
Win7 (SP1)、CCS 6。
我正在使用"函数跳转表"进行程序、我很难将该表放置在第0页的程序部分(.text)中。
我的程序从串行端口接收范围为"0"..Z"的 ASCII 字节、然后根据该字节、我要跳转到43个不同的函数。
理想情况下、我希望将表放在.text 段中的某个位置。 实际位置不重要。
这是我目前为止所拥有的、并且这起作用...
以下是 Menu_Commands.def 的部分内容
/* 0 */ GetParagraphs, /* 1 */ GetDirect, /* 2 */ PutDirect, /* 3 */...(更多40个)
对应的 FunctionCallTable 的声明如下所示...
#pragma DATA_SECTION (FunctionCallTable、"FuncctCodeTbl"); 静态空(* FunctionCallTable[])(空)={ #include "Menu_Commands.def"//请参阅上面的*/ };
最后、实际跳转的代码...
if ((byte1 >="0")&&(byte1 <='Z'){ 字节1 -='0'; FunctionCallTable[byte1](); }
我在第1页的闪存中创建了一个存储器区域、然后我创建了一个段(如上所示)、这样做是可行的、但问题是编译器或链接器在.cinit 段中创建了一组条目、因为它认为这是需要初始化的数据。 更不用说留出一些闪存的所有工作、以便两个存储器区域不会重叠。
因此、我尝试用以下内容替代该 pragma ...
#pragma CODE_SECTION (FunctionCallTable、".text");
但我收到一个编译器错误、提示...
"n:/Standalone/Piccolo-28022/Src/MainSub.c、第81行:警告#1111-D:pragma CODE_SECTION 只能应用于函数定义、而不能应用"FunctionCallTable"(在第83行声明)
请、有人能告诉我如何将其设置为直线吗?
我已经考虑在汇编器中编写所有这些内容、我确信我可以这样做、但我宁愿让 C 编译器来处理它。
我还有一个问题、这可能需要一个单独的线程、但它的关系很松散。
我遇到链接器错误...
"n:/Standalone/Piccolo-28022/CMD/_Standalone (general).cmnd"、第301行:错误#10099-D:程序不能放入可用内存中。 针对大小为0x56的"FunctCodeTbl"段运行对齐/分块放置失败第1页。 可用存储器范围: F_FUNTABL 大小:0x60 未使用:0x60 最大孔数:0x60
如您所见、所需的量为0x56、空穴为0x60。 我还没有弄清楚这一点。
感谢您在这方面的任何帮助、
标记