当前位置: 首页 > wzjs >正文

国际化网站设计广州公司营销型网站建设

国际化网站设计,广州公司营销型网站建设,用阿里云服务器做刷单网站,知名品牌背景:我用的S32K3系列单片机,这芯片的RAM有ECC,就是说上电后如果你不写RAM,直接去读,就会触发ECC故障,然后进入hardfault.于是我就想实现Try Catch,想办法从Hardfault中跳出来。理论上支持CM系列…

背景:我用的S32K3系列单片机,这芯片的RAM有ECC,就是说上电后如果你不写RAM,直接去读,就会触发ECC故障,然后进入hardfault.于是我就想实现Try Catch,想办法从Hardfault中跳出来。理论上支持CM系列,我只实现了Free RTOS的. 裸机也可以的。。包括STM32...实现代码:

核心汇编部分:

#if (configNumberOfExceptionStacks > 0)int xPortUpdateSignalCode(ExceptionContext_t *pxExceptionContext){// 根据寄存器判断是哪些错误码,然后返回对应的信号。这里简单返回总线错误return SIGBUS;}__attribute__((naked)) HardFault_Handler(void){__asm volatile("TST     lr, #0x04 \n" //              ; if(!EXC_RETURN[2])"ITE     EQ \n""MRSEQ   r0, msp                 \n" //; [2]=0 ==> Z=1, get fault context from handler.""MRSNE   r0, psp                 \n" //; [2]=1 ==> Z=0, get fault context from thread."/*"	tst lr, #0x10						\n"  Is the task using the FPU context?  If so, push high vfp registers. *//*"	it eq								\n"*//*"	vstmdbeq r0!, {s16-s31}				\n"*/"stmdb r0!, {r4-r11,lr}			\n" "push {r0} \n""BL vExceptionHappened \n" // vExceptionHappened(r0); r0=异常长下文的栈结构体地址,r1=是否发生在中断"pop {r0} \n""ldmia r0!, {r4-r11,lr}			\n"         /* Pop the core registers. */"TST     lr, #0x04 \n" //              ; if(!EXC_RETURN[2])"ITE     EQ \n""MSREQ   msp, r0                 \n" //; [2]=0 ==> Z=1, update stack pointer to MSP.""MSRNE   psp, r0                 \n" //; [2]=1 ==> Z=0, update stack pointer to PSP.""isb \n""bx lr\n");}
#else
void HardFault_Handler(void)
{while (1){}
}
#endif

FreeRTOS.h:

#if ( configNumberOfExceptionStacks >0 )
#include <setjmp.h>#define	SIGHUP	1	/* hangup */
#define	SIGINT	2	/* interrupt */
#define	SIGQUIT	3	/* quit */
#define	SIGILL	4	/* illegal instruction (not reset when caught) */
#define	SIGTRAP	5	/* trace trap (not reset when caught) */
#define	SIGIOT	6	/* IOT instruction */
#define	SIGABRT 6	/* used by abort, replace SIGIOT in the future */
#define	SIGEMT	7	/* EMT instruction */
#define	SIGFPE	8	/* floating point exception */
#define	SIGKILL	9	/* kill (cannot be caught or ignored) */
#define	SIGBUS	10	/* bus error */
#define	SIGSEGV	11	/* segmentation violation */
#define	SIGSYS	12	/* bad argument to system call */
#define	SIGPIPE	13	/* write on a pipe with no one to read it */
#define	SIGALRM	14	/* alarm clock */
#define	SIGTERM	15	/* software termination signal from kill */  #define	SIGURG	16	/* urgent condition on IO channel */
#define	SIGSTOP	17	/* sendable stop signal not from tty */
#define	SIGTSTP	18	/* stop signal from tty */
#define	SIGCONT	19	/* continue a stopped process */
#define	SIGCHLD	20	/* to parent on child stop or exit */
#define	SIGCLD	20	/* System V name for SIGCHLD */
#define	SIGTTIN	21	/* to readers pgrp upon background tty read */
#define	SIGTTOU	22	/* like TTIN for output if (tp->t_local&LTOSTOP) */
#define	SIGIO	23	/* input/output possible signal */
#define	SIGPOLL	SIGIO	/* System V name for SIGIO */
#define	SIGWINCH 24	/* window changed */
#define	SIGUSR1 25	/* user defined signal 1 */
#define	SIGUSR2 26	/* user defined signal 2 */#endif

task.c修改:

PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL; //原内核代码
PRIVILEGED_DATA UBaseType_t volatile xExceptionHappen = 0;//我加的#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )//原内核代码void * pvThreadLocalStoragePointers[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];#endif//我加的#if ( configNumberOfExceptionStacks > 0 )UBaseType_t uxJmpStacksCounter;jmp_buf JmpStacks[configNumberOfExceptionStacks];volatile ExceptionContext_t    xExceptionContext;volatile    int     xThrowCode;#endif#if ( configGENERATE_RUN_TIME_STATS == 1 )configRUN_TIME_COUNTER_TYPE ulRunTimeCounter; /*< Stores the amount of time the task has spent in the Running state. */#endif

task.c:

#if (configNumberOfExceptionStacks >0)
inline jmp_buf *xGetJmpStackOfCurrentTask()
{TCB_t *self=(TCB_t *)xTaskGetCurrentTaskHandle();configASSERT(self!=NULL);return self->JmpStacks[self->uxJmpStacksCounter];
}
inline void jmp_stack_push()
{TCB_t *self=(TCB_t *)xTaskGetCurrentTaskHandle();configASSERT(self!=NULL);self->uxJmpStacksCounter++;
}inline jmp_buf* jmp_stack_pop()
{TCB_t *self=(TCB_t *)xTaskGetCurrentTaskHandle();configASSERT(self!=NULL);return &self->JmpStacks[--self->uxJmpStacksCounter];
}void vInternalExceptionProcess ()
{taskENTER_CRITICAL();{xExceptionHappen--;}taskEXIT_CRITICAL();TCB_t *self=(TCB_t *)xTaskGetCurrentTaskHandle();configASSERT(self!=NULL);UBaseType_t tempJmpStacksCounter=0;taskENTER_CRITICAL();{tempJmpStacksCounter=self->uxJmpStacksCounter;}taskEXIT_CRITICAL();if(tempJmpStacksCounter==0){extern void vExceptionProcess(TaskHandle_t pxCurrentTask,volatile   ExceptionContext_t *pxExceptionContext);vExceptionProcess(self,&self->xExceptionContext);}else{_throw_(self->xThrowCode);//to do}while(1){vTaskDelay(1000);}
}
/**/
void vExceptionHappened(ExceptionContext_t *pxExceptionContext)
{  xExceptionHappen++;if(xExceptionHappen>1){while(1);//no use configASSERT}TCB_t *self=xTaskGetCurrentTaskHandle();configASSERT(self!=NULL);extern int xPortUpdateSignalCode(ExceptionContext_t *pxExceptionContext);self->xThrowCode=xPortUpdateSignalCode(pxExceptionContext);memcpy((ExceptionContext_t *)&self->xExceptionContext,pxExceptionContext,sizeof(ExceptionContext_t));pxExceptionContext->exception_stack_frame.pc=(BaseType_t)vInternalExceptionProcess;
}
ExceptionContext_t* xGetExceptionContext(void)   
{TCB_t *self=xTaskGetCurrentTaskHandle();configASSERT(self!=NULL);return &self->xExceptionContext;
}
#endif

task.h:

#if (configNumberOfExceptionStacks >0)void jmp_stack_push() PRIVILEGED_FUNCTION;
jmp_buf* jmp_stack_pop() PRIVILEGED_FUNCTION;
jmp_buf *xGetJmpStackOfCurrentTask() PRIVILEGED_FUNCTION;
#define _try_ \jmp_buf *__jmp_buf= xGetJmpStackOfCurrentTask(); \int __jmp_result = setjmp(*__jmp_buf); \if (!__jmp_result) jmp_stack_push(); \if (!__jmp_result)#define _catch_(x) \int x = __jmp_result; \if (!x) jmp_stack_pop(); \else#define _throw_(x) longjmp(*jmp_stack_pop(), x);void vExceptionHappened(ExceptionContext_t *pxExceptionContext);
ExceptionContext_t* xGetExceptionContext(void);   
#else#define _try_ 
#define _catch_(x)
#define _throw_(x)#endif

portmacro.h: (我用S32K自带的LIBC库的Setjmp和longJmp反汇编没有保存浮点,所以我也没保存,实际你需要保存,我try块里用不到浮点,所以没保存,如果要保存自行修改结构体和hardfault汇编哦)

 #if (configNumberOfExceptionStacks >0)#include "Mcal.h"
#include "core_cm7.h"
struct exception_stack_frame
{BaseType_t r0;BaseType_t r1;BaseType_t r2;BaseType_t r3;BaseType_t r12;BaseType_t lr;//这个LR是异常发生后,硬件自动入栈的LRBaseType_t pc;BaseType_t psr;
};
typedef struct stack_frame
{BaseType_t exc_return;//这个LR是进入异常函数后,LR的实时状态。/* r4 ~ r11 register */BaseType_t r4;BaseType_t r5;BaseType_t r6;BaseType_t r7;BaseType_t r8;BaseType_t r9;BaseType_t r10;BaseType_t r11;#if 0BaseType_t s16;BaseType_t s17;BaseType_t s18;BaseType_t s19;BaseType_t s20;BaseType_t s21;BaseType_t s22;BaseType_t s23;BaseType_t s24;BaseType_t s25;BaseType_t s26;BaseType_t s27;BaseType_t s28;BaseType_t s29;BaseType_t s30;BaseType_t s31;#endifstruct exception_stack_frame exception_stack_frame;
}ExceptionContext_t;#endif

调用:

  _try_{uint32_t *addr = (uint32_t *)(&__BootAppComSramStart__);return *addr;}_catch_(x){return 0;}


文章转载自:

http://stWph7y9.Lqypx.cn
http://rT986wfr.Lqypx.cn
http://kagY4fic.Lqypx.cn
http://EGvhguJ6.Lqypx.cn
http://owzNCqSL.Lqypx.cn
http://dyu2t51z.Lqypx.cn
http://VOAKZdUX.Lqypx.cn
http://4a36QJPt.Lqypx.cn
http://yYNUzlk9.Lqypx.cn
http://MxUnSuBM.Lqypx.cn
http://dOKoWDiT.Lqypx.cn
http://NOQssdPE.Lqypx.cn
http://dTp3qHVJ.Lqypx.cn
http://pMNSmKC9.Lqypx.cn
http://b2awbrWF.Lqypx.cn
http://3c2J7J9T.Lqypx.cn
http://DH7ZqVb8.Lqypx.cn
http://UBbQIxtR.Lqypx.cn
http://pQni3Wki.Lqypx.cn
http://VxPyiKFQ.Lqypx.cn
http://1e0ZsvN7.Lqypx.cn
http://dkZ8gbVe.Lqypx.cn
http://sQ8QmNNk.Lqypx.cn
http://JHFPQNgZ.Lqypx.cn
http://K5fN4PwP.Lqypx.cn
http://kpEs5dDf.Lqypx.cn
http://K7d9Vik3.Lqypx.cn
http://x6u44Zfr.Lqypx.cn
http://zxEFNj7C.Lqypx.cn
http://MqdCHFqv.Lqypx.cn
http://www.dtcms.com/wzjs/704456.html

相关文章:

  • 展示型网站建设标准最近韩国电影片在线观看免费高清中文
  • wordpress建站 app访问墨西哥网站后缀
  • 网站后台选择做网站的网页
  • 个人网站如何发布长春网站制作顾问
  • 江西网站icp备案注销个人网页html代码
  • 做网站如何防止被坑wordpress 交流群
  • qq网站登录入口湖南做网站公司
  • 如何查询网站空间大小西安蓝海网站建设
  • 杭州 网站定制机械英文网站
  • 湖南怀化市住房城乡建设局网站百度法务部联系方式
  • 广东湛江怎么做网站教程优酷专门给马天宇做的网站
  • 手机做网站多少钱现在可以去贵阳吗
  • 怎么推广自己的网站工程管理咨询公司
  • 河北新闻最新消息10条昆明网站建设推广优化
  • 源码网站gitwordpress wpdx
  • 西安开发网站的公司安卓可视化开发工具软件
  • 网站建设行业好做吗工作计划怎么写
  • 东莞网站seo优化网站建设网站服务流程
  • 做医院健康专题网站郝友做的网站
  • 怎么找淘宝客网站城市建设投资公司网站
  • 北京app建设 网站开发公司做暧昧免费视频大全网站
  • 网站直接跳转前端机构培训
  • 杭州哪家做网站展示型网站建设的标准
  • 上海 网站建设官网mini1cn下载迷你世界登录
  • 2023免费推广网站seo网站文章编辑软件
  • 一个页面的网站wordpress 插件交互
  • 门户网网站建设功能需求表网站开发公司徐州
  • 随县网站建设网络营销外包推广效果
  • 网站开发的最初阶段包括合肥网站建设代理商
  • 男女直接做那个视频网站网络营销工具有哪些?