Embedded arm cortex m3显示器

Embedded arm cortex m3显示器,embedded,arm,embed,cortex-m3,Embedded,Arm,Embed,Cortex M3,您好,我正在使用arm控制器lm3s8962,我无法理解下面的代码,根据我的理解,它正在检查字符是否来自他使用ascii字符创建的数组{即在while循环中:while(*pcStr!=0)}, 在“构建并显示字符缓冲区”一行之后,我无法理解他在代码中所做的事情。有人能解释一下吗 void RIT128x96x4StringDraw(const char *pcStr, unsigned long ulX, unsigned long

您好,我正在使用arm控制器lm3s8962,我无法理解下面的代码,根据我的理解,它正在检查字符是否来自他使用ascii字符创建的数组{即在while循环中:while(*pcStr!=0)}, 在“构建并显示字符缓冲区”一行之后,我无法理解他在代码中所做的事情。有人能解释一下吗

void
    RIT128x96x4StringDraw(const char *pcStr, unsigned long ulX,
                          unsigned long ulY, unsigned char ucLevel)
    {
        unsigned long ulIdx1, ulIdx2;
        unsigned char ucTemp;

        //
        // Check the arguments.
        //
        ASSERT(ulX < 128);
        ASSERT((ulX & 1) == 0);
        ASSERT(ulY < 96);
        ASSERT(ucLevel < 16);

        //
        // Setup a window starting at the specified column and row, ending
        // at the right edge of the display and 8 rows down (single character row).
        //
        g_pucBuffer[0] = 0x15;
        g_pucBuffer[1] = ulX / 2;
        g_pucBuffer[2] = 63;
        RITWriteCommand(g_pucBuffer, 3);
        g_pucBuffer[0] = 0x75;
        g_pucBuffer[1] = ulY;
        g_pucBuffer[2] = ulY + 7;
        RITWriteCommand(g_pucBuffer, 3);
        RITWriteCommand(g_pucRIT128x96x4VerticalInc,
                        sizeof(g_pucRIT128x96x4VerticalInc));

        //
        // Loop while there are more characters in the string.
        //
        while(*pcStr != 0)
        {
            //
            // Get a working copy of the current character and convert to an
            // index into the character bit-map array.
            //
            ucTemp = *pcStr++ & 0x7f;
            if(ucTemp < ' ')
            {
                ucTemp = 0;
            }
            else
            {
                ucTemp -= ' ';
            }

            //
            // Build and display the character buffer.
            //
            for(ulIdx1 = 0; ulIdx1 < 6; ulIdx1 += 2)
            {
                //
                // Convert two columns of 1-bit font data into a single data
                // byte column of 4-bit font data.
                //
                for(ulIdx2 = 0; ulIdx2 < 8; ulIdx2++)
                {
                    g_pucBuffer[ulIdx2] = 0;
                    if(g_pucFont[ucTemp][ulIdx1] & (1 << ulIdx2))
                    {
                        g_pucBuffer[ulIdx2] = (ucLevel << 4) & 0xf0;
                    }
                    if((ulIdx1 < 4) &&
                       (g_pucFont[ucTemp][ulIdx1 + 1] & (1 << ulIdx2)))
                    {
                        g_pucBuffer[ulIdx2] |= (ucLevel << 0) & 0x0f;
                    }
                }

                //
                // Send this byte column to the display.
                //
                RITWriteData(g_pucBuffer, 8);
                ulX += 2;

                //
                // Return if the right side of the display has been reached.
                //
                if(ulX == 128)
                {
                    return;
                }
            }
        }
    }
void
RIT128x96x4StringDraw(常量字符*pcStr,无符号长ulX,
无符号长ulY,无符号字符级别)
{
无符号长ulIdx1,ulIdx2;
无符号字符;
//
//检查参数。
//
断言(ulX<128);
断言((ulX&1)==0);
断言(ulY<96);
断言(核级<16);
//
//设置一个窗口,从指定的列和行开始,结束
//在显示屏的右边缘,向下8行(单字符行)。
//
g_pucBuffer[0]=0x15;
g_pucBuffer[1]=ulX/2;
g_[2]=63;
RITWriteCommand(g_pucBuffer,3);
g_pucBuffer[0]=0x75;
g_pucBuffer[1]=ulY;
g_pucBuffer[2]=ulY+7;
RITWriteCommand(g_pucBuffer,3);
RITWriteCommand(g_pucRIT128x96x4VerticalInc,
尺寸(g_pucRIT128x96x4VerticalInc);
//
//当字符串中有更多字符时循环。
//
而(*pcStr!=0)
{
//
//获取当前角色的工作副本并转换为
//索引到字符位图数组中。
//
ucTemp=*pcStr++&0x7f;
如果(ucTemp<'')
{
ucTemp=0;
}
其他的
{
ucTemp-='';
}
//
//构建并显示字符缓冲区。
//
对于(ulIdx1=0;ulIdx1<6;ulIdx1+=2)
{
//
//将两列1位字体数据转换为单个数据
//4位字体数据的字节列。
//
对于(ulIdx2=0;ulIdx2<8;ulIdx2++)
{
g_pucBuffer[ulIdx2]=0;

如果(g_pucFont[ucTemp][ulIdx1]&(1他正在进行一些位操作以建立字节

x |=y
x=x | y
相同,它将所有的1保留在x中,并且如果y在同一位置有1,也会将一些0更改为1


1如果你想知道答案,请重新组织你的问题,也请阅读FAQhi MELLWCANDLE我编辑了我的帖子,看看你是否能理解我的问题,实际上我无法找到他是如何构建缓冲区的。请你向我澄清一下,谢谢你的回答。我理解代码,但我在这方面遇到了一些问题(核级C不会使运算符过载。
核级