我知道我又想写日志了。。。。

作者反思了从农民式的生存目标到追求个人价值实现的过程,表达了在人生选择和目标设定上的迷茫与思考。

每次到这样的时候就想写点东西扔网上去。。。

一段话,是清华校长给毕业生的五句话里面的:

说有个记者问放羊的小孩,为什么放羊?答:为了挣钱,挣钱干啥?答:盖房子,盖房子干啥?答:娶媳妇,娶媳妇干啥?答:生孩子,生孩子干啥?答:放羊!

记得去年在人大听一个教授讲管理学基础课,他说你们虽然都是研究生,但很多人本质上还是农民!大家惊愕,窃窃私语。他说你们为什么读研究生,很多人是不是想找个好工作,找好工作为了什么,为了找个好老婆,吃喝住行都不错,然后生孩子,为了孩子的前途更光明,这些不就是农民的朴素想法吗?那个农民父母不希望自己的子女比自己更好?说说你们很多人是不是农民思想,什么时候,你能突破这种思维模式,你就超脱了。

“这种思维模式”,也不坏啊,至少,跟别人说起来的时候,他们会说你很成熟。我一直在想,自己什么时候能够有这样的被称作成熟的思维模式啊~不说这个是不是农民,可至少,目标明确,可以为之努力奋斗啊~再退一步,是农民又怎么样,你人大教授就可以看不起农民了吗?~~~~~(sigh,这句纯属FQ了。。)

可~我的思维模式是怎么样的呢?自己为什么学习,为什么奋斗呢?现在能知道的,别人也用来劝我的是,“那个样子”总不会错的,因为大家都那样子去做,所以,自己也要去那样子~比如高考,比如考研~~~

可我真的不想这样迷迷糊糊的,即使,“那个样子”最后真的不错~

我想知道自己想要什么,想知道自己为什么存在,如果自己的存在对外物没有影响,那么自己还存在做什么?如果,我是应该对周围产生影响的,那么我究竟该对周围产生什么影响呢????

或者我的思维模式已经改变了——这个结论看起来是应该庆贺的,因为“突破这种思维模式,你就超脱了”。

可惜,我没有超脱,至少目前没有,我现在还不如之前的样子,一切都可以按部就班的做我的“农民”,那样,至少我不会迷茫~我目标明确,我为之奋斗,我动力充沛~最后会HE~

~~~

其实,自己也是有目标的。那里面有平平稳稳的“农民”小幸福,也有让自己的存在“有价值”的个人价值实现方法~

中学的时候,想着自己这辈子要过得值,要“尝尽人生百味”,要经历能够经历的所有的。

~~~

明天研究生入学考试,不管自己准备的如何,准备过程中如何矛盾,现在如何不知道自己在做什么,还是要全身心的投入,去考一把。

结果如何,会对自己有什么影响~很重要,但不是自己现在能够掌控的~

想说随缘~可心有不甘~但也没有什么办法~

Bless~

# 代码概述 该文件是嵌入式项目在 Keil 开发环境中编译时生成的 **Build Output 日志**,记录了编译过程中的错误信息。主要涉及一个名为 `core_cm3.c` 的源文件,在处理与处理器堆栈指针相关的函数时出现多个编译错误。 # 代码解析 根据输出日志,你遇到的问题集中在以下几个方面: --- ### ❌ 错误类型 1:**naked 函数中包含非汇编语句** > 报错示例: ```text start/core_cm3.c(445): error: non-ASM statement in naked function is not supported uint32_t result = 0; ``` - 你在 `get_PSP()`、`get_MSP()` 这类被声明为 `__attribute__((naked))` 的函数里了 C 语言语句(比如定义变量)。 - `naked` 函数意味着:**编译器不会自动生成入口和出口代码(如压栈、出栈)**,必须由你自己用内联汇编完整实现。 - 因此,像 `uint32_t result = 0;` 这种局部变量声明是非法的。 ✅ 正确做法:只使用 `__asm` 汇编指令,不任何 C 语句。 --- ### ❌ 错误类型 2:**naked 函数中使用了函数参数** > 报错示例: ```text start/core_cm3.c(465): error: parameter references not allowed in naked functions : : "r" (topOfProcStack) ) ``` - 你在 `set_PSP()` 或 `set_MSP()` 中试图使用传入的参数 `topOfProcStack` 或 `topOfMainStack`。 - 虽然参数在语法上可以存在,但由于 `naked` 函数没有标准的函数调用框架,直接引用参数可能导致未定义行为或编译失败。 ✅ 正确做法:通过寄存器传递值并在纯汇编中处理,例如: ```c __attribute__((naked)) void set_PSP(uint32_t addr) { __asm volatile ( "MSR PSP, r0 \n\t" "BX LR" ); } ``` 此时参数会默认放在 `r0` 寄存器中,避免显式引用变量名。 --- ### 📌 具体出错位置总结 | 行号 | 函数名 | 问题描述 | |------|----------------|----------| | 442 | `get_PSP()` | 声明为 `naked`,但函数体内有 `uint32_t result = 0;`(非法C语句) | | 461 | `set_PSP()` | 使用了参数 `topOfProcStack`,在 naked 函数中不允许直接引用 | | 476 | `get_MSP()` | 同样有非法C语句 `result = 0` | | 495 | `set_MSP()` | 引用了参数 `topOfMainStack` | --- ### ✅ 解决建议 将这些函数改为纯汇编形式,例如: ```c __attribute__((naked)) uint32_t get_PSP(void) { __asm volatile ( "MRS R0, PSP \n\t" "BX LR" ); } ``` 不要有任何 C 变量或表达式! --- 最终目标是让编译器看到的 naked 函数内部**只有 `__asm` 汇编字符串**,没有任何 C 语义。 目前你的代码违反了 naked 函数的两大禁忌: 1. ❌ 包含 C 语句(变量声明) 2. ❌ 直接引用函数参数 只要修复这两类问题,就能通过编译。 # 知识点(列出该代码中遇到的知识点) 1. **naked 函数限制**:`__attribute__((naked))` 函数禁止C语句与参数访问,仅可使用内联汇编。 2. **ARM Cortex-M 启动代码**:`get_PSP/set_PSP/get_MSP/set_MSP` 是RTOS上下文切换关键函数,常用于任务调度。 3. **编译器属性机制**:GCC/ARMCLANG 支持 `__attribute__` 扩展控制函数行为,需严格遵守语义规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值