This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我想创建一个汇编函数、用 IACK 指令触发 CLA 任务。 此函数的参数中的任务位对应于我们要触发的任务。 但是 IACK 指令采用16位常量值作为参数、我不知道它是否可行、或者我是否应该为我要触发的每个任务具有一个函数。
在这里、原型和我编写的函数:
void TRIGGER_TASK(const Uint16 ClaTaskBit);
.page .global TRIGGER_TASK .text TRIGGER_TASK: IACK AL LRETR .endasmfunc
在这里、我得到的误差(因为我假设 AL 寄存器不是恒定的):
>> Compilation failure DRVCLA/SRC/subdir_rules.mk:30: recipe for target 'DRVCLA/SRC/TRIGGER_TASK.obj' failed "../DRVCLA/SRC/TRIGGER_TASK.asm", ERROR! at line 32: [E0003] Syntax error - Operand 1 IACK AL Errors in Source - Assembler Aborted gmake: *** [DRVCLA/SRC/TRIGGER_TASK.obj] Error 1
您好、Nathan、
您使用汇编代码来触发任务的任何原因? CLA、h 有一个用于触发任务的 API。
静态内联空
CLA_forceTasks (uint32_t base、uint16_t taskFlags)
其中'taskFlags"是要触发的任务。
请参见以下位置的示例:
\driverlib\f2837xd\examples\cpu1\cla
IACK 仅接受 IACK #0x1等直接偏移、不采用寄存器参数。 因此、如果您需要使用汇编语言、则需要类似这样的东西(下面列出的伪代码);
//如果 AH = 0x1 (创建用于检查条件的汇编代码并分支以更正 IACK 指令。
IACK #0x1
//如果 AH = 0x2
IACK #0x2
等等
谢谢、
Ashwini
您好!
感谢您的回答、我想使用汇编代码 ro 触发任务来使用 IACK 指令、并避免在 实时执行期间对 MIFRC 寄存器使用 EALLOW 和 EDIS。
Nathan