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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 w% y# |3 T: v; |. S- `1 J- x% Z6 p4 h; H1 B
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# A# b  p* z8 g: k
1 d7 H6 G' {& I# r4 N) ]
其他程序段。。。。。# ]' P0 X+ k. Q# r# {; D

: v  e( W/ }2 ?6 m4 |' ?   free(x_d);
1 |; {7 p4 l8 }5 U1 c% v8 ], g. C9 Q8 B- E: e% S- `" g
使用DSP侧单独调试功能,验证动态申请没有问题,
: F4 Q3 H1 z( b% B, \% |6 e( m8 v9 _- H% `+ m' y- I
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ `( a8 s$ P, B2 P( P

* ^. Z# G# Z9 E8 p
  i4 D5 Y( S$ t# v9 Y! {
* V; m& x# ^5 Q0 G2 J6 z& N! r. |/ N) [8 m2 {8 }( L6 H
( Y, _4 b- l* t! J4 s
; m( [) `- P2 e! v1 X
/ \' e# q- A' |" D! e! J6 I# g

2 g$ T+ x6 W& y' V0 A' `& p9 I
# h3 e3 g/ {# D' ]$ I7 s9 `8 A0 f$ _/ q
分享到:  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 */
) Q% j  G0 X% GProgram.heap = 0;3 |: |" B# R5 z  B) [4 ?
Program.argSize = 100;  /* minimum size */
* v6 u* T/ _8 xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */% I. ]& z- n3 j, D  j4 ?  f( S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 F% j% h% Z, E# dvar heapMemParams = new HeapMem.Params();
& u9 O$ G; E. w) N' T# {( RheapMemParams.size = 0x4000;
2 c: A( H9 {2 N% u0 t5 i/ M2 R' y# K
var Memory = xdc.useModule('xdc.runtime.Memory');
" A2 l4 L( Q! I! GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- ]8 f( a5 ]. [  F" K
$ h, J& a/ r/ O# d5 l$ d
我大约calloc  每次共计大小为5K*16bits,  [# e& Z& ?5 p1 k4 _# {
而默认配置才0x4000、需要改大。
; ?2 ]* [# Y5 ?% T0 N) {' g9 J) z
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明; X& t6 ?0 U9 r. a# R" J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ I* ^/ x4 N9 P  T(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 P' |( P+ u1 t2 E1 y" m
$ h! ?: i  `/ v% j9 R* |
是不是需要在DSP.CFG中进行配置( f( t3 J7 ~6 J. h9 @1 p: T, u
我现在的配置为3 R( k3 W9 \6 W0 G# z8 M& y

% L; C. A5 X% w" D+ E- ]! j/*1 V2 s5 k+ r% m0 E) k
*  ======== Operating System Configuration ========, D+ v3 o  B: W- N+ W& v
*/) ]/ a% A) G: U- q7 Q: D! _

. c/ M' e2 M' A. G: F/* no rts heap */; t2 B+ r2 T: [
Program.heap = 0;
! {! w+ E6 `" `Program.argSize = 100;  /* minimum size */
& @3 h9 g' k: G9 z, k2 X9 DProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' ?  C, ?- J' {7 m  k/ Y

  M$ |1 `. \3 c1 ^" T* v+ H/* create a default heap */" P; j: M7 @- v! |0 }* S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 f% g( S5 ~4 `, K; C4 X' z
var heapMemParams = new HeapMem.Params();1 w5 ~$ s. l' C# M' m' _
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& b  V& `0 E$ V6 ]8 ^  e! e0 c% T: J6 `, b+ t
var Memory = xdc.useModule('xdc.runtime.Memory');+ E  w2 i6 ]2 p" X- W% P; F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  J9 j* f* e4 [( m
$ d2 q* m2 `' d# E( e" U9 y7 R* |5 g9 C
/* configure System module */' D8 o3 c, A$ F" K
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  ^! l' l+ f# ], bSysMin.bufSize = 0x1000;
7 u, {* |3 b6 ISysMin.flushAtExit = false;' ?8 @2 g& h) O1 e8 E8 P4 k
: w, W; y8 u& v$ k
var System = xdc.useModule('xdc.runtime.System');+ a" M$ ?9 \: y# f& C9 Z) Z
System.SupportProxy = SysMin;
1 \- k& G7 N% G
/ \8 A% D7 P9 e( m/* configure SysBios to use the lower half of Timer 1 */, n8 Q$ P$ A9 V% b! ]; Y3 @* X
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ G* T+ R) Q5 x) V+ k. p' W
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ o. J8 i! q6 m" R* o
Timer.timerSettings[1].master = true;
7 ]7 R* E8 `  `# X* UTimer.defaultHalf = Timer.Half_LOWER;$ L+ X) [1 n) _5 q! G4 y
Clock.timerId = 1;" a" g- `) f& S; B/ m
, s8 E- H0 T7 h5 x4 A* y; T
9 \/ \" a0 o2 P9 g
/*
- S- z. r5 D; v+ o9 g *  ======== Miscellaneous Configuration ========8 n7 _7 o" e2 {8 i+ I
*/
" t  n3 ~4 {, d' w
, T( E( J7 U3 C) S. y) d/* set default diags mask */
( h- O: C0 n; g+ M* \" h# L3 Qvar Diags = xdc.useModule('xdc.runtime.Diags');2 ~" H9 |+ q0 x  w/ `
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 Q- G8 |% F8 t6 V3 B! \
8 f6 C* y& w8 W, K# N3 ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 Q) p4 F. t* XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 u& x4 M# v' x+ J# |7 |Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! ~# H" `: G5 Y; R8 Q& [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 O% I3 L- R: U2 R9 TDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# a1 p1 X' [2 G& r, w8 w. a
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 |7 W% D$ O) i. I5 P% J0 ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ r! }4 D6 j( h) VDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% u2 h  R8 |" h2 D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 g" G) ~1 ^; o5 a9 WDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; O9 g. R6 w+ |! H# l% Q! u+ f5 tDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 d+ g- {/ c" BDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: c4 Z9 ]$ N% @$ B" T3 e1 I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# t8 h$ i3 q2 R  s3 S9 p
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 n) S: A/ ]8 J" y/ i
3 B# u* o$ z+ a% f
/* override diags mask for selected modules */+ {: `& ?2 c4 `( c& g2 d9 P
xdc.useModule('xdc.runtime.Main');/ G3 @) N+ Z6 x4 G' u6 ]( \
Diags.setMaskMeta(2 E$ y: V2 R6 b* }# U
    "xdc.runtime.Main",
5 ?) e7 ^- U1 t* i& _    Diags.ENTRY | Diags.EXIT | Diags.INFO,% @0 C: d. H9 V# I( t
    Diags.RUNTIME_ON" g3 F. n8 |0 t; o& I* D
);. m' b/ \* r0 L" }" H1 M% W% V

