关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6391|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 e( X0 M, l& {, q% w3 M
& `4 H3 {' C+ @  {$ C0 i9 D    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% a+ u8 P4 x# j! d
+ p  h7 F  B' E- M' A, {
其他程序段。。。。。( q9 R# {; O* @2 t- R# ?

: H, R. J8 v& N: s, N0 w( Y   free(x_d);) z1 O, b2 b) `, ~) Z0 Z
  p6 u: m  m5 D. g2 l, x" Z8 H( w- Y
使用DSP侧单独调试功能,验证动态申请没有问题,
# @# R3 O/ C* d$ j6 A% c, m7 ]
. m) {+ j3 Z, V# ?' v! _7 G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! T, v9 V' }  c' L. n) H. X

' f* v) q  s4 H
+ F" P0 u" F* M' P  G% a& W" T* K0 s2 C/ c6 A7 F# h2 a7 _
8 A0 m' ]& X4 e! D" e" s
7 A5 d- v5 ~0 A6 q3 q+ \4 F5 @

) l1 r8 h7 a, d3 I2 i$ P# i+ w' S
& j; Z: u2 P7 L1 s( o

' ?/ |1 \4 t+ O+ v5 ~- M2 @- R& {' p  ^6 S: x; p6 v1 w; J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 \+ t8 p0 r( k2 O) U8 Z
Program.heap = 0;
' ]( G5 A$ f- R  x0 [# G* d8 PProgram.argSize = 100;  /* minimum size */
3 j" m+ V' v3 NProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */# f0 k! ~: B) ]% ?/ Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 N$ U1 y6 \" H+ J  s/ r! k; x
var heapMemParams = new HeapMem.Params();
- v9 v" n; S' O6 BheapMemParams.size = 0x4000;
1 v3 I& d& [# o# C" z
' s$ H, i0 Q, gvar Memory = xdc.useModule('xdc.runtime.Memory');
9 r, |& i1 A8 w! T  h8 AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 p0 O  ?4 x- ^+ ~1 E& n: `- e$ z  X) S- y4 V* q
我大约calloc  每次共计大小为5K*16bits,
4 d$ n6 |# v7 Q$ w4 O而默认配置才0x4000、需要改大。
0 @* B" N2 g* {) v) D
+ k6 ^+ w) Q7 I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% o- y1 l6 ~4 G% j, F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) C6 c: p6 M5 `5 [7 Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- a' E( q- N2 [$ w; M

5 g4 f& n! k2 d$ L是不是需要在DSP.CFG中进行配置
6 l+ C/ ?+ H. N2 F) w( }) X我现在的配置为, X" o, C5 f  u7 T

2 l# M; q, L0 M+ Y9 L/*( g' {0 w/ S# ~( q9 M% y
*  ======== Operating System Configuration ========0 O) s3 G* W* i9 O' D( k- f2 o1 o
*/
9 s% a- T1 P8 j4 r5 a# \7 e! s: h/ x& E- J7 A9 K- h  L1 }6 f
/* no rts heap */. K% R: D3 z% G7 |
Program.heap = 0;& x. p! W/ E( y! F4 u
Program.argSize = 100;  /* minimum size */7 C" F* t1 x5 R
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! s" F* S/ L4 h" {1 D3 C8 c+ V' h
8 \7 f  d$ v1 f8 O
/* create a default heap */) D3 E+ Y9 a3 o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ l# K4 J0 ?/ Z0 ^9 Bvar heapMemParams = new HeapMem.Params();
- S$ k, ^( I" LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 R- w$ k& B; F
7 Z! }" x+ {) ~
var Memory = xdc.useModule('xdc.runtime.Memory');
3 q" b- V8 N, v% \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 _, e+ y, d! K7 ]5 M( M$ V9 `
- \! ~6 x9 {+ k7 W$ B# X! Q0 F/* configure System module */
2 v" b/ [% l  x& l* evar SysMin = xdc.useModule('xdc.runtime.SysMin');! p6 }3 a8 i; ?( d7 e. t
SysMin.bufSize = 0x1000;
! u# \. k  u% n7 @) iSysMin.flushAtExit = false;/ `' v6 F7 a% T( Q

1 |% A8 \- O: z' i1 J" dvar System = xdc.useModule('xdc.runtime.System');
2 V7 `; Z) B7 s" p6 u4 m) }3 k6 nSystem.SupportProxy = SysMin;
# x8 e' l5 T( y  J
% p: U+ @6 N" [! G/* configure SysBios to use the lower half of Timer 1 */1 p: q5 ^. j. c" j7 n& p/ l
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- n& z! n+ o, }9 o+ C1 Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( z& c& v7 ~6 h' C  g
Timer.timerSettings[1].master = true;+ x  L) N) N: K( H
Timer.defaultHalf = Timer.Half_LOWER;, ?# o6 X) e5 Y$ V/ Q- O
Clock.timerId = 1;: D8 N7 o" D" V6 t! e2 P  S" `( j

- y0 r+ S9 q: `& J5 @/ @* F* [7 G4 F! N: v
/*% J0 u' u/ M, k; L& R7 U
*  ======== Miscellaneous Configuration ========* P, v8 M5 G4 |( }8 @( {
*/4 j% i$ ]+ L2 H1 G5 V# W

4 i0 U5 M' ?2 |6 X6 {& K- u! a/* set default diags mask */& }* e3 i/ J9 l- Z$ B
var Diags = xdc.useModule('xdc.runtime.Diags');/ ^4 W# e& T0 {8 t7 L5 V
var Defaults = xdc.useModule('xdc.runtime.Defaults');
* |9 @, ?/ h! h4 m% v& Q* f0 J" V. q4 i7 ]) Z+ G1 z$ k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' m# a8 |1 j) ]
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, o# C. z) J$ n' o6 U% M$ W
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 D( x. s& _. O) eDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// ]7 a9 n" B: G3 A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 _/ h% V7 K8 z% K" sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 l2 l. q- U# u5 X) R
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ W. M& R' ~; _2 t! }' M
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; y1 z# o, n1 t/ W- S) `( IDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 W+ D! Y$ }* _: m- H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 z! W* d' r) N- ~; C4 ?2 {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 r$ {, Z; K' |Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ f1 F* S0 c0 Q; ?6 {. p  CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  S5 {( X  J: x$ Z8 B
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ ]3 v. ?0 Q# I* j0 x" U" I7 b+ h' r" Y6 T: @2 E9 k
/* override diags mask for selected modules */
+ C4 d6 j7 O9 f0 o5 m% Xxdc.useModule('xdc.runtime.Main');
( ~0 H/ A. V6 n- PDiags.setMaskMeta(2 k9 N) Y% ~+ V  o3 I: ~! {
    "xdc.runtime.Main",! u6 I7 c' C! E, U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ u- m/ U5 r7 Q/ }0 S    Diags.RUNTIME_ON
( o( ^2 P- x- [);# C3 Y) p5 }2 `# E
# }$ o, \+ o* y; V+ w. F  R- t; c
var Registry = xdc.useModule('xdc.runtime.Registry');
$ ~# _" a  x& U! ^8 eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 n2 t3 f- m3 k. U. U- l/ x: {Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 @% m8 q6 W5 v8 C. XRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ G7 |2 q1 t1 e6 ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ ]& \- S8 a6 A; d* t4 a

' J* T: k" J* j/* create a logger instance */
+ h! W, ]5 f5 a0 H+ \3 Xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 A) P7 b9 L  s5 c7 S% ~% i
var loggerBufP = new LoggerBuf.Params();/ k2 [) S+ K! p0 [" Z/ D& U; z
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 y  o$ e  B$ c; A. z! D- L( J$ floggerBufP.bufType = LoggerBuf.BufType_FIXED;# h' w: w# h3 J& J: [: x, D

7 z: h6 }) _; @) M/ d3 Gvar appLogger = LoggerBuf.create(loggerBufP);5 Z# c8 U$ E8 t) t# L2 A! H& ~
appLogger.instance.name = "AppLog_Core1";" K" T" i0 C8 _: u; x) X
Defaults.common$.logger = appLogger;3 ]0 M8 b# q) }  z& Z/ c
Memory.defaultHeapSize = 0x8192;   
. B( ]& i$ ^& w: u6 J* B0 M1 B, rIdle.idleFxns[0] = "&LEDStatus";
/ p8 m3 ?/ f: CCache.initSize.l2Size = Cache.L2Size_32K;* n8 \/ q. o6 |  I& V9 x, |# u
$ J6 q1 e- _1 ]% F2 L; L( _, Z
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-7-15 04:16 , Processed in 0.059280 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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