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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* p' x- f1 z+ u+ d0 \  _7 ]) y* l6 Z/ p" u) d8 A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& D( p+ }1 _/ d4 G" T1 z$ }1 x& d

( j) ~3 @% Z# k其他程序段。。。。。: c5 K* |: I" g" a
" B: B& K% C0 I: @2 i0 @8 F' E
   free(x_d);* P  P% y' I9 q( ]

  I6 u) V8 `5 r& L使用DSP侧单独调试功能,验证动态申请没有问题,
# a% i' d2 o) [/ ]! T7 p3 U4 D# h  ~, i' T1 s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 y9 ~7 W  {% }- d, J
8 c, |. A/ Q* M* P

) b& i7 H: n8 E2 \* t. T5 d2 S4 a  a& H8 A: Q& X( n: O( x+ }

. q9 \- \9 A" D4 K. q, K/ }7 g& D4 y1 U- n

  ]) Q# x1 l8 H/ [0 S" D  N# l8 V  q  f

9 C% Z3 o; p! r2 Y7 ]) A1 z2 b. C: D1 Y5 k$ F
8 P" n6 M- Y6 r
分享到:  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 */! L& i; M* b7 p8 i2 X  Y5 B- \
Program.heap = 0;
0 _' l; g2 R- ?, `+ }/ Z+ L" RProgram.argSize = 100;  /* minimum size */
1 L- O; y5 A$ T& g# \Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
. b* A* e- X" v8 Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 W& S) N  }% p3 G
var heapMemParams = new HeapMem.Params();
" \) O# C, w. }$ b: _6 J5 J. ]heapMemParams.size = 0x4000;
# i* R  V; m: q7 V% D8 O8 U6 U$ u) ]7 {7 o$ K
var Memory = xdc.useModule('xdc.runtime.Memory');  p- v4 F, y. C) t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 X# z& C8 G0 _/ h

