DSP汇编中的结构体参数传入及使用、双条件操作

2019-03-26 15:48发布

DSP汇编中的结构体参数传入及使用、双条件操作 我的板子是c6740,开发中遇到几个汇编问题求教:
1. 结构体参数传入及使用
比如一个实现简单游程编码的测试程序,如下:
struct _STREAM
{
    BYTE *buffer;
    int  size; //buffer长度
}
void encode(BYTE *pSrc, datasize, STREAM *pDstStream)
在DSP汇编中,A4接收pSrc,B4接收datasize, 问题:
--那哪个寄存器接收*pDstStream?是正常的A6接收,还是有特殊的寄存器?
--如何对结构体成员操作,如把数据存到buffer、size++等 2. 在汇编中如何写双条件判断语句啊?
如下面源程序中的!input && datasize?
while(!input && datasize)
{
    numZeros++;
    GetNextInput(input);
} 3.优化
如实现上面功能的汇编程序,因为程序需要一个字节一个字节去判断,然后进行操作,程序中有比较多的循环操作,
所以,在汇编中会出现比较多的NOP指令,这样程序性能会比较低吧?请问应该如何去提高程序性能呢? [ 本帖最后由 breeze505 于 2012-5-9 11:04 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
carrotchen
1楼-- · 2019-03-27 14:34
如果这些小函数比较简单的话,最好内联。

汇编调用子程序可以如下调用:
   STW  B3,*SP--[0x2] ; B3 压栈,SP(B15)需8byte对齐,否则非对齐的SP将导致程序Crash
    B sub_function ; 需要调用子程序的地方
    ADDKPC ret_addr, B3, 4 ; 保存子函数的返回地址到B3
ret_addr:
    ...
    LDW  *++SP[0x2], B3 ; B3出栈

由此可见,汇编代码中调用子程序的过程比较麻烦,相当于把CCS的C编译器做的工作照抄一份,优化的意义不大。
一般而言,核心的函数使用汇编优化,如果还需调用子函数,那么考虑把子函数内联,或者子函数做成汇编,父函数还是用C来实现,并在数据结构,程序结构上做针对性的优化。
breeze505
2楼-- · 2019-03-27 16:44
 精彩回答 2  元偷偷看……
carrotchen
3楼-- · 2019-03-27 20:05
 精彩回答 2  元偷偷看……
breeze505
4楼-- · 2019-03-27 20:54
1.请帮看下下面这程序是否符合你上面所述的流程?
2. 另外,程序编译会出现unresolved symbol condition1, first referenced in......
请问要怎么修改呢?
        .global        function_1
        .global        function_2
        .global        function_3
......
        [!value]        B        .S2        function_1
        NOP        5
        ADDKPC next_condition2, B3, 4
next_condition2:        
        CMPGT        .L1        value, 1, A_tmp
        [A_tmp]        B        .S2        function_2
        NOP 5
        ADDKPC next_condition3, B3, 4
next_condition3:                
        B        .S2        function_3
        NOP 5
        ADDKPC next, B3, 4
*===================== LOOP EPILOG ============================== *

next:
        [!A_loopcount]B .S2 B3   ;return
||        MVK .S1 1,A4 ;return 1
        NOP 5
        .end
function_1:
......
B .S2 B3        
nop        5       

function_2:
....
B .S2 B3        
nop        5       

function_3:
.....
B .S2 B3        
nop        5
carrotchen
5楼-- · 2019-03-28 00:55
[!value]        B        .S2        function_1
NOP        5 ; 这个NOP 5有问题,在ADDKPC之前已经进入function_1,此时B3还未赋值(next_condition2),从子函数function_1中就无法退还到主函数,必须在B生效前给B3赋值(next_condition2)。
ADDKPC next_condition2, B3, 4
breeze505
6楼-- · 2019-03-28 03:11
另外,程序编译会出现unresolved symbol condition1, first referenced in......

编译出错。。。这个该怎么解决呢

一周热门 更多>