: N  A/ q7 ^6 `& `0 zvar Registry = xdc.useModule('xdc.runtime.Registry');
( |0 p( l/ Z6 \) R+ a0 |Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' c( E1 v4 P  ~5 [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& @8 G9 E# H, h3 h) o* q  S
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 |3 I0 u. D8 y0 v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" S( }- b, w+ |" ?( }
7 R+ ]" _' H7 C5 E3 s+ Q; d+ x/* create a logger instance */1 p+ Y" j( K5 d" m8 k7 v; |1 k1 s
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# H1 `) m# i* zvar loggerBufP = new LoggerBuf.Params();6 h/ o+ a8 C* g& B: H. a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 S6 P2 z& x/ ]. E
loggerBufP.bufType = LoggerBuf.BufType_FIXED;, X3 }- B1 x0 e6 J
3 `, E% I3 ~3 C
var appLogger = LoggerBuf.create(loggerBufP);
, D! c5 @- I( q: z# N; qappLogger.instance.name = "AppLog_Core1";$ X6 \. G8 n& }# b/ T6 ?2 Y
Defaults.common$.logger = appLogger;
+ I% @6 _: k# q3 H+ S% u! d% _Memory.defaultHeapSize = 0x8192;   
9 n9 A  h& B* VIdle.idleFxns[0] = "&LEDStatus";5 M7 b/ f/ r$ [' _" A1 P
Cache.initSize.l2Size = Cache.L2Size_32K;- l# N  p; [4 h* i2 s  N
" y- k  G# K2 F3 S! W% Y5 E! `
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 21:07 , Processed in 0.051056 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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