关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ w/ {/ S% m: E4 u: P3 Q3 p4 g
) \5 [- F9 F( H% @3 l5 P3 K9 v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# Y) N  q+ t" h. f7 v  d
- A* f0 U* ]) v2 }
其他程序段。。。。。) w. T9 m& q  h0 f

0 l! _, |  Z; q9 w" a4 f# w4 Y  S   free(x_d);* Q; c1 C: H0 R$ R

) y( L& q- ?) a, M2 e" F3 ]使用DSP侧单独调试功能,验证动态申请没有问题,
6 U$ C- A/ h' ^5 u- x4 w- \  _) D* }& A7 }
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 `- v1 s' i$ Y2 f& ]  Z: `" O

+ i4 s( q/ I, A4 o: E' T. \& b. f) q( I( _8 i9 ?

- g: h, c( `, X/ J  q$ H( s3 n" v4 u4 G- H/ D6 B5 {0 Y

+ ^. G; g" q' ?" c5 ^
3 Z2 {0 U: O$ f% m) v. s! V& _, ]4 _; e% G
+ v$ B5 h6 n& w1 C* q
: K# I5 Z" I& D) h' m0 r4 G

, d4 L9 m  l. e# f5 J) u/ B
分享到:  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 */
  M; h5 E6 S1 ?" V( k, d' d# X# mProgram.heap = 0;9 s4 L' H, s2 [3 |* J. k: t+ D% K$ U
Program.argSize = 100;  /* minimum size */& N7 h$ M8 M: }! _  F
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
  v  g* B5 D8 @. F+ F) Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( I8 J" @( [, x5 y1 f& T: m' Nvar heapMemParams = new HeapMem.Params();
2 f" r5 K3 V4 [0 v2 A% k1 cheapMemParams.size = 0x4000;6 |. X, B( _5 P4 G

4 ^8 Y8 u2 S5 m* Rvar Memory = xdc.useModule('xdc.runtime.Memory');; u0 y9 h; [. _2 a/ _8 W+ {- e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" G4 u0 q+ c3 ~, V  {" f

, y" s* G6 @, q( j( D5 k我大约calloc  每次共计大小为5K*16bits,
" |0 U' V  {6 I- O3 Y而默认配置才0x4000、需要改大。
! a- e. x  I. T, u: O, |
9 L8 b' x' D- C7 _* }
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明2 ]$ v- G$ O( e# j" o  d1 G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( R$ N, [1 |( |; D$ b( ?* n' r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% a+ L) Q; ~) t. A' ?

/ S$ m. L0 X1 L7 Z- L( z: _是不是需要在DSP.CFG中进行配置5 p( X( k% f+ D' U
我现在的配置为) e, M7 D5 z; Y1 M; T) h
7 L, {' @, ~) b8 }5 R$ {6 z7 Z" q
/*
3 N+ r7 B/ v5 m( [ *  ======== Operating System Configuration ========
" y* j' r4 V& u" @3 d& o */! n) O& S: O  |) g: L# h

+ i4 x2 B& \" O6 B- }4 n+ M5 A/* no rts heap */
& @, t. L% t0 A: e2 Z5 Y9 ^Program.heap = 0;
$ W8 D, q+ h9 _7 GProgram.argSize = 100;  /* minimum size */6 A$ E6 L2 ]. w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) w+ \8 ^2 T' Q5 Q! D% f
4 U* I  D+ o' t& E, ]/* create a default heap */1 z% P6 ]0 f6 u, M/ O8 j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 Y" K" y5 {6 a; |7 q2 n
var heapMemParams = new HeapMem.Params();) o5 t& U( _, ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. {6 A9 s- M5 Y' j& x, V1 ?9 e+ K5 X# ]9 I
var Memory = xdc.useModule('xdc.runtime.Memory');
9 R" S! F( R8 s1 [4 LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- \+ G: E( z9 W: X1 M6 ]( M
6 S/ e/ ~# F. {/* configure System module */* h; u( i  p- F
var SysMin = xdc.useModule('xdc.runtime.SysMin');5 q; B3 {0 k! @7 i: B+ P5 L
SysMin.bufSize = 0x1000;
; J6 \  _6 m0 f( C# ySysMin.flushAtExit = false;
& z( f/ @: A, w: B
- J. ^' i1 P% Vvar System = xdc.useModule('xdc.runtime.System');: A; {" ]8 `: z5 T& K
System.SupportProxy = SysMin;: v' Z- B5 l8 ?6 v1 q4 U
. M! D8 H/ Y9 _. `
/* configure SysBios to use the lower half of Timer 1 */; N" t7 q5 D8 W3 u9 [" d) B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 E2 ^+ V& L0 y/ e) o& }var Clock = xdc.useModule('ti.sysbios.knl.Clock');; E- b: U! @/ b% g# I
Timer.timerSettings[1].master = true;
3 [- N" T# z6 m% k# pTimer.defaultHalf = Timer.Half_LOWER;
7 f* L& T) W( j2 GClock.timerId = 1;
6 j# Z% O  _$ ^: I4 _
/ C- Q2 b5 n  b6 p% A( C- l, R. _, w, W' F; o( U$ `' K/ @0 V
/*  Z% ]3 g' L& _% _' v% r5 `. r3 o
*  ======== Miscellaneous Configuration ========
+ q& O6 M* m$ n' ]2 g: k2 G/ E */" ]4 b! h. v6 w) J/ H1 J4 A; q) D, [
" s; O7 \' l9 J# U1 I, M
/* set default diags mask */
6 G5 m1 h: W: Y- [& B* Lvar Diags = xdc.useModule('xdc.runtime.Diags');
  a  \$ T- k' O9 avar Defaults = xdc.useModule('xdc.runtime.Defaults');% L( c& e. J4 \2 [

* s1 e0 V" @, W" _; y2 f# O+ @6 jDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. @* l2 g- L6 W$ MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 o3 Q; C& n1 r. L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  C0 D1 I3 a3 z6 xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ b3 ]/ x5 C* N* J' |3 E2 |1 l" ]2 ADefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  ~, S7 m3 l+ q$ S7 vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- u/ H, g2 z+ `- j0 t2 ^: G/ ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 M9 |7 C4 i  K" fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  n8 C% Q' w9 kDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; I; f) K) @7 A9 b
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 m- J! V; Y, C  t3 D9 u" nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 |* A; D+ J" O- I3 _2 E! IDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
; J  N; o5 i  l- w: q5 x4 k$ gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) h* n2 p0 w/ ~7 c" wDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 G8 u$ X: \* |' l% x+ Y8 z$ ~5 C8 |; V

# C/ }  k7 M( T8 D0 d; k  I/* override diags mask for selected modules */
- B9 `" s1 i$ Y' Q5 m5 Oxdc.useModule('xdc.runtime.Main');: ^# N7 ]9 B1 e- {7 O! W, m' o
Diags.setMaskMeta(
/ W. w7 r) ?% t, u    "xdc.runtime.Main"," ?5 G' z8 P8 t/ ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 Q5 ~' B  g' p! J! z- G- ~
    Diags.RUNTIME_ON
' G) o/ Z6 ]2 j$ H. ^: ~( |);9 ^: O! b" u# _) y1 y
! x' `# Q0 s* R, n9 {  {, b; i" N
var Registry = xdc.useModule('xdc.runtime.Registry');
! Y  p7 N7 i( B: U  }' ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 `% w. D* v5 p, a/ F* D3 FRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. D% {) @* ?- i; i2 z& R4 sRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" j& ?  @) K* p7 P# K5 h+ h1 L
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 F$ W$ y* ]# _- s8 u6 g6 m/ ?$ q6 R) h4 O6 S- z5 P+ _9 N
/* create a logger instance */
# l8 p/ O3 ], O2 ?. fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: R( c; O- L, v. [& j, ]1 H5 Ivar loggerBufP = new LoggerBuf.Params();# U8 p- R0 j$ k) n! M/ Z5 U
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 K9 ]3 d" _* L& E/ YloggerBufP.bufType = LoggerBuf.BufType_FIXED;- I7 |0 S* f1 v( ~8 `$ i. g
; `% p$ l) e: Q& ^) M- x' p
var appLogger = LoggerBuf.create(loggerBufP);+ r( D5 W$ c% z/ A% {- v1 G
appLogger.instance.name = "AppLog_Core1";
$ e5 O. X# \1 U9 p/ C2 O1 hDefaults.common$.logger = appLogger;5 |( _8 E% p! {- x' l1 T* z
Memory.defaultHeapSize = 0x8192;   
: \) A3 y/ x: h! T* p( J- @Idle.idleFxns[0] = "&LEDStatus";; r  Q- |2 C8 u3 L# o
Cache.initSize.l2Size = Cache.L2Size_32K;2 ?+ D, \5 E7 g1 J
! K: F; E  Z7 Y8 i2 f5 Q: x
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-11 06:47 , Processed in 0.044979 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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