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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# R' t* l" _) E' C8 P# Z5 K
0 a( q/ Q% F% h6 S. n/ l$ c! y2 T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! P. Z; X: Q- x: M; h( F" k! y

( L+ h- f9 W$ L0 a- u1 M/ j其他程序段。。。。。4 d- F9 r# j4 Q4 z. K* c

$ I8 p9 M; \; O. E) A7 [, d   free(x_d);: ^+ @0 [; d4 D' N9 Z+ k! r' V* @

& s8 u- E% \4 |0 `使用DSP侧单独调试功能,验证动态申请没有问题,
# v( H! _# |0 b& m  f% |
7 @- _7 E% r! m9 k. B) J1 z/ g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 s, u: A5 }8 S8 f5 H5 D
- w& |2 y: B- K8 k

; T1 d: Y2 J$ h# @2 w' T4 h! n: n! v& i0 {8 o7 f
$ l: i0 q9 c* N9 Y

5 g5 P/ k  P4 G9 N& U* E* y
+ s* g  x7 j- o5 c% N7 a4 h  D% ~  N

3 q6 t- a8 u: A% R* }$ n" N; z% C: G- K% K4 {
* H8 @1 Y4 Z1 q6 _
分享到:  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 */
% z% Y# `' u- j/ }Program.heap = 0;
' l7 A: {" @0 v7 b5 HProgram.argSize = 100;  /* minimum size */
9 i, t3 s: X& e+ M1 S/ K9 ?4 kProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */' Q8 s3 W7 Y% F/ q, Y& }3 f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 R' F& |+ U8 x8 d7 [# i/ {5 zvar heapMemParams = new HeapMem.Params();* j$ v3 Q: D. X: [
heapMemParams.size = 0x4000;1 ~! s: X3 x+ b  x( \3 g) h

: ~7 R/ n1 T/ o* `var Memory = xdc.useModule('xdc.runtime.Memory');$ a/ u7 s" i( G9 ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ s$ c. r. i( Q5 ^: V5 T- ]4 L7 r  {, c
% f, P# J6 d$ A  G6 o9 d# D
我大约calloc  每次共计大小为5K*16bits,
; U, U% y  M# r$ h+ j/ u$ a而默认配置才0x4000、需要改大。
# i4 u2 D' a6 t/ R; [6 Z1 ^: W
% I) r, T/ a+ ]2 ]: O! \
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明, e  m4 H; }& D* @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, o' _1 T+ F* l+ g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 {- k7 W& B, i+ V7 p7 p
% B% _% C( C2 k& [1 k8 y0 b
是不是需要在DSP.CFG中进行配置( P8 y- H& R) {6 `
我现在的配置为4 @8 A* ^  h+ `3 |: H2 i

, N  ?$ _1 L- y4 N( S1 g5 _1 e/*
% Z3 \3 N# R! s *  ======== Operating System Configuration ========% |) z0 O% l. R5 k' O8 p$ S
*/
! y/ P7 n$ R3 g' |+ V5 B7 u2 v; L) Q
/* no rts heap */' P/ `& Q3 Z; E! M! o
Program.heap = 0;: y, J( y: _7 O7 _
Program.argSize = 100;  /* minimum size *// V$ E* s! W; [( U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, N* T' q7 M& I* i4 z% B$ B' k2 {; b
; v5 X  ]7 r- L1 n
/* create a default heap */
* I  r- h  e2 A" ], d5 R8 j! x$ f( bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 @: z5 T5 f4 B/ jvar heapMemParams = new HeapMem.Params();2 m  V# }+ M0 {9 F1 z: J
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 G! m; a% ]0 r7 ?% o7 Q* ]9 j
) _6 F6 A# N. e
var Memory = xdc.useModule('xdc.runtime.Memory');
! j8 U  I7 t3 G$ }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 g" ?2 t8 L1 S* W! X+ o& e  r/ N

* W( p# a9 l1 m: ?  G' _5 E/* configure System module */
5 O) H8 \  ?! {( b! [4 o5 C5 Uvar SysMin = xdc.useModule('xdc.runtime.SysMin');+ ]: C; w. j2 Q8 v* J4 [" N
SysMin.bufSize = 0x1000;
- E% n' F/ t4 rSysMin.flushAtExit = false;
, j3 r7 N# S0 Y2 g
/ t9 c* W3 y0 E: _9 K, T5 Uvar System = xdc.useModule('xdc.runtime.System');
2 |: @2 M5 G2 W0 S# jSystem.SupportProxy = SysMin;0 f* v' [& r7 n: x; n; w! V

( I- x0 k: [7 d* F, i1 _1 p: X/* configure SysBios to use the lower half of Timer 1 */
- f0 v2 H" e5 _8 U  n6 d6 ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 p7 t) X5 r+ F/ W. ^/ C+ j5 G3 Xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');& K7 d" M2 j) |- {5 C1 `, r* ~
Timer.timerSettings[1].master = true;
8 E, B3 s5 {* d" P3 fTimer.defaultHalf = Timer.Half_LOWER;% j$ U1 f! T' b( Z+ N
Clock.timerId = 1;
# t: L! e8 t% }) [* l6 A0 Y7 V
( V/ o6 R, F; }' O  a
5 x6 t9 |9 V# M# I( V* D/*
2 Q0 g3 n, n1 r; I4 r) \# `& R2 b *  ======== Miscellaneous Configuration ========$ E1 o( F* l  `, h
*/
; X: K  p) o6 \, n
8 p. G) \' A6 d: C/* set default diags mask */3 {6 I: e+ B# c
var Diags = xdc.useModule('xdc.runtime.Diags');) @7 y* ^' B  @9 C4 ^# y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 T* \4 I) z) t5 p0 b9 n8 z
9 d( d$ V1 A  F; {; G' fDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 |) |9 D4 k& @( O& w' cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. K1 ~, F0 K6 S, r& y# o& Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  k# v$ p  ?( d- o. w2 n
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; w6 d  x% \; |' i# l: WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- C( C4 z. I+ m8 j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 U9 p- a' m  M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ g  F# q# H, v7 I/ a+ d, Z0 tDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. V  N- b  H1 c2 M# L* f
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ [, b; h  z6 R5 t% T) ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! A, K8 b7 B4 t1 v. L4 w, o' N. {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 h: [3 ~- H, z5 }5 S$ b8 hDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  Q* o: ?' I5 ]' g2 kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- f3 q2 {9 G0 O: }2 Y7 O% [
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% d% t/ _$ c: x6 U; w) q4 M

$ a' F& o- r& E. M/* override diags mask for selected modules */
! G2 L! `+ J- P8 {0 q6 Y! u* Qxdc.useModule('xdc.runtime.Main');
: D" i$ H, b; B7 Q: JDiags.setMaskMeta(
2 m  ^9 x2 w& h4 Q1 U0 J& w    "xdc.runtime.Main",
* g- c) I" s/ K5 j# v8 x0 r    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 |9 Y; X8 X( M  ^9 v/ e8 D
    Diags.RUNTIME_ON
$ G% \/ ?( g7 V: M3 ^6 x( w2 f& F% V);
, ]6 X" e. A! e  l; g$ y% w+ D& G- m! u9 ~7 z
var Registry = xdc.useModule('xdc.runtime.Registry');6 U3 I- U- s7 b& ^" M& x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 w# n$ a, C: k- ]
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ w- k( r. {- G' i+ B$ T' aRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 N% \+ U! R; H+ D2 j5 G& Y3 Z5 zRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ K6 J+ {& ?8 |) w3 E( ^1 k9 G; _
' c/ e" s7 `- c: @7 j: w! R/* create a logger instance */6 J- \; |0 v. l# |8 p" e4 g. n
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
* l2 [, P9 j+ [' K. M+ tvar loggerBufP = new LoggerBuf.Params();& P; F7 u8 m8 K  c4 f9 w9 [
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ W& }8 }) C8 S
loggerBufP.bufType = LoggerBuf.BufType_FIXED;: u+ B" |9 m4 z$ y

) o. M# T4 c5 r6 b- n# z/ _var appLogger = LoggerBuf.create(loggerBufP);: k+ v6 F5 D7 t  s* \* `
appLogger.instance.name = "AppLog_Core1";
; S# X3 I: n9 y& o5 y. n, l8 sDefaults.common$.logger = appLogger;
2 n' p# S! R2 V  JMemory.defaultHeapSize = 0x8192;   
% A& o3 y) P6 N7 \9 M% XIdle.idleFxns[0] = "&LEDStatus";
4 r# K' d4 W; y0 {( P  JCache.initSize.l2Size = Cache.L2Size_32K;# F$ q6 d' j7 T1 N3 G9 Y

/ u( V4 T3 A% Q. [& t. \4 U/ v8 m
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 21:09 , Processed in 0.041889 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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