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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 Z& k) U& v/ |/ H8 \0 R& i" |! b- W  z* T! F% C6 w
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 X3 U6 a% \& u) r

2 B  H: o# @2 U2 Z: A其他程序段。。。。。# Q* K+ n+ x5 p  S& @
+ r: b8 c; b2 r
   free(x_d);
- [8 m6 G, m9 x7 ?
! w$ j6 A+ [7 O使用DSP侧单独调试功能,验证动态申请没有问题,' B) _$ L' }2 H$ P5 a  ?

9 b( V4 f7 t8 M0 E8 c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 B* K# U" _. ~$ P) o. c6 t- L$ Y

$ F+ |1 E% {* U. G. p* S9 |6 n! `
6 _: l! ?3 {6 U7 m0 a. C. I: O" g* j0 }; p1 a+ o5 E8 X
/ ?+ u+ k4 j! A4 O  G" u

7 t9 |7 g: V/ U. l7 A% ]" p7 S
5 d& d" L( ^- e1 a' p* N  N& O. P8 e/ Q# _& b- O% h, P- Z* h

5 n0 s  |1 H" y& y) v# N8 Y+ h8 b8 v( ?( [* v1 h% H, h

, m( F& i! D- O4 o+ F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ K, X6 m- t( |8 z: J& u* P% F0 ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- A& o/ \" \( @0 J8 t0 |) W4 b
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 X. v, y2 r8 u

) E- c, [: a' _/ T0 b# t是不是需要在DSP.CFG中进行配置
3 Q( s( K% q. u. R9 e我现在的配置为
6 q0 a. g; J+ W; V4 Q/ ]8 A: i
/*
- G  J( ^  c9 Q/ I9 q, f *  ======== Operating System Configuration ========+ x3 z! g7 Z$ d' R# u
*/  Z- ]! o2 Y$ V' v6 A8 p" E

. z8 }& c9 m: m( y) c( i2 ]/* no rts heap */' k7 M2 U# C% R8 A! h# Z
Program.heap = 0;- H% s& |7 H+ n& F7 i  v4 w0 J
Program.argSize = 100;  /* minimum size */
/ \4 Q/ q- K. v- Q- j5 yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' L& a! y# }1 A! v* t
, C' Q; f# f  O# y+ [/* create a default heap */
$ G% q( b6 Q0 e% Z$ N! K2 J! {1 ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 y" B2 q( [: N1 ?+ ?
var heapMemParams = new HeapMem.Params();. o; Q1 I- a# f/ _7 V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 b8 g, a; U) Z. ^  @5 x
; b& P3 Q1 l7 k# \: i: C
var Memory = xdc.useModule('xdc.runtime.Memory');2 t5 x0 C$ J) l6 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; j# b  u& z$ M! Y% D8 a- R* K  m) o! l8 A" X$ {9 A% a
/* configure System module */
/ H' R0 c  Q  Z% t7 _- J* j5 [, v8 \var SysMin = xdc.useModule('xdc.runtime.SysMin');
: o6 b( o# c" lSysMin.bufSize = 0x1000;
, @8 H5 r- s1 L( e7 ]  YSysMin.flushAtExit = false;
9 X, K' R- e0 M9 C. k  S7 C; R6 _, L! w/ k9 t& E! G! o% B( J
var System = xdc.useModule('xdc.runtime.System');
) e+ _2 p* q5 N. y* p+ P; VSystem.SupportProxy = SysMin;
7 t, B; Z& O5 k3 _3 g
, _  n. Q  [, |/ U! n/* configure SysBios to use the lower half of Timer 1 */
5 Z7 L/ H1 v# ]/ r# N; Z. zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 n2 ~2 L( Y* I- ^6 M' a% Yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 r2 r6 V$ F$ @5 {Timer.timerSettings[1].master = true;
! [4 `- e: X7 K( _: ]& TTimer.defaultHalf = Timer.Half_LOWER;
: B2 m4 [8 l- y% v7 e, ^3 ]" uClock.timerId = 1;& E3 S! }! d- W

% j. \* O8 f) A7 J, X, V( ^- o  u+ V! g, ]4 P+ }7 p
/*
2 S" W( A7 J5 g& Q$ }$ ]# O9 { *  ======== Miscellaneous Configuration ========% w! i2 i! e6 b) W9 _, D
*/
9 p& D$ C; I; }8 m
" r! f& ?+ R8 x3 d. I/* set default diags mask */0 p0 N: q, Z9 R7 R  U
var Diags = xdc.useModule('xdc.runtime.Diags');
0 {$ V+ l$ R8 \3 `6 lvar Defaults = xdc.useModule('xdc.runtime.Defaults');: |5 B1 _4 S$ `4 K! n

) }8 G( M( q; c6 {7 u0 p, _9 t, aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 u( S  u& c2 E# A$ `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 N1 V* z0 H) s) N5 d  qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 F0 m& |: [" D, F: e/ ?* XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& D$ q" F9 a8 A" u0 t: s" [3 U
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' T, r7 h$ t! g+ U. d/ r; C
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) P; L3 S4 L$ h8 F7 L
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; ^+ g+ U0 F" F6 C8 h: Q6 iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- T, L& o) l  q  ^2 }
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* X( E- ^+ p& L" U5 J; X( r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 g1 e/ I$ E" y/ T# HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 ~$ ~6 D, d0 x6 n0 R
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( p( r0 A5 Y# G/ X7 b. x- H: L6 [
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& N5 |$ v  U8 X6 {Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ u( S. Q8 P$ |: [
! ^' M) a* E, ^/* override diags mask for selected modules */$ X' I( ]% M1 I3 _/ L( ^6 X
xdc.useModule('xdc.runtime.Main');0 N( g- n' ?4 f( S
Diags.setMaskMeta(- v; I% Q' c3 L
    "xdc.runtime.Main",
# g. |! r. K% ?* F    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; b# N+ d" l$ V2 C    Diags.RUNTIME_ON  `' N; A  ~& D6 d5 d
);
2 z* j1 l* c2 o3 i; A& A
! S8 ?2 Z% l, K: e* q) b! f/ Dvar Registry = xdc.useModule('xdc.runtime.Registry');
$ Q  D1 {; g! E0 M! E0 @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- o6 `; y, I" G0 y- w5 Z$ SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ L8 u2 M- y( w9 @9 y- }& |0 m" n: H% V
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ E- C4 c. E; y* r: M. q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 {- p  M2 X2 Q3 }! T- s9 k4 v) [  D
/* create a logger instance */8 x/ N7 G+ J# W: F
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# [0 T# {) ?0 m9 x& t
var loggerBufP = new LoggerBuf.Params();4 ~, K. d. X) P. @* x7 t1 C
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  T3 K; k5 `- c+ {) b- y- v) ~loggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 M5 f7 g( K2 U. a6 @. P% u1 f1 W. m* ]! s
var appLogger = LoggerBuf.create(loggerBufP);
& s% t0 C! P3 h' |1 \appLogger.instance.name = "AppLog_Core1";9 p% b3 Y% T6 l; n  h4 E
Defaults.common$.logger = appLogger;
* }( v/ l4 ]" G4 v% }7 ^5 ^Memory.defaultHeapSize = 0x8192;   
, k; c+ r; W" _1 o! H8 MIdle.idleFxns[0] = "&LEDStatus";+ |/ l, z' }* ]8 q5 l/ ]
Cache.initSize.l2Size = Cache.L2Size_32K;
. k  E7 |' k5 A% w$ d+ }, d( r
# x7 N$ ?# ]$ u0 _6 ^# t0 \
回复 支持 反对

使用道具 举报

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 */
, v7 B/ }4 P4 R; B/ h) mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 L9 q' m) V% D3 f' y. Lvar heapMemParams = new HeapMem.Params();$ K& Y& u! q9 A( q" U
heapMemParams.size = 0x4000;: `( `, ]3 }6 \# Q' L- W

! v1 h% ?3 Y% P+ hvar Memory = xdc.useModule('xdc.runtime.Memory');' m5 e0 y) f1 K9 ?5 @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 Q* L% k& X: ?
5 G" X' X* g  X3 u) P$ R我大约calloc  每次共计大小为5K*16bits,
8 L* ?) M5 [# P而默认配置才0x4000、需要改大。2 l. T' S$ B' b: z) C7 `5 W

* ?4 t& ]5 y6 m( v" A+ z! P4 A& a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ V4 `& Y& P4 ^# X' L6 l8 [, a4 KProgram.heap = 0;% F* V9 w3 p& U0 @: ^, I( I
Program.argSize = 100;  /* minimum size */
" `3 z& Y0 P/ z* GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 06:34 , Processed in 0.043732 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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