1)为什么要直接读取CC?
香水城 发表于 2011-6-29 10:57 
读取CC主要用在临界段上。
一个简单例子:
uint8 CriticalReadByte(const volatile uint8 * pdata)
{
uint8 result;
CRITICAL()
{
result=pdata[0];
}
return result;
}
汇编代码:
STM8:
CriticalReadByte:
PUSH CC
POP A
AND A, #0x28
LD S:?b0, A
SIM
// 27 {
// 28 result=pdata[0];
LD A, (X)
LD S:?b1, A
// 29 }
LD A, S:?b0
PUSH CC
POP A
AND A, #0xffffffffffffffd7
OR A, S:?b0
PUSH A
POP CC
// 30 return result;
LD A, S:?b1
RET
// 31 }
// 32
AVR:
RSEG CODE:CODE:NOROOT(1)
// 23 uint8 CriticalReadByte(const volatile uint8 * pdata)
CriticalReadByte:
// 24 {
// 25 uint8 result;
// 26 CRITICAL()
IN R18, 0x3F
CLI
// 27 {
// 28 result=pdata[0];
MOVW R31:R30, R17:R16
LD R16, Z
// 29 }
OUT 0x3F, R18
// 30 return result;
RET
|