6 ?- h- ?' e& l我大约calloc  每次共计大小为5K*16bits,
( ]1 H* t: ^3 Q而默认配置才0x4000、需要改大。
# ?0 O  a; Y" f  Q1 Z. E/ B' ]9 D0 v
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明8 @: f- Q4 x5 |+ Y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ @/ Z2 H# P' O' G9 r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 g: ~/ H1 G# B, v! e1 F4 k: I
' f& {% Q: s+ u3 O. l) W
是不是需要在DSP.CFG中进行配置
' Q4 ]& {$ o5 Y5 a; e$ \, z我现在的配置为
8 _( v. E! \8 X" y3 h# ?# S% O0 `
- y/ X+ s& N( v/*
5 K0 b) Q, G7 [, ]4 G+ R' N *  ======== Operating System Configuration ========: M: U: ~% ^1 B: c
*/
6 u7 f, \$ {; X' z. s7 }. O$ X. F6 T( x1 s
/* no rts heap */5 D0 ~+ `$ g, d; b
Program.heap = 0;
% g9 X& H- ?& |) ]  \Program.argSize = 100;  /* minimum size */
( H) k- J% i- s6 R3 `8 DProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 f& L4 O5 V" b7 S* {. N8 u% K( N
9 J( W( t! l+ ]8 x* R5 O: @
/* create a default heap */
6 M0 i# Z: E) A- ^# m6 T/ gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: z* b5 ~8 f; I+ e# m
var heapMemParams = new HeapMem.Params();4 _$ ~; {  b5 Q( l: }+ [( b0 ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- q% \( U) k' M+ F

' N& G. @' p) T1 N: l% K. e7 @! x
var Memory = xdc.useModule('xdc.runtime.Memory');  U, }: N. A  w7 i, D  p- Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# v8 b  h1 R" I* t* h) [/ I
" E. ?8 t. ^. }/ L6 ?# Z$ o/* configure System module */
. S/ o3 [) ~/ N& S& s+ Fvar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 |% Q5 W4 R  \; r" G0 ?9 S! ASysMin.bufSize = 0x1000;1 J7 v# h  e4 I$ ^$ _  s4 c0 w
SysMin.flushAtExit = false;( }1 B# ~* q! C# m6 @3 G

  J6 m9 |' D; r2 ivar System = xdc.useModule('xdc.runtime.System');
- J- P2 b# x( zSystem.SupportProxy = SysMin;
8 \. o9 t7 i& t* O( P# Q7 u3 e! C& R7 Q" K; Z) \/ Z/ y/ T
/* configure SysBios to use the lower half of Timer 1 */& ?0 i& I# K% C( O! U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" P' H0 {# P9 N5 L1 Rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');# v7 b$ O% b! g& {
Timer.timerSettings[1].master = true;
) T5 g- E3 z3 \( l8 FTimer.defaultHalf = Timer.Half_LOWER;
6 t" l0 c" k& RClock.timerId = 1;
% }& {7 R& Q# Y! n
3 Q, L' q1 F2 a4 M6 g) o% N) \% o
4 g& d  n8 |: u' h9 x, }/*
' s$ d! T, S' s! Z& J *  ======== Miscellaneous Configuration ========
7 o/ w6 `/ u5 u# _* k */8 I$ [! l* @! E0 S; M7 Z

& x! F6 W, B$ X7 B( H- T/* set default diags mask */6 ?9 ?4 f8 V% }. p3 H0 z
var Diags = xdc.useModule('xdc.runtime.Diags');
  _' F/ t! v7 _  nvar Defaults = xdc.useModule('xdc.runtime.Defaults');$ d6 z5 o6 I# \( {3 Z

5 C" u1 }, [; ?) Y- gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* @9 t7 {0 p# W3 V6 j. ?% PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 G5 o1 `; W, l, @6 N
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 N$ G: C% d/ T4 q- ]- w( e3 }0 [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! u' z; A% e  Z0 P) P" P$ FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; o: B5 `7 w" g6 V7 eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( n8 W/ s7 F8 i) l7 l
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: s4 F* g5 F( G; k, M" ~3 @( |, x
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! ~  M) Q1 m$ y3 j: ?& dDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ c$ ~& d. T: ^/ t2 v5 R, fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" G' J- R7 a& I( J4 f6 ]$ [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 ^% x8 ?! k4 `! F2 A9 O
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ k7 K9 H! }7 @/ JDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ n. Q" c% T  }0 F2 y1 o  pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& h5 W5 D: J+ Y2 ^
- R/ H! @5 z7 Q: [' Z4 |) K+ E/* override diags mask for selected modules */8 g5 L$ P( q. A( a1 e! p1 K
xdc.useModule('xdc.runtime.Main');, H8 D3 a( @6 M- B' K9 g
Diags.setMaskMeta(% }6 S) H! A1 b+ {& H2 t% A* X; H, b
    "xdc.runtime.Main",
. \+ g3 m& m" [    Diags.ENTRY | Diags.EXIT | Diags.INFO,' N: @- S+ }- W& I6 V8 i/ J
    Diags.RUNTIME_ON
2 h" v  E6 l5 w0 C. f);
  _; N, E7 @, p" c" s: `+ T, u# }* ?/ z6 K: O
var Registry = xdc.useModule('xdc.runtime.Registry');- @& x: M3 x- w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# m. h& U# |9 ]5 L9 Y! h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 C( ?" B/ b# e2 x- r' b# d0 j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;, v6 n$ t$ x; N
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 Q" Z2 \2 y3 P2 |  k) {2 z, v( r7 \0 F- [' T+ }9 M
/* create a logger instance */; C- H$ l+ V0 @9 l& X. A
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, j. C; Q2 \7 p" P: S+ d% t& n
var loggerBufP = new LoggerBuf.Params();3 o4 s# F% F. `% N4 V; d/ S& v: d; _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 Z4 t, }) o3 R; k5 ploggerBufP.bufType = LoggerBuf.BufType_FIXED;' Q$ r6 f$ J  [9 ^' i8 ^

( j: i1 D1 ?8 @6 [& y% avar appLogger = LoggerBuf.create(loggerBufP);
0 Y+ S& _. |  q% M, m5 @0 Q& U3 sappLogger.instance.name = "AppLog_Core1";
" p1 I( _' @% X3 |" [Defaults.common$.logger = appLogger;2 s8 f+ }+ V) x. B' e  r& ~
Memory.defaultHeapSize = 0x8192;   
5 ]6 A; K8 p9 W6 ^, UIdle.idleFxns[0] = "&LEDStatus";
" X0 t+ u. z+ I8 a3 A/ ?Cache.initSize.l2Size = Cache.L2Size_32K;
) w$ v" }7 r( ]6 i( r7 c, [
3 _( V$ F8 \5 D7 X: G. Z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-18 18:09 , Processed in 0.041086 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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