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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 r( k  j+ J" d

4 Z4 x" W/ K* \* {. F# O    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% M- }! D/ f. l, ?

+ e2 c4 k9 I2 u( H1 }其他程序段。。。。。
9 W* d  q: l4 {5 I$ N9 ] " }( A9 q7 m4 L- L% O2 p
   free(x_d);. M+ S0 a4 L0 q
  A" K; T7 [  _
使用DSP侧单独调试功能,验证动态申请没有问题,, A$ J- X, C4 S5 B0 [1 _. o

9 g) J* V- x2 T  y5 b9 T+ a7 v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ S4 l/ G! Y: I+ }  Y8 g$ R2 t) ]
' c# Z  [$ P% V6 ^4 J
7 M6 ~7 s- a& C% A6 F! t1 B
" F1 x% N% H4 h  a* x; g( z

/ L+ `: _$ f  I- F5 O* p& r
5 K# e4 w( P3 Q! D: B" W$ W* r" z
2 |& E& k& N  r
* P! j, ]: M2 `& q
- p+ E1 Z3 d, t' t" l# _0 E  l" o: |/ |' f4 S3 F# }. N

, K; B7 o' B) A& }; _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. x$ S3 A: C& |% v5 r+ X& I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' V) q8 q8 P" e' b: r( K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! a* k$ z6 w% ~/ K9 ]0 V
: O9 Z2 Y0 B* @, O- d
是不是需要在DSP.CFG中进行配置
, s3 U2 S  e: O4 w& u7 D! U我现在的配置为3 {2 E2 \' @" q+ D( D
: S. v- d% W" l- S4 Y
/*) d: F  b! G. ~9 R
*  ======== Operating System Configuration ========* j! |* U3 p! o
*/
; @6 a3 c- |1 z6 X' o% @+ \# P& }0 V2 l4 Y2 A* |" T# R
/* no rts heap */
7 G8 G5 [- z/ w" \+ IProgram.heap = 0;& l% S0 G* u" y8 E; Q) L) W& I9 b
Program.argSize = 100;  /* minimum size */
6 {* O& s6 V: n2 x  Y+ L! G( qProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- V8 |; a# |) N+ Z
: R6 m4 T  `7 W$ `+ L! y6 i6 o% r/* create a default heap */7 {. ^0 [2 |5 a- }, x& L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. W7 C1 i  F$ A  e; m: dvar heapMemParams = new HeapMem.Params();
6 q7 T( k+ J1 `( h+ yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( P! E! |4 ^- P; s; ?& P7 \
; O+ I, C* w8 P& Q
var Memory = xdc.useModule('xdc.runtime.Memory');
' p$ {8 c+ J! \; X$ yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) t* j! O4 ]5 d; o5 C* L3 @

5 h; J  I) a+ [5 Y# f% N/* configure System module */1 o1 J, N% T! |! `/ s; d7 H
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 E. T7 B" U: I5 s8 s8 I+ }* mSysMin.bufSize = 0x1000;  u6 g; x$ V0 v  B
SysMin.flushAtExit = false;% P2 A9 Q2 f4 e

$ ^3 f' d% V1 {" L2 @var System = xdc.useModule('xdc.runtime.System');
0 u4 l' K% c3 v: j6 @& DSystem.SupportProxy = SysMin;( @0 r* N- C! j

- i2 l% b* F* C: i) F8 }/ S/* configure SysBios to use the lower half of Timer 1 */
$ a- f; A  Q, d$ a6 q1 ~! ~var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 s3 @$ U# f' J: G5 Z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 D9 _& i6 {- ]( Q; [) J$ q
Timer.timerSettings[1].master = true;" X1 k) x0 i  k6 g' w& @5 _$ M
Timer.defaultHalf = Timer.Half_LOWER;$ g. ]; `( N, S0 n% q! {6 `
Clock.timerId = 1;: a" {$ C( ?0 V% ?$ c: n
3 F9 J+ q! V8 k' [

% r. G3 ?- V8 H/** o' ~" p& u. }: e* ^/ ?
*  ======== Miscellaneous Configuration ========8 k1 g9 W5 O' u
*/2 W; ?$ g& X" ^7 `8 M5 E; {  ^+ m( e$ B

; e2 P$ v: D5 N/ }/ [/* set default diags mask */
7 L3 H3 g2 h+ {7 j% W6 d5 Avar Diags = xdc.useModule('xdc.runtime.Diags');
6 L# f) S% Y/ svar Defaults = xdc.useModule('xdc.runtime.Defaults');! U% t, m# U9 A' y* ?, [
, w$ \- ~! B. U9 ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' S0 d  X  E3 ~
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' |! V) Y; h- ^4 e2 Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ S5 S9 N. O) A; j3 l/ {7 B2 qDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 `. P# M9 o$ q% j- \. sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* G% e8 Q: O6 p# g& G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& r+ X1 }6 O  {6 QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 {/ M( `. g% ~Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& v; h# o$ ]( M9 p9 s5 x( [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 a1 X' C3 H' N$ S* CDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 }: D0 k/ x& D7 t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 h' A6 C0 r' Y8 G
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 i, {6 O# |, }$ p5 v  U7 h7 VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) N4 a/ N& I/ {5 o2 m5 d
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! S) ^6 d7 l8 q
+ v! |7 Z/ F  h/ U/* override diags mask for selected modules */
: I/ J9 g8 O' H, rxdc.useModule('xdc.runtime.Main');; U+ u; w6 e0 F( q# X
Diags.setMaskMeta(
  i% P7 |. U8 X0 G    "xdc.runtime.Main",
5 p' w0 B: f% s    Diags.ENTRY | Diags.EXIT | Diags.INFO,, k6 q' c; s# Z
    Diags.RUNTIME_ON
0 z3 U  k( O/ b4 @4 f& k# \);# i2 W7 Y- q- n- X$ |, @1 `9 h

$ ^7 o1 n! R! u; a* @var Registry = xdc.useModule('xdc.runtime.Registry');
" v9 U% a+ i" H# Y" [Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: h0 t5 i' Q6 r5 j6 mRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 m' V5 [; ?/ J8 e$ V: f' @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 J$ g& G/ N6 @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ G' G+ u! E$ B! j; s9 `% p0 x
/ S) T3 B7 u( c9 n/ ^
/* create a logger instance */
8 Y# w& r+ P0 e! ~var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& s9 u9 v7 y! T( g
var loggerBufP = new LoggerBuf.Params();/ k8 G9 y* |2 m5 E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: V) ?- W% W7 M6 @% K
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 [" D) _3 Q: @( y5 k+ M6 R- H. S# k0 Y
var appLogger = LoggerBuf.create(loggerBufP);) Z/ i) j  S0 d1 ]( i1 @3 q2 {9 ?  ~
appLogger.instance.name = "AppLog_Core1";
* M, @$ A/ ?" J) U3 O# MDefaults.common$.logger = appLogger;3 F6 m( }$ O3 @4 `$ X' _( b! \
Memory.defaultHeapSize = 0x8192;    1 w4 I* l/ k( j- R/ w' x
Idle.idleFxns[0] = "&LEDStatus";
5 S$ ^# Y: t% X" E7 jCache.initSize.l2Size = Cache.L2Size_32K;
& Y8 ?' A! Q9 _! }% F* X8 X
5 u0 @! I4 x% @% X. ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
: J6 X2 e( y3 b6 M5 W0 zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; P. S  J  W9 E# ~, m% X9 C
var heapMemParams = new HeapMem.Params();
1 h( M! b: d: ]+ yheapMemParams.size = 0x4000;1 w, V! `/ H# q1 ?2 x
- K$ d0 m% a& D8 _2 Y' U' Q. X/ _
var Memory = xdc.useModule('xdc.runtime.Memory');
, V& U0 U1 w( J/ i5 p2 z2 I- p! c  NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 J, \! P! _; ~! o6 s1 ?5 V& @# X, G' L# G
我大约calloc  每次共计大小为5K*16bits,
  Y' F9 w/ J9 Q而默认配置才0x4000、需要改大。. Q6 g& ?) `7 Q  c' Q
4 w/ n) S5 G. Z8 Z* v# j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 G& z/ Q' K0 N7 N  }5 i
Program.heap = 0;
$ |! d2 W  [. J$ t& oProgram.argSize = 100;  /* minimum size */" g4 |, D& L: g% U  V% W
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 06:38 , Processed in 0.047897 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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