OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4523|回复: 5

求助 0x01000000L; /* PSR */是什么意思

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2018-6-10
在线时间
31 小时
发表于 2019-2-6 23:37:57 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=applescript,true]/*  初始化线程栈  */
rt_uint8_t *rt_hw_stack_init(void      *tentry,
                                   void      *parameter,
                                                                                                                 rt_uint8_t   *stack_addr)
{
      struct stack_frame *stack_frame;
            rt_uint8_t  *stk;
            unsigned long  i;
        
            /* 获取栈顶指针 rt_hw_stack_init 在调用时,传给stack_addr的是(栈顶指针-4)*/
            stk = stack_addr + sizeof(rt_uint32_t);
            
            /*让stk指针向下8字节对齐*/
            stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk,8);
        
            /*stk指针继续向下移动sizeof(struct stack_frame)个偏移*/
            stk -=sizeof(struct stack_frame);
            
            /* 将stk指针强制转换为 stack_frame类型后存到stack_frame*/
            stack_frame =(struct stack_frame *)stk;
        
            /*以stack_frame 为起始地址,将栈空间里面的sizeof(struct stack_frame)个内存初始化为0xdeadbeef */
            for(i=0; i<sizeof(struct stack_frame)/sizeof(rt_uint32_t); i++)
            {
                    ((rt_uint32_t *)stack_frame) = 0xdeadbeef;
                  }
            
                        /*初始化异常发生时自动保存的寄存器*/
                        stack_frame->exception_stack_frame.r0 =(unsigned long)parameter;
                        stack_frame->exception_stack_frame.r1  = 0;                        /* r1 */
      stack_frame->exception_stack_frame.r2  = 0;                        /* r2 */
      stack_frame->exception_stack_frame.r3  = 0;                        /* r3 */
      stack_frame->exception_stack_frame.r12 = 0;                        /* r12 */
      stack_frame->exception_stack_frame.lr  = 0;                        /* lr */
      stack_frame->exception_stack_frame.pc  = (unsigned long)tentry;    /* entry point, pc */
      stack_frame->exception_stack_frame.psr = 0x01000000L;              /* PSR */
      
                        /* 返回线程指针 */
                        return stk;
}
[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

程序要CM3必须运行在Thumb,所以PSR的EPSR寄存器的T位要置1
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

41

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4531
金钱
4531
注册时间
2017-2-16
在线时间
750 小时
发表于 2019-2-6 23:37:58 | 显示全部楼层
本帖最后由 HSL 于 2019-4-24 20:35 编辑

程序要CM3必须运行在Thumb,所以PSR的EPSR寄存器的T位要置1
xPSR.png
PSR_VALUE.png
回复

使用道具 举报

55

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2018-8-7
在线时间
55 小时
发表于 2019-2-12 14:36:24 | 显示全部楼层
楼主问题解决了吗?
回复

使用道具 举报

4

主题

41

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4531
金钱
4531
注册时间
2017-2-16
在线时间
750 小时
发表于 2019-4-24 20:34:35 | 显示全部楼层
这是cm3手册里提到的
回复

使用道具 举报

8

主题

1034

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3668
金钱
3668
注册时间
2011-5-23
在线时间
2004 小时
发表于 2019-4-26 17:04:53 | 显示全部楼层
楼上正解,给线程准备的初始状态。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2018-6-10
在线时间
31 小时
 楼主| 发表于 2019-4-27 12:21:04 | 显示全部楼层
HSL 发表于 2019-2-6 23:37
程序要CM3必须运行在Thumb,所以PSR的EPSR寄存器的T位要置1

哦哦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-10 15:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表